# Copyright (c) 2018, 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.

# Test that invalidating a part of a package works with both file and package
# URI.

type: newworld
worlds:
  - entry: "package:example/main.dart"
    sources:
      pkg/example/main.dart: |
        part "b.dart";
        main() {
          print("hello");
          b();
        }
      pkg/example/b.dart: |
        part of "main.dart";
        b() {
          print("b1");
        }
      .packages: example:pkg/example
    expectedLibraryCount: 1
  - entry: "package:example/main.dart"
    invalidate:
      - pkg/example/b.dart
    expectedInvalidatedUri:
      - "package:example/b.dart"
    sources:
      pkg/example/main.dart: |
        part "b.dart";
        main() {
          print("hello");
          b();
        }
      pkg/example/b.dart: |
        part of "main.dart";
        b() {
          print("b2");
        }
      .packages: example:pkg/example
    expectedLibraryCount: 1
  - entry: "package:example/main.dart"
    invalidate:
      - "package:example/b.dart"
    expectedInvalidatedUri:
      - "package:example/b.dart"
    sources:
      pkg/example/main.dart: |
        part "b.dart";
        main() {
          print("hello");
          b();
        }
      pkg/example/b.dart: |
        part of "main.dart";
        b() {
          print("b3");
        }
      .packages: example:pkg/example
    expectedLibraryCount: 1
