# 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
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() + "!!");
        }
      lib.dart: |
        lib() {
          return "hello";
        }
    expectedLibraryCount: 2
    expectsPlatform: true
    expectInitializeFromDill: true
