# 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 number of modules.
# Try out "trickery" in the module dependencies to force needing more or less
# dill libraries.

type: newworld
modules:
  moduleB:
    moduleB/b.dart: |
      // @dart=2.9
      import 'package:moduleC/c.dart';

      var bVar = 42;
      var bVarFromC = baz2;
      var mya2 = new A2();

      class A2 extends A3 {
        int bar = 42;
      }
    moduleB/.packages: |
      moduleB:.
      moduleC:../moduleC
      moduleD:../moduleD
  moduleC:
    moduleC/c.dart: |
      // @dart=2.9
      import 'package:moduleD/d.dart';

      String baz = "42";
      String baz2 = baz3;

      class A3 {
        int foo = 42;
      }
    moduleC/.packages: |
      moduleC:.
      moduleD:../moduleD
  moduleD:
    moduleD/d.dart: |
      // @dart=2.9
      String baz3 = "baz3";
    moduleD/.packages: |
      moduleD:.
worlds:
  - entry: a.dart
    fromComponent: true
    sources:
      a.dart: |
        // @dart=2.9
        import "package:moduleB/b.dart";

        var foo = bVar;
        var foo2 = bVarFromC;

        class A1 extends A2 {
          String fooMethod() => "42!";
        }
      .packages: |
        moduleB:moduleB
        moduleC:moduleC
        moduleD:moduleD
    modules:
      - moduleB
      - moduleC
      - moduleD
    expectedLibraryCount: 4
    neededDillLibraries:
      # A class in 'a.dart' has a super in 'c.dart'.
      - package:moduleB/b.dart
      - package:moduleC/c.dart
    expectedContent:
      org-dartlang-test:///a.dart:
        - Field foo
        - Field foo2
        - Class A1
      package:moduleB/b.dart:
        - Class A2
        - Field bVar
        - Field bVarFromC
        - Field mya2
      package:moduleC/c.dart:
        - Class A3
        - Field baz
        - Field baz2
      package:moduleD/d.dart:
        - Field baz3