# 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 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
    advancedInvalidation: modulesToLoad

  - 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
    advancedInvalidation: modulesToLoad
