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

type: newworld
target: VM
worlds:
  - entry: main.dart
    sources:
      .dart_tool/package_config.json: |
        {
          "configVersion": 2,
          "packages": [
            {
              "name": "flutter",
              "rootUri": "../flutter",
              "languageVersion": "2.12"
            }
          ]
        }
      main.dart: |
        // @dart=2.9
        import 'package:flutter/object.dart';
        import 'lib1.dart';

        class AdaptorElement extends RenderObject {
          Adaptor get renderObject => super.renderObject;
          void foo() {
            print(renderObject.constraints.axis);
          }
        }
      lib1.dart: |
        // @dart=2.9
        import 'package:flutter/object.dart';
        import 'lib2.dart';
        abstract class Adaptor extends RenderFoo with LibMixin {}
      lib2.dart: |
        // @dart=2.9
        import 'package:flutter/object.dart';
        mixin LibMixin on RenderObject {}
      flutter/object.dart: |
        class RenderFoo extends RenderObject {
          FooConstraints get constraints => super.constraints as FooConstraints;
        }
        class FooConstraints extends Constraints {
          String get axis => "hello";
        }
        class Constraints {}
        class RenderObject {
          Constraints get constraints => new Constraints();
          RenderObject get renderObject => this;
        }
    expectedLibraryCount: 4

  - entry: main.dart
    errors: false
    worldType: updated
    expectInitializeFromDill: false
    invalidate:
      - main.dart
    expectedLibraryCount: 4

