# 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 an export of getter, setter, method.

type: newworld
worlds:
  - entry: main.dart
    useExperimentalInvalidation: true
    sources:
      main.dart: |
        import "lib2.dart" show getter, setter, method, Bar;
        import "lib1.dart" show getter, setter, method, Bar;
        main() {
          Bar bar = new Bar();
          method();
          getter;
          setter = 42;
        }
      lib1.dart: |
        export "lib2.dart";
        class Foo {
          Foo() {

          }
        }
      lib2.dart: |
        String get getter => "hello";
        void set setter(int i) {}
        void method() {}
        class Bar {
          Bar() {

          }
        }
    expectedLibraryCount: 3
  - entry: main.dart
    useExperimentalInvalidation: true
    worldType: updated
    expectInitializeFromDill: false
    invalidate:
      - lib1.dart
    sources:
      lib1.dart: |
        export "lib2.dart";
        class Foo {
          Foo() {
            print("Foo!");
          }
        }
    expectedLibraryCount: 3
    expectsRebuildBodiesOnly: true
  - entry: main.dart
    useExperimentalInvalidation: true
    worldType: updated
    expectInitializeFromDill: false
    invalidate:
      - lib2.dart
    sources:
      lib2.dart: |
        String get getter => "hello";
        void set setter(int i) {}
        void method() {}
        class Bar {
          Bar() {
            print("hello!");
          }
        }
    expectedLibraryCount: 3
    expectsRebuildBodiesOnly: true
  - entry: main.dart
    useExperimentalInvalidation: true
    worldType: updated
    expectInitializeFromDill: false
    invalidate:
      - main.dart
    sources:
      main.dart: |
        import "lib2.dart" show getter, setter, method, Bar;
        import "lib1.dart" show getter, setter, method, Bar;
        main() {
          Bar bar = new Bar();
          method();
          getter;
          setter = 42;
          print("Done!");
        }
    expectedLibraryCount: 3
    expectsRebuildBodiesOnly: true
