# 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: |
      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: |
      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: |
      String baz3 = "baz3";
    moduleD/.packages: |
      moduleD:.
worlds:
  - entry: a.dart
    fromComponent: true
    sources:
      a.dart: |
        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