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

# Initialize from component, where the component is linked to a sdk, and where
# the incremental compiler (could) load another sdk.
# Risk when doing this: Having two definitions of the same thing
# (e.g. the class 'String'), which could lead to errors such as
# "The argument type 'dart.core::String' can't be assigned to
# the parameter type 'dart.core::String'".

type: newworld
strong: true
omitPlatform: false
worlds:
  - entry: main.dart
    errors: false
    warnings: false
    sources:
      main.dart: |
        import "b.dart";

        main() {
          useString("hello");
        }
      b.dart: |
        import "dart:core";

        void useString(String s) {
          print("Hello from useString: $s");
        }
    expectedLibraryCount: 2
    expectsPlatform: true
  - entry: main.dart
    errors: false
    warnings: false
    expectInitializeFromDill: false
    fromComponent: true
    invalidate:
      - main.dart
    sources:
      main.dart: |
        import "b.dart";

        main() {
          useString("hello");
        }
      b.dart: |
        import "dart:core";

        void useString(String s) {
          print("Hello from useString: $s");
        }
    expectedLibraryCount: 2
    expectsPlatform: true