# 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 a redirecting factory constructor.

type: newworld
worlds:
  - entry: main.dart
    experiments: alternative-invalidation-strategy
    sources:
      main.dart: |
        import "lib1.dart";
        main() {
          libMethod();
        }
      lib1.dart: |
        import "lib2.dart";
        class Foo {
          factory Foo() = Bar;
        }
        void libMethod() {
          Foo foo = new Foo();
          Bar bar = new Bar();
        }
      lib2.dart: |
        import "lib1.dart";
        class Bar implements Foo {
          Bar();
        }
    expectedLibraryCount: 3
  - entry: main.dart
    experiments: alternative-invalidation-strategy
    worldType: updated
    expectInitializeFromDill: false
    invalidate:
      - lib1.dart
    sources:
      lib1.dart: |
        import "lib2.dart";
        class Foo {
          factory Foo() = Bar;
        }
        void libMethod() {
          Foo foo = new Foo();
          Bar bar = new Bar();
          print(foo == bar);
        }
    expectedLibraryCount: 3
    expectsRebuildBodiesOnly: true
