# 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.

# Change entry point between deltas, provoking the read of the new entry
# point before the read of the previous entry point. This triggers the crash
# in https://github.com/flutter/flutter/issues/95014

type: newworld
worlds:
  - entry: first.dart
    experiments: alternative-invalidation-strategy
    sources:
      first.dart: |
        import 'second.dart';

        main() {
          method1();
          method2();
        }
        method1() {}
      second.dart: |
        import 'first.dart';

        main() {
          method1();
          method2();
        }
        method2() {}
    expectedLibraryCount: 2
  - entry: second.dart
    experiments: alternative-invalidation-strategy
    worldType: updated
    expectInitializeFromDill: false
    invalidate:
      [second.dart, first.dart]
    sources:
      first.dart: |
        import 'second.dart';

        main() {
          method1();
          method2();
        }
        method1() {
          print('method1');
        }
      second.dart: |
        import 'first.dart';

        main() {
          method1();
          method2();
        }
        method2() {
          print('method2');
        }
    expectedLibraryCount: 2
    expectsRebuildBodiesOnly: true
