# 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.
# Try to mess up the hierarchy.

type: newworld
worlds:
  - entry: main.dart
    experiments: alternative-invalidation-strategy
    sources:
      main.dart: |
        // @dart=2.9
        import "lib1.dart";
        import "lib2.dart";
        import "lib3.dart";

        main() {
          Foo foo = new Bar();
          lib3Method(foo);
        }
      lib1.dart: |
        // @dart=2.9
        class Foo {
          void fooMethod() {
            // Not filled out.
          }
        }
      lib2.dart: |
        // @dart=2.9
        import "lib1.dart";
        class Bar extends Foo {
          void barMethod() {
            // Not filled out.
          }
        }
      lib3.dart: |
       // @dart=2.9
        import "lib1.dart";
        import "lib2.dart";
        void lib3Method(Foo foo) {
          Foo bar = new Bar();
          bool equal = foo == bar;
          print("foo == bar = $equal");
        }
    expectedLibraryCount: 4
  - entry: main.dart
    experiments: alternative-invalidation-strategy
    worldType: updated
    expectInitializeFromDill: false
    invalidate:
      - lib1.dart
    sources:
      lib1.dart: |
        // @dart=2.9
        class Foo {
          void fooMethod() {
            print("fooMethod");
          }
        }
    expectedLibraryCount: 4
    expectsRebuildBodiesOnly: true
  - entry: main.dart
    experiments: alternative-invalidation-strategy
    worldType: updated
    expectInitializeFromDill: false
    invalidate:
      - lib3.dart
    sources:
      lib3.dart: |
        // @dart=2.9
        import "lib1.dart";
        import "lib2.dart";
        void lib3Method(Foo foo) {
          Foo bar = new Bar();
          bool equal = foo == bar;
          print("foo == bar = $equal");
          print("Done!");
        }
    expectedLibraryCount: 4
    expectsRebuildBodiesOnly: true
