# 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:
  moduleA:
    moduleA/a.dart: |
      export 'package:moduleB/b.dart';

      class A { }
    moduleA/.dart_tool/package_config.json: |
      {
        "configVersion": 2,
        "packages": [
          {
            "name": "moduleA",
            "rootUri": ".."
          },
          {
            "name": "moduleB",
            "rootUri": "../../moduleB"
          }
        ]
      }
  moduleB:
    moduleB/b.dart: |
      class B {
        int foo = 42;
      }
    moduleB/.dart_tool/package_config.json: |
      {
        "configVersion": 2,
        "packages": [
          {
            "name": "moduleB",
            "rootUri": ".."
          }
        ]
      }
worlds:
  - entry: main.dart
    fromComponent: true
    sources:
      main.dart: |
        import "package:moduleA/a.dart";

        main() {
          A a = new A();
        }
      .dart_tool/package_config.json: |
        {
          "configVersion": 2,
          "packages": [
            {
              "name": "moduleA",
              "rootUri": "../moduleA"
            },
            {
              "name": "moduleB",
              "rootUri": "../moduleB"
            }
          ]
        }
    modules:
      - moduleA
      - moduleB
    expectedLibraryCount: 3
    neededDillLibraries:
      - package:moduleA/a.dart
      - package:moduleB/b.dart
    expectedContent:
      org-dartlang-test:///main.dart:
        - Procedure main
      package:moduleA/a.dart:
        - Class A
      package:moduleB/b.dart:
        - Class B
  - entry: main.dart
    worldType: updated
    expectInitializeFromDill: false
    # Nothing actually updated, as such everything is expected as before.
    modules:
      - moduleA
      - moduleB
    expectedLibraryCount: 3
    neededDillLibraries:
      - package:moduleA/a.dart
      - package:moduleB/b.dart
    expectedContent:
      org-dartlang-test:///main.dart:
        - Procedure main
      package:moduleA/a.dart:
        - Class A
      package:moduleB/b.dart:
        - Class B