# 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.
# Compile again with changing modules.

type: newworld
strong: true
modules:
  foo:
    foo/foo.dart: |
      var foo = true;
    foo/.packages: |
      foo:.
  foo2:
    foo2/foo.dart: |
      var foo2 = true;
    foo2/.packages: |
      foo:.
worlds:
  - entry: main.dart
    fromComponent: true
    simulateTransformer: true
    sources:
      main.dart: |
        import "package:foo/foo.dart";
        main() {
          print(foo);
        }
      .packages: |
        foo:foo
    modules:
      - foo
    expectedLibraryCount: 2
    expectedContent:
      org-dartlang-test:///main.dart:
        - Procedure main
        - Field lalala_SimulateTransformer
      package:foo/foo.dart:
        - Field foo
        - Field lalala_SimulateTransformer
  - entry: main.dart
    worldType: updated
    expectInitializeFromDill: false
    simulateTransformer: true
    sources:
      main.dart: |
        import "package:foo/foo.dart";
        main() {
          print(foo2);
        }
      .packages: |
        foo:foo2
    modules:
      - foo2
    expectedLibraryCount: 2
    expectedContent:
      org-dartlang-test:///main.dart:
        - Procedure main
        - Field lalala_SimulateTransformer
      package:foo/foo.dart:
        - Field foo2
        - Field lalala_SimulateTransformer
