# 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
    useExperimentalInvalidation: true
    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
    useExperimentalInvalidation: true
    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
