# 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.
# Mixin something from the same file.

type: newworld
forceLateLoweringForTesting: true
worlds:
  - entry: main.dart
    experiments: alternative-invalidation-strategy
    sources:
      lib1.dart: |
        void set property(int value) {}
      lib2.dart: |
        int get property => 87;
      lib3.dart: |
        export 'lib1.dart';
        export 'lib2.dart';
      main.dart: |
        import 'lib3.dart';
        main() {
          property = 42;
        }
    expectedLibraryCount: 4
  - entry: main.dart
    experiments: alternative-invalidation-strategy
    worldType: updated
    expectInitializeFromDill: false
    invalidate:
      - main.dart
    sources:
      main.dart: |
        import 'lib3.dart';
        main() {
          property = 87;
        }
    expectedLibraryCount: 4
    expectsRebuildBodiesOnly: true
  - entry: main.dart
    experiments: alternative-invalidation-strategy
    worldType: updated
    expectInitializeFromDill: false
    invalidate:
      - lib1.dart
    sources:
      lib1.dart: |
        void set property(int value) {
          print(123);
        }
    expectedLibraryCount: 4
    expectsRebuildBodiesOnly: true
  - entry: main.dart
    experiments: alternative-invalidation-strategy
    worldType: updated
    expectInitializeFromDill: false
    invalidate:
      - main.dart
    sources:
      main.dart: |
        import 'lib3.dart';
        main() {
          property = property;
        }
    expectedLibraryCount: 4
    expectsRebuildBodiesOnly: true
