# 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 asking to compile two files that doesn't import each other actually
# results in getting both libraries (aka that multiple entry points work).

type: newworld
worlds:
  - entry:
      - a.dart
      - b.dart
    sources:
      a.dart: |
        a() {
          print("hello a");
        }
      b.dart: |
        b() {
          print("hello b");
        }
      c.dart: |
        b() {
          print("hello c (I'm not included!)");
        }
    expectedLibraryCount: 2
