# Copyright (c) 2020, 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: DDC
trackWidgetCreation: true
worlds:
  - entry: main.dart
    sources:
      main.dart: |
        // @dart=2.8
        import 'foo.dart';
      foo.dart: |
        // @dart=2.8
        import 'package:flutter/src/widgets/framework.dart';
        import 'package:flutter/src/widgets/widget_inspector.dart';

        class Foo extends StatelessWidget {
          const Foo([Object key]) : super(key: key);
        }
      flutter/lib/src/widgets/framework.dart: |
        abstract class Bar {
          const Bar();
        }
        abstract class Widget extends Bar {
          final Object? key;

          const Widget({this.key});
        }
        abstract class StatelessWidget extends Widget {
          const StatelessWidget({Object? key}) : super(key: key);
        }
      flutter/lib/src/widgets/widget_inspector.dart: |
        abstract class _HasCreationLocation {
          _Location get _location;
        }
        /// A tuple with file, line, and column number, for displaying human-readable
        /// file locations.
        class _Location {
          const _Location({
            required this.file,
            required this.line,
            required this.column,
            required this.name,
            required this.parameterLocations,
          });
          /// File path of the location.
          final String file;
          /// 1-based line number.
          final int line;
          /// 1-based column number.
          final int column;
          /// Optional name of the parameter or function at this location.
          final String name;
          /// Optional locations of the parameters of the member at this location.
          final List<_Location> parameterLocations;
        }
      .dart_tool/package_config.json: |
        {
          "configVersion": 2,
          "packages": [
            {
              "name": "flutter",
              "rootUri": "../flutter",
              "packageUri": "lib/"
            }
          ]
        }
    expectedLibraryCount: 4
  - entry: main.dart
    worldType: updated
    invalidate:
      - main.dart
    expectInitializeFromDill: false
    sources:
      main.dart: |
        // @dart=2.8
        import 'foo.dart';
        Foo foo = const Foo();
    expectedLibraryCount: 4