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

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

        class Foo {
          const Foo();
          @override
          toString() => 'Foo!';
        }

        main() async {
          await whatever();
          print(const Foo());
        }
      libA.dart: |
        whatever() async {
          await null;
          return "hello";
        }
    expectedLibraryCount: 2
  - entry: main.dart
    experiments: alternative-invalidation-strategy
    worldType: updated
    expectInitializeFromDill: false
    invalidate:
      - main.dart
    sources:
      main.dart: |
        import 'libA.dart';

        class Foo {
          const Foo();
          @override
          toString() => 'Foo!';
        }

        main() async {
          await whatever();
          print(const Foo());
          print("Done");
        }
    expectedLibraryCount: 2
    expectsRebuildBodiesOnly: true
