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

# Check that we don't crash when doing an actual partial component
# (an actual delta).

type: newworld
incrementalSerialization: true
worlds:
  - entry: main.dart
    sources:
      main.dart: |
        // @dart=2.9
        import "package:package1/lib1.dart";
        import "package:package1/lib2.dart";
        import "package:package1/lib3.dart";
        main() {
          lib1();
          lib2();
          lib3();
        }
      package1/lib1.dart: |
        // @dart=2.9
        lib1() {
          return 42;
        }
      package1/lib2.dart: |
        // @dart=2.9
        lib2() {
          return 42;
        }
      package1/lib3.dart: |
        // @dart=2.9
        import "package:package1/lib1.dart";
        lib3() {
          return lib1();
        }
      .packages: |
        package1:package1
    expectedLibraryCount: 4
    incrementalSerializationDoesWork: true
  - entry: main.dart
    worldType: updated
    expectInitializeFromDill: false
    invalidate:
      - package:package1/lib3.dart
    sources:
      package1/lib3.dart: |
        // @dart=2.9
        import "package:package1/lib1.dart";
        lib3() {
          return lib3_1();
        }
        lib3_1() {
          return lib1();
        }
    expectedLibraryCount: 2
    # Asking for a partial component, i.e. it's not self-contained.
    noFullComponent: true