# 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.

# Regression test from flutter.

type: newworld
strong: true
worlds:
  - entry: main.dart
    sources:
      main.dart: |
        import 'lib.dart';

        class Test extends Test2 {
          Quux world() => null;
        }

        abstract class Test2 {
          Baz world();
        }
      lib.dart: |
        class FooEntry {}

        class BarEntry extends FooEntry {}

        abstract class FooTarget {
          void hello(FooEntry entry);
        }

        abstract class Baz implements FooTarget {
          void hello(covariant FooEntry entry) {}
        }

        mixin MyMixin on Baz {}

        abstract class Qux extends Baz {
          void hello(BarEntry entry) {}
        }

        class Quux extends Qux with MyMixin {}
    expectedLibraryCount: 2
  - entry: main.dart
    worldType: updated
    invalidate:
      - main.dart
    expectInitializeFromDill: false
    sources:
      main.dart: |
        import 'lib.dart';

        class Test extends Test2 {
          Quux world() => null;
        }

        abstract class Test2 {
          Baz world();
        }

        main() {
          print(new Test());
        }
    expectedLibraryCount: 2
