| Index: sdk/lib/_internal/dartdoc/test/export_map_test.dart
|
| ===================================================================
|
| --- sdk/lib/_internal/dartdoc/test/export_map_test.dart (revision 32349)
|
| +++ sdk/lib/_internal/dartdoc/test/export_map_test.dart (working copy)
|
| @@ -1,467 +0,0 @@
|
| -// Copyright (c) 2013, 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:unittest/unittest.dart';
|
| -
|
| -import 'dart:async' show Future;
|
| -import 'dart:io' show Platform;
|
| -
|
| -import '../lib/src/export_map.dart';
|
| -import '../../../../../tests/compiler/dart2js/memory_source_file_helper.dart'
|
| - show MemorySourceFileProvider;
|
| -import '../../compiler/implementation/mirrors/source_mirrors.dart'
|
| - show MirrorSystem, LibraryMirror;
|
| -import '../../compiler/implementation/mirrors/analyze.dart'
|
| - as source_mirrors;
|
| -
|
| -Future<MirrorSystem> mirrorSystemFor(Map<String, String> memorySourceFiles) {
|
| - var provider = new MemorySourceFileProvider(memorySourceFiles);
|
| - handler(Uri uri, int begin, int end, String message, kind) {}
|
| -
|
| - var script = Uri.base.resolveUri(Platform.script);
|
| - var libraryRoot = script.resolve('../../../../');
|
| - // Read packages from 'memory:packages/'.
|
| - var packageRoot = Uri.parse('memory:packages/');
|
| -
|
| - var libraries = <Uri>[];
|
| - memorySourceFiles.forEach((String path, _) {
|
| - if (path.startsWith('packages/')) {
|
| - // Analyze files from 'packages/' as packages.
|
| - libraries.add(new Uri(scheme: 'package', path: path.substring(9)));
|
| - } else {
|
| - libraries.add(new Uri(scheme: 'memory', path: path));
|
| - }
|
| - });
|
| - libraries.add(new Uri(scheme: 'dart', path: 'async'));
|
| - return source_mirrors.analyze(
|
| - libraries, libraryRoot, packageRoot, provider, handler);
|
| -}
|
| -
|
| -Future<ExportMap> testExports(Map<String, String> sourceFiles) {
|
| - return mirrorSystemFor(sourceFiles).then((mirrors) {
|
| - libMirror = (uri) => mirrors.libraries[Uri.parse(uri)];
|
| - return new ExportMap(mirrors);
|
| - });
|
| -}
|
| -
|
| -Function libMirror;
|
| -
|
| -main() {
|
| - group('ExportMap', () {
|
| - test('with an empty library', () {
|
| - return testExports({'lib.dart': ''}).then((map) {
|
| - var lib = libMirror('memory:lib.dart');
|
| - var nonexistent = libMirror('memory:nonexistent.dart');
|
| -
|
| - var expectedExports = {};
|
| - expectedExports[lib] = [];
|
| - expect(map.exports, equals(expectedExports));
|
| - expect(map.transitiveExports(lib), isEmpty);
|
| - expect(map.transitiveExports(nonexistent), isEmpty);
|
| - });
|
| - });
|
| -
|
| - test('with one library with one export', () {
|
| - return testExports({
|
| - 'a.dart': 'export "b.dart";',
|
| - 'b.dart': ''
|
| - }).then((map) {
|
| - var a = libMirror('memory:a.dart');
|
| - var b = libMirror('memory:b.dart');
|
| -
|
| - expect(map.exports[a], unorderedEquals([
|
| - new Export(a, b)
|
| - ]));
|
| -
|
| - expect(map.transitiveExports(a), unorderedEquals([
|
| - new Export(a, b)
|
| - ]));
|
| -
|
| - expect(map.exports[b], isEmpty);
|
| -
|
| - expect(map.transitiveExports(b), isEmpty);
|
| - });
|
| - });
|
| -
|
| - test('with one library with multiple exports', () {
|
| - return testExports({
|
| - 'a.dart': 'export "b.dart";\nexport "c.dart";',
|
| - 'b.dart': '', 'c.dart': ''
|
| - }).then((map) {
|
| - var a = libMirror('memory:a.dart');
|
| - var b = libMirror('memory:b.dart');
|
| - var c = libMirror('memory:c.dart');
|
| -
|
| - expect(map.exports[a], unorderedEquals([
|
| - new Export(a, b),
|
| - new Export(a, c)
|
| - ]));
|
| -
|
| - expect(map.transitiveExports(a), unorderedEquals([
|
| - new Export(a, b),
|
| - new Export(a, c)
|
| - ]));
|
| -
|
| - expect(map.exports[b], isEmpty);
|
| - expect(map.transitiveExports(b), isEmpty);
|
| - expect(map.exports[c], isEmpty);
|
| - expect(map.transitiveExports(c), isEmpty);
|
| - });
|
| - });
|
| -
|
| - test('with two libraries each with one export', () {
|
| - return testExports({
|
| - 'a.dart': 'export "a_export.dart";',
|
| - 'b.dart': 'export "b_export.dart";',
|
| - 'a_export.dart': '',
|
| - 'b_export.dart': ''
|
| - }).then((map) {
|
| - var a = libMirror('memory:a.dart');
|
| - var b = libMirror('memory:b.dart');
|
| - var a_export = libMirror('memory:a_export.dart');
|
| - var b_export = libMirror('memory:b_export.dart');
|
| -
|
| - expect(map.exports[a], unorderedEquals([
|
| - new Export(a, a_export),
|
| - ]));
|
| - expect(map.transitiveExports(a), unorderedEquals([
|
| - new Export(a, a_export),
|
| - ]));
|
| -
|
| - expect(map.transitiveExports(b), unorderedEquals([
|
| - new Export(b, b_export),
|
| - ]));
|
| - expect(map.exports[b], unorderedEquals([
|
| - new Export(b, b_export)
|
| - ]));
|
| -
|
| - expect(map.exports[a_export], isEmpty);
|
| - expect(map.transitiveExports(a_export), isEmpty);
|
| - expect(map.exports[b_export], isEmpty);
|
| - expect(map.transitiveExports(b_export), isEmpty);
|
| - });
|
| - });
|
| -
|
| - test('with a transitive export', () {
|
| - return testExports({
|
| - 'a.dart': 'export "b.dart";',
|
| - 'b.dart': 'export "c.dart";',
|
| - 'c.dart': ''
|
| - }).then((map) {
|
| - var a = libMirror('memory:a.dart');
|
| - var b = libMirror('memory:b.dart');
|
| - var c = libMirror('memory:c.dart');
|
| -
|
| - expect(map.exports[a], unorderedEquals([
|
| - new Export(a, b),
|
| - ]));
|
| - expect(map.transitiveExports(a), unorderedEquals([
|
| - new Export(a, b),
|
| - new Export(a, c),
|
| - ]));
|
| -
|
| - expect(map.exports[b], unorderedEquals([
|
| - new Export(b, c),
|
| - ]));
|
| - expect(map.transitiveExports(b), unorderedEquals([
|
| - new Export(b, c),
|
| - ]));
|
| -
|
| - expect(map.exports[c], isEmpty);
|
| - expect(map.transitiveExports(c), isEmpty);
|
| - });
|
| - });
|
| -
|
| - test('with an export through an import', () {
|
| - return testExports({
|
| - 'a.dart': 'import "b.dart";',
|
| - 'b.dart': 'export "c.dart";',
|
| - 'c.dart': ''
|
| - }).then((map) {
|
| - var a = libMirror('memory:a.dart');
|
| - var b = libMirror('memory:b.dart');
|
| - var c = libMirror('memory:c.dart');
|
| -
|
| - expect(map.exports[b], unorderedEquals([
|
| - new Export(b, c),
|
| - ]));
|
| - expect(map.transitiveExports(b), unorderedEquals([
|
| - new Export(b, c),
|
| - ]));
|
| -
|
| - expect(map.exports[a], isEmpty);
|
| - expect(map.exports[c], isEmpty);
|
| - expect(map.transitiveExports(a), isEmpty);
|
| - expect(map.transitiveExports(c), isEmpty);
|
| - });
|
| - });
|
| -
|
| - test('with an export with a show combinator', () {
|
| - return testExports({
|
| - 'a.dart': 'export "b.dart" show x, y;',
|
| - 'b.dart': ''
|
| - }).then((map) {
|
| - var a = libMirror('memory:a.dart');
|
| - var b = libMirror('memory:b.dart');
|
| -
|
| - expect(map.exports[a], unorderedEquals([
|
| - new Export(a, b, show: ['x', 'y'])
|
| - ]));
|
| - });
|
| - });
|
| -
|
| - test('with an export with a hide combinator', () {
|
| - return testExports({
|
| - 'a.dart': 'export "b.dart" hide x, y;',
|
| - 'b.dart': ''
|
| - }).then((map) {
|
| - var a = libMirror('memory:a.dart');
|
| - var b = libMirror('memory:b.dart');
|
| -
|
| - expect(map.exports[a], unorderedEquals([
|
| - new Export(a, b, hide: ['x', 'y'])
|
| - ]));
|
| - });
|
| - });
|
| -
|
| - test('with an export with a show and a hide combinator', () {
|
| - return testExports({
|
| - 'a.dart': 'export "b.dart" show x, y hide y, z;',
|
| - 'b.dart': ''
|
| - }).then((map) {
|
| - var a = libMirror('memory:a.dart');
|
| - var b = libMirror('memory:b.dart');
|
| -
|
| - expect(map.exports[a], unorderedEquals([
|
| - new Export(a, b, show: ['x'])
|
| - ]));
|
| - });
|
| - });
|
| -
|
| - test('composes transitive exports', () {
|
| - return testExports({
|
| - 'a.dart': 'export "b.dart" hide x;',
|
| - 'b.dart': 'export "c.dart" hide y;',
|
| - 'c.dart': ''
|
| - }).then((map) {
|
| - var a = libMirror('memory:a.dart');
|
| - var b = libMirror('memory:b.dart');
|
| - var c = libMirror('memory:c.dart');
|
| -
|
| - expect(map.transitiveExports(a), unorderedEquals([
|
| - new Export(a, b, hide: ['x']),
|
| - new Export(a, c, hide: ['x', 'y'])
|
| - ]));
|
| - });
|
| - });
|
| -
|
| - test('merges adjacent exports', () {
|
| - return testExports({
|
| - 'a.dart': '''
|
| - export "b.dart" show x, y;
|
| - export "b.dart" hide y, z;
|
| - ''',
|
| - 'b.dart': ''
|
| - }).then((map) {
|
| - var a = libMirror('memory:a.dart');
|
| - var b = libMirror('memory:b.dart');
|
| -
|
| - expect(map.exports[a], unorderedEquals([
|
| - new Export(a, b, hide: ['z']),
|
| - ]));
|
| - expect(map.transitiveExports(a), unorderedEquals([
|
| - new Export(a, b, hide: ['z']),
|
| - ]));
|
| - });
|
| - });
|
| -
|
| - test('merges adjacent exports transitively', () {
|
| - return testExports({
|
| - 'a.dart': 'export "b.dart";\nexport "c.dart";',
|
| - 'b.dart': 'export "d.dart" show x, y;',
|
| - 'c.dart': 'export "d.dart" hide y, z;',
|
| - 'd.dart': ''
|
| - }).then((map) {
|
| - var a = libMirror('memory:a.dart');
|
| - var b = libMirror('memory:b.dart');
|
| - var c = libMirror('memory:c.dart');
|
| - var d = libMirror('memory:d.dart');
|
| -
|
| - expect(map.exports[a], unorderedEquals([
|
| - new Export(a, b),
|
| - new Export(a, c),
|
| - ]));
|
| - expect(map.transitiveExports(a), unorderedEquals([
|
| - new Export(a, b),
|
| - new Export(a, c),
|
| - new Export(a, d, hide: ['z']),
|
| - ]));
|
| - });
|
| - });
|
| -
|
| - test('resolves package: exports', () {
|
| - return testExports({
|
| - 'a.dart': 'export "package:b/b.dart";',
|
| - 'packages/b/b.dart': ''
|
| - }).then((map) {
|
| - var a = libMirror('memory:a.dart');
|
| - var b = libMirror('package:b/b.dart');
|
| - expect(map.exports[a], unorderedEquals([
|
| - new Export(a, b)
|
| - ]));
|
| - });
|
| - });
|
| -
|
| - test('ignores dart: exports', () {
|
| - return testExports({'a.dart': 'export "dart:async";'}).then((map) {
|
| - var a = libMirror('memory:a.dart');
|
| -
|
| - expect(map.exports[a], isEmpty);
|
| - });
|
| - });
|
| -
|
| - test('.parse() resolves package: imports', () {
|
| - return testExports({
|
| - 'packages/a/a.dart': 'export "package:b/b.dart";',
|
| - 'packages/b/b.dart': ''
|
| - }).then((map) {
|
| - var a = libMirror('package:a/a.dart');
|
| - var b = libMirror('package:b/b.dart');
|
| -
|
| - expect(map.exports[a], unorderedEquals([
|
| - new Export(a, b)
|
| - ]));
|
| - });
|
| - });
|
| -
|
| - test('.parse() ignores dart: imports', () {
|
| - return testExports({}).then((map) {
|
| - expect(map.exports, isEmpty);
|
| - });
|
| - });
|
| - });
|
| -
|
| - group('Export', () {
|
| - test('normalizes hide and show', () {
|
| - expect(new Export(null, null, show: ['x', 'y'], hide: ['y', 'z']),
|
| - equals(new Export(null, null, show: ['x'])));
|
| - });
|
| -
|
| - test("doesn't care about the order of show or hide", () {
|
| - expect(new Export(null, null, show: ['x', 'y']),
|
| - equals(new Export(null, null, show: ['y', 'x'])));
|
| - expect(new Export(null, null, hide: ['x', 'y']),
|
| - equals(new Export(null, null, hide: ['y', 'x'])));
|
| - });
|
| -
|
| - test('with no combinators considers anything visible', () {
|
| - var export = new Export(null, null);
|
| - expect(export.isMemberVisible('x'), isTrue);
|
| - expect(export.isMemberVisible('y'), isTrue);
|
| - expect(export.isMemberVisible('z'), isTrue);
|
| - });
|
| -
|
| - test('with hide combinators considers anything not hidden visible', () {
|
| - var export = new Export(null, null, hide: ['x', 'y']);
|
| - expect(export.isMemberVisible('x'), isFalse);
|
| - expect(export.isMemberVisible('y'), isFalse);
|
| - expect(export.isMemberVisible('z'), isTrue);
|
| - });
|
| -
|
| - test('with show combinators considers anything not shown invisible', () {
|
| - var export = new Export(null, null, show: ['x', 'y']);
|
| - expect(export.isMemberVisible('x'), isTrue);
|
| - expect(export.isMemberVisible('y'), isTrue);
|
| - expect(export.isMemberVisible('z'), isFalse);
|
| - });
|
| -
|
| - test('composing uses the parent exporter and child path', () {
|
| - return testExports({
|
| - 'exporter1.dart': '',
|
| - 'exporter2.dart': '',
|
| - 'path1.dart': '',
|
| - 'path2.dart': ''
|
| - }).then((map) {
|
| - var exporter1 = libMirror('memory:exporter1.dart');
|
| - var exporter2 = libMirror('memory:exporter2.dart');
|
| - var path1 = libMirror('memory:path1.dart');
|
| - var path2 = libMirror('memory:path2.dart');
|
| - expect(new Export(exporter1, path1)
|
| - .compose(new Export(exporter2, path2)),
|
| - equals(new Export(exporter1, path2)));
|
| - });
|
| - });
|
| -
|
| - test('composing show . show takes the intersection', () {
|
| - expect(new Export(null, null, show: ['x', 'y'])
|
| - .compose(new Export(null, null, show: ['y', 'z'])),
|
| - equals(new Export(null, null, show: ['y'])));
|
| - });
|
| -
|
| - test('composing show . hide takes the difference', () {
|
| - expect(new Export(null, null, show: ['x', 'y'])
|
| - .compose(new Export(null, null, hide: ['y', 'z'])),
|
| - equals(new Export(null, null, show: ['x'])));
|
| - });
|
| -
|
| - test('composing hide . show takes the reverse difference', () {
|
| - expect(new Export(null, null, hide: ['x', 'y'])
|
| - .compose(new Export(null, null, show: ['y', 'z'])),
|
| - equals(new Export(null, null, show: ['z'])));
|
| - });
|
| -
|
| - test('composing hide . hide takes the union', () {
|
| - expect(new Export(null, null, hide: ['x', 'y'])
|
| - .compose(new Export(null, null, hide: ['y', 'z'])),
|
| - equals(new Export(null, null, hide: ['x', 'y', 'z'])));
|
| - });
|
| -
|
| - test('merging requires identical exporters and paths', () {
|
| - return testExports({
|
| - 'exporter1.dart': '',
|
| - 'exporter2.dart': '',
|
| - 'path1.dart': '',
|
| - 'path2.dart': ''
|
| - }).then((map) {
|
| - var exporter1 = libMirror('memory:exporter1.dart');
|
| - var exporter2 = libMirror('memory:exporter2.dart');
|
| - var path1 = libMirror('memory:path1.dart');
|
| - var path2 = libMirror('memory:path2.dart');
|
| - expect(() => new Export(exporter1, null)
|
| - .merge(new Export(exporter2, null)),
|
| - throwsA(isArgumentError));
|
| - expect(() => new Export(null, path1)
|
| - .merge(new Export(null, path2)),
|
| - throwsA(isArgumentError));
|
| - expect(new Export(null, null)
|
| - .merge(new Export(null, null)),
|
| - equals(new Export(null, null)));
|
| - });
|
| - });
|
| -
|
| - test('merging show + show takes the union', () {
|
| - expect(new Export(null, null, show: ['x', 'y'])
|
| - .merge(new Export(null, null, show: ['y', 'z'])),
|
| - equals(new Export(null, null, show: ['x', 'y', 'z'])));
|
| - });
|
| -
|
| - test('merging show + hide takes the difference', () {
|
| - expect(new Export(null, null, show: ['x', 'y'])
|
| - .merge(new Export(null, null, hide: ['y', 'z'])),
|
| - equals(new Export(null, null, hide: ['z'])));
|
| - });
|
| -
|
| - test('merging hide + show takes the difference', () {
|
| - expect(new Export(null, null, hide: ['x', 'y'])
|
| - .merge(new Export(null, null, show: ['y', 'z'])),
|
| - equals(new Export(null, null, hide: ['x'])));
|
| - });
|
| -
|
| - test('merging hide + hide takes the intersection', () {
|
| - expect(new Export(null, null, hide: ['x', 'y'])
|
| - .merge(new Export(null, null, hide: ['y', 'z'])),
|
| - equals(new Export(null, null, hide: ['y'])));
|
| - });
|
| - });
|
| -}
|
|
|