# Copyright (c) 2019, 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.md file.

# Compile an application with a number of modules.
# Recompile the same thing again and make sure the calculated dependencies are
# the same.

type: newworld
modules:
  module:
    module/a.dart: |
      import 'package:module/b.dart';

      class A implements A2<B> { }
      class A2<T> { }
    module/b.dart: |
      class B { }
    module/.dart_tool/package_config.json: |
      {
        "configVersion": 2,
        "packages": [
          {
            "name": "module",
            "rootUri": ".."
          }
        ]
      }
worlds:
  - entry: main.dart
    fromComponent: true
    sources:
      main.dart: |
        import 'package:module/a.dart';
        class Foo extends A {}
      .dart_tool/package_config.json: |
        {
          "configVersion": 2,
          "packages": [
            {
              "name": "module",
              "rootUri": "../module"
            }
          ]
        }
    modules:
      - module
    expectedLibraryCount: 3
    neededDillLibraries:
      - package:module/a.dart
      - package:module/b.dart
    expectedContent:
      org-dartlang-test:///main.dart:
        - Class Foo
      package:module/a.dart:
        - Class A
        - Class A2
      package:module/b.dart:
        - Class B
  - entry: main.dart
    worldType: updated
    expectInitializeFromDill: false
    # Nothing actually updated, as such everything is expected as before.
    modules:
      - module
    expectedLibraryCount: 3
    neededDillLibraries:
      - package:module/a.dart
      - package:module/b.dart
    expectedContent:
      org-dartlang-test:///main.dart:
        - Class Foo
      package:module/a.dart:
        - Class A
        - Class A2
      package:module/b.dart:
        - Class B