# 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, change a file, but don't change the outline.
# Have an export.

type: newworld
worlds:
  - entry: main.dart
    experiments: alternative-invalidation-strategy
    sources:
      main.dart: |
        // @dart=2.9
        import "lib2.dart" show Bar;
        import "lib1.dart" show Bar;
        main() {
          Bar bar = new Bar();
        }
      lib1.dart: |
        // @dart=2.9
        export "lib2.dart";
        class Foo {
          Foo() {

          }
        }
      lib2.dart: |
        // @dart=2.9
        class Bar {
          Bar() {

          }
        }
    expectedLibraryCount: 3
  - entry: main.dart
    experiments: alternative-invalidation-strategy
    worldType: updated
    expectInitializeFromDill: false
    invalidate:
      - lib1.dart
    sources:
      lib1.dart: |
        // @dart=2.9
        export "lib2.dart";
        class Foo {
          Foo() {
            print("Foo!");
          }
        }
    expectedLibraryCount: 3
    expectsRebuildBodiesOnly: true
  - entry: main.dart
    experiments: alternative-invalidation-strategy
    worldType: updated
    expectInitializeFromDill: false
    invalidate:
      - lib2.dart
    sources:
      lib2.dart: |
        // @dart=2.9
        class Bar {
          Bar() {
            print("Bar!");
          }
        }
    expectedLibraryCount: 3
    expectsRebuildBodiesOnly: true
  - entry: main.dart
    experiments: alternative-invalidation-strategy
    worldType: updated
    expectInitializeFromDill: false
    invalidate:
      - main.dart
    sources:
      main.dart: |
        // @dart=2.9
        import "lib2.dart" show Bar;
        import "lib1.dart" show Bar;
        main() {
          Bar bar = new Bar();
          print(bar);
        }
    expectedLibraryCount: 3
    expectsRebuildBodiesOnly: true
