# 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:
  module:
    module/lib1.dart: |
      import 'lib2.dart';

      abstract class XSet {
        factory XSet.identity() = XLinkedHashSet.identity;
      }
    module/lib2.dart: |
      import 'lib1.dart';
      import 'lib3.dart';

      class XLinkedHashSet implements XSet {
        factory XLinkedHashSet.identity() = XIdentityHashSet;
      }
    module/lib3.dart: |
      import 'lib2.dart';

      class XIdentityHashSet implements XLinkedHashSet {
        XIdentityHashSet();
      }
    module/.packages: |
      module:.
worlds:
  - entry: compileme.dart
    fromComponent: true
    sources:
      compileme.dart: |
        import 'package:module/lib1.dart';

        main() {
          XSet history = new XSet.identity();
        }
      .packages: |
        module:module
    modules:
      - module
    expectedLibraryCount: 4
    neededDillLibraries:
      - package:module/lib1.dart
      - package:module/lib2.dart
      - package:module/lib3.dart
    expectedContent:
      org-dartlang-test:///compileme.dart:
        - Procedure main
      package:module/lib1.dart:
        - Class XSet
      package:module/lib2.dart:
        - Class XLinkedHashSet
      package:module/lib3.dart:
        - Class XIdentityHashSet
