# 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 a hello world program, check that omit platform works as expected.
# Check that we can compile again, that changes work, than we can ask for a full
# component again etc.

type: newworld
strong: true
omitPlatform: false
worlds:
  - entry: main.dart
    sources:
      main.dart: |
        main() {
          print("Hello world");
        }
    expectedLibraryCount: 1
    expectsPlatform: true
    expectInitializeFromDill: false
  - entry: main.dart
    noFullComponent: true
    worldType: updated
    invalidate:
      - main.dart
    sources:
      main.dart: |
        import "lib.dart";
        main() {
          print(lib());
        }
      lib.dart: |
        lib() {
          return "hello";
        }
    expectedLibraryCount: 2
    expectsPlatform: false
    expectInitializeFromDill: false
  - entry: main.dart
    noFullComponent: true
    worldType: updated
    invalidate:
      - main.dart
    sources:
      main.dart: |
        import "lib.dart";
        main() {
          print(lib() + "!");
        }
    expectedLibraryCount: 1
    expectsPlatform: false
    expectInitializeFromDill: false
  - entry: main.dart
    noFullComponent: false
    worldType: updated
    invalidate:
      - main.dart
    sources:
      main.dart: |
        import "lib.dart";
        main() {
          print(lib());
        }
    expectedLibraryCount: 2
    expectsPlatform: true
    expectInitializeFromDill: false
  - entry: main.dart
    noFullComponent: false
    invalidate:
      - main.dart
    sources:
      main.dart: |
        import "lib.dart";
        main() {
          print(lib() + "!!");
        }
    expectedLibraryCount: 2
    expectsPlatform: true
    expectInitializeFromDill: true
