blob: 302dd316c64a601978ebfa8a75264ccef10036d2 [file] [log] [blame]
// Copyright (c) 2012, 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 file.
import 'package:expect/expect.dart';
import 'package:async_helper/async_helper.dart';
import 'package:compiler/src/mirrors/source_mirrors.dart';
import 'memory_compiler.dart';
const SOURCE_FILES = const {
'main.dart': '''
import 'a.dart' show A1, A2;
import 'b.dart' as b hide B1;
export 'a.dart' show A2 hide A3, A1;
export 'b.dart' hide B1, B2 show B3;
import 'dart:core' as core;
import 'c.dart' deferred as c;
main() {}
''',
'a.dart': '''
class A1 {}
class A2 {}
class A3 {}
''',
'b.dart': '''
class B1 {}
class B2 {}
class B3 {}
''',
'c.dart': '''
foo() => 499;
'''
};
void main() {
asyncTest(() => mirrorSystemFor(SOURCE_FILES).then((MirrorSystem mirrors) {
LibrarySourceMirror mainLibrary =
mirrors.libraries[Uri.parse('memory:main.dart')];
Expect.isNotNull(mainLibrary);
LibrarySourceMirror aLibrary =
mirrors.libraries[Uri.parse('memory:a.dart')];
Expect.isNotNull(aLibrary);
LibrarySourceMirror bLibrary =
mirrors.libraries[Uri.parse('memory:b.dart')];
Expect.isNotNull(bLibrary);
LibrarySourceMirror cLibrary =
mirrors.libraries[Uri.parse('memory:c.dart')];
Expect.isNotNull(cLibrary);
LibrarySourceMirror coreLibrary =
mirrors.libraries[Uri.parse('dart:core')];
Expect.isNotNull(coreLibrary);
var dependencies = mainLibrary.libraryDependencies;
Expect.isNotNull(dependencies);
Expect.equals(6, dependencies.length);
// import 'a.dart' show A1, A2;
var dependency = dependencies[0];
Expect.isNotNull(dependency);
Expect.isTrue(dependency.isImport);
Expect.isFalse(dependency.isExport);
Expect.equals(mainLibrary, dependency.sourceLibrary);
Expect.equals(aLibrary, dependency.targetLibrary);
Expect.isNull(dependency.prefix);
Expect.isFalse(dependency.isDeferred);
var combinators = dependency.combinators;
Expect.isNotNull(combinators);
Expect.equals(1, combinators.length);
var combinator = combinators[0];
Expect.isNotNull(combinator);
Expect.isTrue(combinator.isShow);
Expect.isFalse(combinator.isHide);
Expect.listEquals(['A1', 'A2'], combinator.identifiers);
// import 'b.dart' as b hide B1;
dependency = dependencies[1];
Expect.isNotNull(dependency);
Expect.isTrue(dependency.isImport);
Expect.isFalse(dependency.isExport);
Expect.equals(mainLibrary, dependency.sourceLibrary);
Expect.equals(bLibrary, dependency.targetLibrary);
Expect.equals('b', dependency.prefix);
Expect.isFalse(dependency.isDeferred);
combinators = dependency.combinators;
Expect.isNotNull(combinators);
Expect.equals(1, combinators.length);
combinator = combinators[0];
Expect.isNotNull(combinator);
Expect.isFalse(combinator.isShow);
Expect.isTrue(combinator.isHide);
Expect.listEquals(['B1'], combinator.identifiers);
// export 'a.dart' show A2 hide A3, A1;
dependency = dependencies[2];
Expect.isNotNull(dependency);
Expect.isFalse(dependency.isImport);
Expect.isTrue(dependency.isExport);
Expect.equals(mainLibrary, dependency.sourceLibrary);
Expect.equals(aLibrary, dependency.targetLibrary);
Expect.isNull(dependency.prefix);
Expect.isFalse(dependency.isDeferred);
combinators = dependency.combinators;
Expect.isNotNull(combinators);
Expect.equals(2, combinators.length);
combinator = combinators[0];
Expect.isNotNull(combinator);
Expect.isTrue(combinator.isShow);
Expect.isFalse(combinator.isHide);
Expect.listEquals(['A2'], combinator.identifiers);
combinator = combinators[1];
Expect.isNotNull(combinator);
Expect.isFalse(combinator.isShow);
Expect.isTrue(combinator.isHide);
Expect.listEquals(['A3', 'A1'], combinator.identifiers);
// export 'b.dart' hide B1, B2 show B3;
dependency = dependencies[3];
Expect.isNotNull(dependency);
Expect.isFalse(dependency.isImport);
Expect.isTrue(dependency.isExport);
Expect.equals(mainLibrary, dependency.sourceLibrary);
Expect.equals(bLibrary, dependency.targetLibrary);
Expect.isNull(dependency.prefix);
Expect.isFalse(dependency.isDeferred);
combinators = dependency.combinators;
Expect.isNotNull(combinators);
Expect.equals(2, combinators.length);
combinator = combinators[0];
Expect.isNotNull(combinator);
Expect.isFalse(combinator.isShow);
Expect.isTrue(combinator.isHide);
Expect.listEquals(['B1', 'B2'], combinator.identifiers);
combinator = combinators[1];
Expect.isNotNull(combinator);
Expect.isTrue(combinator.isShow);
Expect.isFalse(combinator.isHide);
Expect.listEquals(['B3'], combinator.identifiers);
// import 'dart:core' as core;
dependency = dependencies[4];
Expect.isNotNull(dependency);
Expect.isTrue(dependency.isImport);
Expect.isFalse(dependency.isExport);
Expect.equals(mainLibrary, dependency.sourceLibrary);
Expect.equals(coreLibrary, dependency.targetLibrary);
Expect.equals('core', dependency.prefix);
Expect.isFalse(dependency.isDeferred);
combinators = dependency.combinators;
Expect.isNotNull(combinators);
Expect.equals(0, combinators.length);
// import 'c.dart' deferred as c;
dependency = dependencies[5];
Expect.isNotNull(dependency);
Expect.isTrue(dependency.isImport);
Expect.isFalse(dependency.isExport);
Expect.equals(mainLibrary, dependency.sourceLibrary);
Expect.equals(cLibrary, dependency.targetLibrary);
Expect.equals('c', dependency.prefix);
Expect.isTrue(dependency.isDeferred);
combinators = dependency.combinators;
Expect.isNotNull(combinators);
Expect.equals(0, combinators.length);
}));
}