# 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: |
        import "lib2.dart" show Bar;
        import "lib1.dart" show Bar;
        main() {
          Bar bar = new Bar();
        }
      lib1.dart: |
        export "lib2.dart";
        class Foo {
          Foo() {

          }
        }
      lib2.dart: |
        class Bar {
          Bar() {

          }
        }
    expectedLibraryCount: 3
  - entry: main.dart
    experiments: alternative-invalidation-strategy
    worldType: updated
    expectInitializeFromDill: false
    invalidate:
      - lib1.dart
    sources:
      lib1.dart: |
        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: |
        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: |
        import "lib2.dart" show Bar;
        import "lib1.dart" show Bar;
        main() {
          Bar bar = new Bar();
          print(bar);
        }
    expectedLibraryCount: 3
    expectsRebuildBodiesOnly: true
