# Copyright (c) 2021, 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
target: dartdevc
worlds:
  - entry: main.dart
    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) {
          var f = Bar.new;
          Foo bar = f();
          bool equal = foo == bar;
          print("foo == bar = $equal");
        }
    expectedLibraryCount: 4
  - entry: main.dart
    worldType: updated
    expectInitializeFromDill: false
    invalidate:
      - lib1.dart
    sources:
      lib1.dart: |
        class Foo {
          void fooMethod() {
            print("fooMethod");
          }
        }
    expectedLibraryCount: 4
    advancedInvalidation: bodiesOnly
  - entry: main.dart
    worldType: updated
    expectInitializeFromDill: false
    invalidate:
      - lib3.dart
    sources:
      lib3.dart: |
        import "lib1.dart";
        import "lib2.dart";
        void lib3Method(Foo foo) {
          var f = Bar.new;
          Foo bar = f();
          bool equal = foo == bar;
          print("foo == bar = $equal");
          print("Done!");
        }
    expectedLibraryCount: 4
    advancedInvalidation: bodiesOnly
