// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'package:path/path.dart' as p;
import 'package:test/test.dart';

import 'descriptor.dart' as d;
import 'test_pub.dart';

void main() {
  setUp(() async {
    await servePackages()
      ..serve('normal', '1.2.3',
          deps: {'transitive': 'any', 'circular_a': 'any'})
      ..serve('transitive', '1.2.3', deps: {'shared': 'any'})
      ..serve('shared', '1.2.3', deps: {'other': 'any'})
      ..serve('dev_only', '1.2.3')
      ..serve('unittest', '1.2.3', deps: {'shared': 'any', 'dev_only': 'any'})
      ..serve('other', '1.0.0', deps: {'myapp': 'any'})
      ..serve('overridden', '1.0.0')
      ..serve('overridden', '2.0.0')
      ..serve('override_only', '1.2.3')
      ..serve('circular_a', '1.2.3', deps: {'circular_b': 'any'})
      ..serve('circular_b', '1.2.3', deps: {'circular_a': 'any'});

    await d.dir('from_path',
        [d.libDir('from_path'), d.libPubspec('from_path', '1.2.3')]).create();

    await d.dir(appPath, [
      d.pubspec({
        'name': 'myapp',
        'dependencies': {
          'normal': 'any',
          'overridden': '1.0.0',
          'from_path': {'path': '../from_path'}
        },
        'dev_dependencies': {'unittest': 'any'},
        'dependency_overrides': {'overridden': '2.0.0', 'override_only': 'any'}
      })
    ]).create();
  });

  group('lists all dependencies', () {
    test('in compact form', () async {
      await pubGet();
      await runPub(args: ['deps', '-s', 'compact'], output: '''
          Dart SDK 0.1.2+3
          myapp 0.0.0

          dependencies:
          - from_path 1.2.3
          - normal 1.2.3 [transitive circular_a]
          - overridden 2.0.0

          dev dependencies:
          - unittest 1.2.3 [shared dev_only]

          dependency overrides:
          - overridden 2.0.0
          - override_only 1.2.3

          transitive dependencies:
          - circular_a 1.2.3 [circular_b]
          - circular_b 1.2.3 [circular_a]
          - dev_only 1.2.3
          - other 1.0.0 [myapp]
          - shared 1.2.3 [other]
          - transitive 1.2.3 [shared]
          ''');
    });

    test('in list form', () async {
      await pubGet();
      await runPub(args: ['deps', '--style', 'list'], output: '''
          Dart SDK 0.1.2+3
          myapp 0.0.0

          dependencies:
          - normal 1.2.3
            - transitive any
            - circular_a any
          - overridden 2.0.0
          - from_path 1.2.3

          dev dependencies:
          - unittest 1.2.3
            - shared any
            - dev_only any

          dependency overrides:
          - overridden 2.0.0
          - override_only 1.2.3

          transitive dependencies:
          - circular_a 1.2.3
            - circular_b any
          - circular_b 1.2.3
            - circular_a any
          - dev_only 1.2.3
          - other 1.0.0
            - myapp any
          - shared 1.2.3
            - other any
          - transitive 1.2.3
            - shared any
          ''');
    });

    test('in tree form', () async {
      await pubGet();
      await runPub(args: ['deps'], output: '''
          Dart SDK 0.1.2+3
          myapp 0.0.0
          ├── from_path 1.2.3
          ├── normal 1.2.3
          │   ├── circular_a 1.2.3
          │   │   └── circular_b 1.2.3
          │   │       └── circular_a...
          │   └── transitive 1.2.3
          │       └── shared...
          ├── overridden 2.0.0
          ├── override_only 1.2.3
          └── unittest 1.2.3
              ├── dev_only 1.2.3
              └── shared 1.2.3
                  └── other 1.0.0
                      └── myapp...
          ''');
    });
    test('in json form', () async {
      await pubGet();
      await runPub(args: ['deps', '--json'], output: '''
{
  "root": "myapp",
  "packages": [
    {
      "name": "myapp",
      "version": "0.0.0",
      "kind": "root",
      "source": "root",
      "dependencies": [
        "normal",
        "overridden",
        "from_path",
        "unittest",
        "override_only"
      ]
    },
    {
      "name": "override_only",
      "version": "1.2.3",
      "kind": "transitive",
      "source": "hosted",
      "dependencies": []
    },
    {
      "name": "unittest",
      "version": "1.2.3",
      "kind": "dev",
      "source": "hosted",
      "dependencies": [
        "shared",
        "dev_only"
      ]
    },
    {
      "name": "dev_only",
      "version": "1.2.3",
      "kind": "transitive",
      "source": "hosted",
      "dependencies": []
    },
    {
      "name": "shared",
      "version": "1.2.3",
      "kind": "transitive",
      "source": "hosted",
      "dependencies": [
        "other"
      ]
    },
    {
      "name": "other",
      "version": "1.0.0",
      "kind": "transitive",
      "source": "hosted",
      "dependencies": [
        "myapp"
      ]
    },
    {
      "name": "from_path",
      "version": "1.2.3",
      "kind": "direct",
      "source": "path",
      "dependencies": []
    },
    {
      "name": "overridden",
      "version": "2.0.0",
      "kind": "direct",
      "source": "hosted",
      "dependencies": []
    },
    {
      "name": "normal",
      "version": "1.2.3",
      "kind": "direct",
      "source": "hosted",
      "dependencies": [
        "transitive",
        "circular_a"
      ]
    },
    {
      "name": "circular_a",
      "version": "1.2.3",
      "kind": "transitive",
      "source": "hosted",
      "dependencies": [
        "circular_b"
      ]
    },
    {
      "name": "circular_b",
      "version": "1.2.3",
      "kind": "transitive",
      "source": "hosted",
      "dependencies": [
        "circular_a"
      ]
    },
    {
      "name": "transitive",
      "version": "1.2.3",
      "kind": "transitive",
      "source": "hosted",
      "dependencies": [
        "shared"
      ]
    }
  ],
  "sdks": [
    {
      "name": "Dart",
      "version": "0.1.2+3"
    }
  ],
  "executables": []
}''');
    });

    test('with the Flutter SDK, if applicable', () async {
      await pubGet();

      await d.dir('flutter', [d.file('version', '4.3.2+1')]).create();
      await runPub(
          args: ['deps'],
          output: contains('Flutter SDK 4.3.2+1'),
          environment: {'FLUTTER_ROOT': p.join(d.sandbox, 'flutter')});
    });

    test('with the Fuchsia SDK, if applicable', () async {
      await pubGet();

      await d.dir('fuchsia', [d.file('version', '4.3.2+1')]).create();
      await runPub(
          args: ['deps'],
          output: contains('Fuchsia SDK 4.3.2+1'),
          environment: {'FUCHSIA_DART_SDK_ROOT': p.join(d.sandbox, 'fuchsia')});
    });
  });

  group('lists non-dev dependencies', () {
    test('in compact form', () async {
      await pubGet();
      await runPub(args: ['deps', '-s', 'compact', '--no-dev'], output: '''
          Dart SDK 0.1.2+3
          myapp 0.0.0

          dependencies:
          - from_path 1.2.3
          - normal 1.2.3 [transitive circular_a]
          - overridden 2.0.0

          dependency overrides:
          - overridden 2.0.0
          - override_only 1.2.3

          transitive dependencies:
          - circular_a 1.2.3 [circular_b]
          - circular_b 1.2.3 [circular_a]
          - other 1.0.0 [myapp]
          - shared 1.2.3 [other]
          - transitive 1.2.3 [shared]
          ''');
    });

    test('in list form', () async {
      await pubGet();
      await runPub(args: ['deps', '--style', 'list', '--no-dev'], output: '''
          Dart SDK 0.1.2+3
          myapp 0.0.0

          dependencies:
          - normal 1.2.3
            - transitive any
            - circular_a any
          - overridden 2.0.0
          - from_path 1.2.3

          dependency overrides:
          - overridden 2.0.0
          - override_only 1.2.3

          transitive dependencies:
          - circular_a 1.2.3
            - circular_b any
          - circular_b 1.2.3
            - circular_a any
          - other 1.0.0
            - myapp any
          - shared 1.2.3
            - other any
          - transitive 1.2.3
            - shared any
          ''');
    });

    test('in tree form', () async {
      await pubGet();
      await runPub(args: ['deps', '--no-dev'], output: '''
          Dart SDK 0.1.2+3
          myapp 0.0.0
          ├── from_path 1.2.3
          ├── normal 1.2.3
          │   ├── circular_a 1.2.3
          │   │   └── circular_b 1.2.3
          │   │       └── circular_a...
          │   └── transitive 1.2.3
          │       └── shared 1.2.3
          │           └── other 1.0.0
          │               └── myapp...
          ├── overridden 2.0.0
          └── override_only 1.2.3
          ''');
    });
  });
}
