# 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
    useExperimentalInvalidation: true
    sources:
      main.dart: |
        import "lib1.dart";
        import "lib2.dart";
        import "lib3.dart";

        main() {
          Foo foo = new Bar();
          lib3Method(foo);
        }
      lib1.dart: |
        class Foo {
          void fooMethod() {
            // Not filled out.
          }
        }
      lib2.dart: |
        import "lib1.dart";
        class Bar extends Foo {
          void barMethod() {
            // Not filled out.
          }
        }
      lib3.dart: |
        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
    useExperimentalInvalidation: true
    worldType: updated
    expectInitializeFromDill: false
    invalidate:
      - lib1.dart
    sources:
      lib1.dart: |
        class Foo {
          void fooMethod() {
            print("fooMethod");
          }
        }
    expectedLibraryCount: 4
    expectsRebuildBodiesOnly: true
  - entry: main.dart
    useExperimentalInvalidation: true
    worldType: updated
    expectInitializeFromDill: false
    invalidate:
      - lib3.dart
    sources:
      lib3.dart: |
        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
