# 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: |
      // @dart=2.9
      export 'package:moduleB/b.dart';

      class A { }
    moduleA/.packages: |
      moduleA:.
      moduleB:../moduleB
  moduleB:
    moduleB/b.dart: |
      // @dart=2.9
      class B {
        int foo = 42;
      }
    moduleB/.packages: |
      moduleB:.
worlds:
  - entry: main.dart
    fromComponent: true
    sources:
      main.dart: |
        // @dart=2.9
        import "package:moduleA/a.dart";

        main() {
          A a = new A();
        }
      .packages: |
        moduleA:moduleA
        moduleB: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