# 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
strong: true
worlds:
  - entry: main.dart
    sources:
      main.dart: |
        import 'lib.dart';
        main() {
          foo();
        }
      lib.dart: |
        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: |
        import 'lib.dart';
        import 'lib2.dart';
        import 'lib3.dart';
        main() {
          foo();
          print(fooField2);
        }
      lib2.dart: |
        import 'lib.dart';
        const fooField = const Foo(0);
      lib3.dart: |
        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: |
        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: |
        import 'lib.dart';
        const fooField = const Foo(0);
      lib3.dart: |
        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: |
        import 'lib.dart';
        const fooField = const Foo(1);
      lib3.dart: |
        import 'lib.dart';
        const fooField2 = const Foo(1);
    expectInitializeFromDill: false
    expectedLibraryCount: 4
