# 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: actualMain.dart
    sources:
      actualMain.dart: |
        import 'main.dart' as m;
        main() {
          m.main();
        }
      main.dart: |
        import 'libA.dart';

        main() {
          whatever();
        }
        mainHello() {}
      libA.dart: |
        import 'main.dart';
        import 'libB.dart';
        class Foo {}
        whatever() {
          Bar bar = new Bar(new Foo());
          mainHello();
        }
      libB.dart: |
        import 'libA.dart';
        class Bar {
          Foo foo;
          Bar(this.foo);
        }
    expectedLibraryCount: 4
  - entry: actualMain.dart
    worldType: updated
    expectInitializeFromDill: false
    invalidate:
      - main.dart
    sources:
      main.dart: |
        import 'libA.dart';

        main() {
          whatever();
          mainHello();
        }
        mainHello() {}
    expectedLibraryCount: 4
    advancedInvalidation: bodiesOnly
