# 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 another const class that references it. Error.
# Fixing that should fix everything.

type: newworld
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';
        main() {
          foo();
          bar();
        }
      lib2.dart: |
        import 'lib.dart';
        class Bar {
          final Foo x;
          const Bar() : x = const Foo(0);
        }
        bar() {}
    expectInitializeFromDill: false
    expectedLibraryCount: 3
  - entry: main.dart
    errors: false
    worldType: updated
    invalidate:
      - lib2.dart
    sources:
      lib2.dart: |
        import 'lib.dart';
        class Bar {
          final Foo x;
          const Bar() : x = const Foo(1);
        }
        bar() {}
    expectInitializeFromDill: false
    expectedLibraryCount: 3
