# 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 an application with a const class with a initializer assert that would
# fail once evaluated. Everything should be fine as there is no usage.
# Add a two new files each with usage of it. An error should occur each place.
# Fix one and the error should still occur in the other.
# Fix the other but re-introduce the first and the error should still occur.
# Fix both and the error should go away.

type: newworld
worlds:
  - entry: main.dart
    sources:
      main.dart: |
        // @dart=2.9
        import 'lib.dart';
        main() {
          foo();
        }
      lib.dart: |
        // @dart=2.9
        class Foo {
          const Foo(int i) : assert(i > 0);
        }
        foo() {
          new Foo(0);
        }
    expectedLibraryCount: 2
    errors: false
  - entry: main.dart
    errors: true
    worldType: updated
    invalidate:
      - main.dart
    sources:
      main.dart: |
        // @dart=2.9
        import 'lib.dart';
        import 'lib2.dart';
        import 'lib3.dart';
        main() {
          foo();
          print(fooField2);
        }
      lib2.dart: |
        // @dart=2.9
        import 'lib.dart';
        const fooField = const Foo(0);
      lib3.dart: |
        // @dart=2.9
        import 'lib.dart';
        const fooField2 = const Foo(0);
    expectInitializeFromDill: false
    expectedLibraryCount: 4
  - entry: main.dart
    errors: true
    worldType: updated
    invalidate:
      - lib2.dart
    sources:
      lib2.dart: |
        // @dart=2.9
        import 'lib.dart';
        const fooField = const Foo(1);
    expectInitializeFromDill: false
    expectedLibraryCount: 4
  - entry: main.dart
    errors: true
    worldType: updated
    invalidate:
      - lib2.dart
      - lib3.dart
    sources:
      lib2.dart: |
        // @dart=2.9
        import 'lib.dart';
        const fooField = const Foo(0);
      lib3.dart: |
        // @dart=2.9
        import 'lib.dart';
        const fooField2 = const Foo(1);
    expectInitializeFromDill: false
    expectedLibraryCount: 4
  - entry: main.dart
    errors: false
    worldType: updated
    invalidate:
      - lib2.dart
      - lib3.dart
    sources:
      lib2.dart: |
        // @dart=2.9
        import 'lib.dart';
        const fooField = const Foo(1);
      lib3.dart: |
        // @dart=2.9
        import 'lib.dart';
        const fooField2 = const Foo(1);
    expectInitializeFromDill: false
    expectedLibraryCount: 4
