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

# This previously caused different serialized bytes because of a bug in
# "constantCoverageConstructors" on sources (where C would be marked in lib
# both before and after the reload).

type: newworld
worlds:
  - entry: main.dart
    sources:
      main.dart: |
        // @dart=2.9
        import "lib.dart";

        main() {
          const c = const C();
          print(c);
        }
      lib.dart: |
        // @dart=2.9
        class A {
          const A();
        }

        class B implements A {
          const B();
        }

        class C extends B {
          const C([A a = const A()]) : super();
        }

    expectedLibraryCount: 2
  - entry: main.dart
    compareWithFromScratch: true
    worldType: updated
    expectInitializeFromDill: false
    invalidate:
      - main.dart
    sources:
      main.dart: |
        // @dart=2.9
        import 'lib.dart';
    expectedLibraryCount: 2
