# 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 incremental serialization when loading from dill.
# Update a package location and keep another one stable.
# (At least currently) we don't initialize from dill when a package has changed
# location, so we shouldn't use that for the incremental serializer either.

type: newworld
incrementalSerialization: true
worlds:
  - entry: main.dart
    sources:
      main.dart: |
        import "package:package1/p1.dart";
        import "package:package2/p2.dart";
        main() {
          p1();
          p2();
        }
      package1/p1.dart:
        p1() {
          print("Package 1");
          p1_v1_Only();
        }
        p1_v1_Only() {
          print("Package 1 v1 only!");
        }
      package1v2/p1.dart:
        p1() {
          print("Package 1 v2");
          p1_v2_Only();
        }
        p1_v2_Only() {
          print("Package 1 v2 only!");
        }
      package2/p2.dart:
        import "package:package1/p1.dart";
        p2() {
          p1();
          print("Package 2");
        }
      .packages: |
        package1:package1
        package2:package2
    expectedLibraryCount: 3
    incrementalSerializationDoesWork: true
  - entry: main.dart
    expectInitializeFromDill: false # .packages changed
    sources:
      main.dart: |
        import "package:package1/p1.dart";
        import "package:package2/p2.dart";
        main() {
          p1();
          p2();
        }
      package1/p1.dart:
        p1() {
          print("Package 1");
          p1_v1_Only();
        }
        p1_v1_Only() {
          print("Package 1 v1 only!");
        }
      package1v2/p1.dart:
        p1() {
          print("Package 1 v2");
          p1_v2_Only();
        }
        p1_v2_Only() {
          print("Package 1 v2 only!");
        }
      package2/p2.dart:
        import "package:package1/p1.dart";
        p2() {
          p1();
          print("Package 2");
        }
      .packages: |
        package1:package1v2
        package2:package2
    expectedLibraryCount: 3
    incrementalSerializationDoesWork: true
