| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 // Test that duplicate library names result in different messages depending | 5 // Test that duplicate library names result in different messages depending |
| 6 // on whether the libraries are based on the same resource. | 6 // on whether the libraries are based on the same resource. |
| 7 | 7 |
| 8 import 'dart:async'; | 8 import 'dart:async'; |
| 9 import 'package:async_helper/async_helper.dart'; | 9 import 'package:async_helper/async_helper.dart'; |
| 10 import 'package:expect/expect.dart'; | 10 import 'package:expect/expect.dart'; |
| 11 import 'package:compiler/src/commandline_options.dart'; | 11 import 'package:compiler/src/commandline_options.dart'; |
| 12 import 'package:compiler/src/diagnostics/messages.dart' show MessageKind; | 12 import 'package:compiler/src/diagnostics/messages.dart' show MessageKind; |
| 13 import 'memory_compiler.dart'; | 13 import 'memory_compiler.dart'; |
| 14 | 14 |
| 15 void check(String kind, | 15 void check(String kind, Iterable<CollectedMessage> messages, |
| 16 Iterable<CollectedMessage> messages, | 16 List<MessageKind> expectedMessageKinds) { |
| 17 List<MessageKind> expectedMessageKinds) { | |
| 18 Expect.equals(messages.length, expectedMessageKinds.length, | 17 Expect.equals(messages.length, expectedMessageKinds.length, |
| 19 "Unexpected $kind count: $messages"); | 18 "Unexpected $kind count: $messages"); |
| 20 int i = 0; | 19 int i = 0; |
| 21 messages.forEach((CollectedMessage message) { | 20 messages.forEach((CollectedMessage message) { |
| 22 Expect.equals(expectedMessageKinds[i++], message.messageKind); | 21 Expect.equals(expectedMessageKinds[i++], message.messageKind); |
| 23 }); | 22 }); |
| 24 } | 23 } |
| 25 | 24 |
| 26 Future test(Map<String, String> source, | 25 Future test(Map<String, String> source, |
| 27 {List<MessageKind> warnings: const <MessageKind>[], | 26 {List<MessageKind> warnings: const <MessageKind>[], |
| 28 List<MessageKind> hints: const <MessageKind>[]}) async { | 27 List<MessageKind> hints: const <MessageKind>[]}) async { |
| 29 DiagnosticCollector collector = new DiagnosticCollector(); | 28 DiagnosticCollector collector = new DiagnosticCollector(); |
| 30 await runCompiler( | 29 await runCompiler( |
| 31 memorySourceFiles: source, | 30 memorySourceFiles: source, |
| 32 diagnosticHandler: collector, | 31 diagnosticHandler: collector, |
| 33 showDiagnostics: true, | 32 showDiagnostics: true, |
| 34 options: [Flags.analyzeOnly, Flags.analyzeAll], | 33 options: [Flags.analyzeOnly, Flags.analyzeAll], |
| 35 packageRoot: Uri.parse('memory:pkg/')); | 34 packageRoot: Uri.parse('memory:pkg/')); |
| 36 | 35 |
| 37 Expect.isTrue(collector.errors.isEmpty); | 36 Expect.isTrue(collector.errors.isEmpty); |
| 38 check('warning', collector.warnings, warnings); | 37 check('warning', collector.warnings, warnings); |
| 39 check('hint', collector.hints, hints); | 38 check('hint', collector.hints, hints); |
| 40 Expect.isTrue(collector.infos.isEmpty); | 39 Expect.isTrue(collector.infos.isEmpty); |
| 41 } | 40 } |
| 42 | 41 |
| 43 void main() { | 42 void main() { |
| 44 asyncTest(runTests); | 43 asyncTest(runTests); |
| 45 } | 44 } |
| 46 | 45 |
| 47 Future runTests() async { | 46 Future runTests() async { |
| 48 await test({ | 47 await test({ |
| 49 'main.dart': """ | 48 'main.dart': """ |
| 50 library main; | 49 library main; |
| 51 | 50 |
| 52 import 'package:lib/foo.dart'; | 51 import 'package:lib/foo.dart'; |
| 53 import 'pkg/lib/foo.dart'; | 52 import 'pkg/lib/foo.dart'; |
| 54 """, | 53 """, |
| 55 'pkg/lib/foo.dart': """ | 54 'pkg/lib/foo.dart': """ |
| 56 library lib.foo; | 55 library lib.foo; |
| 57 """}, | 56 """ |
| 58 warnings: [MessageKind.DUPLICATED_LIBRARY_RESOURCE]); | 57 }, warnings: [ |
| 58 MessageKind.DUPLICATED_LIBRARY_RESOURCE |
| 59 ]); |
| 59 | 60 |
| 60 await test({ | 61 await test({ |
| 61 'main.dart': """ | 62 'main.dart': """ |
| 62 library main; | 63 library main; |
| 63 | 64 |
| 64 import 'package:lib/bar.dart'; | 65 import 'package:lib/bar.dart'; |
| 65 import 'pkg/foo.dart'; | 66 import 'pkg/foo.dart'; |
| 66 """, | 67 """, |
| 67 'pkg/foo.dart': """ | 68 'pkg/foo.dart': """ |
| 68 library foo; | 69 library foo; |
| 69 | 70 |
| 70 import 'lib/bar.dart'; | 71 import 'lib/bar.dart'; |
| 71 """, | 72 """, |
| 72 'pkg/lib/bar.dart': """ | 73 'pkg/lib/bar.dart': """ |
| 73 library lib.bar; | 74 library lib.bar; |
| 74 """}, | 75 """ |
| 75 warnings: [MessageKind.DUPLICATED_LIBRARY_RESOURCE]); | 76 }, warnings: [ |
| 77 MessageKind.DUPLICATED_LIBRARY_RESOURCE |
| 78 ]); |
| 76 | 79 |
| 77 await test({ | 80 await test({ |
| 78 'main.dart': """ | 81 'main.dart': """ |
| 79 library main; | 82 library main; |
| 80 | 83 |
| 81 import 'foo.dart'; | 84 import 'foo.dart'; |
| 82 import 'pkg/lib/baz.dart'; | 85 import 'pkg/lib/baz.dart'; |
| 83 """, | 86 """, |
| 84 'foo.dart': """ | 87 'foo.dart': """ |
| 85 library foo; | 88 library foo; |
| 86 | 89 |
| 87 import 'package:lib/baz.dart'; | 90 import 'package:lib/baz.dart'; |
| 88 """, | 91 """, |
| 89 'pkg/lib/baz.dart': """ | 92 'pkg/lib/baz.dart': """ |
| 90 library lib.baz; | 93 library lib.baz; |
| 91 """}, | 94 """ |
| 92 warnings: [MessageKind.DUPLICATED_LIBRARY_RESOURCE]); | 95 }, warnings: [ |
| 96 MessageKind.DUPLICATED_LIBRARY_RESOURCE |
| 97 ]); |
| 93 | 98 |
| 94 await test({ | 99 await test({ |
| 95 'main.dart': """ | 100 'main.dart': """ |
| 96 library main; | 101 library main; |
| 97 | 102 |
| 98 import 'foo.dart'; | 103 import 'foo.dart'; |
| 99 import 'pkg/bar.dart'; | 104 import 'pkg/bar.dart'; |
| 100 """, | 105 """, |
| 101 'foo.dart': """ | 106 'foo.dart': """ |
| 102 library foo; | 107 library foo; |
| 103 | 108 |
| 104 import 'package:lib/boz.dart'; | 109 import 'package:lib/boz.dart'; |
| 105 """, | 110 """, |
| 106 'pkg/bar.dart': """ | 111 'pkg/bar.dart': """ |
| 107 library bar; | 112 library bar; |
| 108 | 113 |
| 109 import 'lib/boz.dart'; | 114 import 'lib/boz.dart'; |
| 110 """, | 115 """, |
| 111 'pkg/lib/boz.dart': """ | 116 'pkg/lib/boz.dart': """ |
| 112 library lib.boz; | 117 library lib.boz; |
| 113 """}, | 118 """ |
| 114 warnings: [MessageKind.DUPLICATED_LIBRARY_RESOURCE]); | 119 }, warnings: [ |
| 120 MessageKind.DUPLICATED_LIBRARY_RESOURCE |
| 121 ]); |
| 115 | 122 |
| 116 await test({ | 123 await test({ |
| 117 'main.dart': """ | 124 'main.dart': """ |
| 118 library main; | 125 library main; |
| 119 | 126 |
| 120 import 'package:lib/qux.dart'; | 127 import 'package:lib/qux.dart'; |
| 121 import 'pkg/lib/qux.dart'; | 128 import 'pkg/lib/qux.dart'; |
| 122 """, | 129 """, |
| 123 'pkg/lib/qux.dart': """ | 130 'pkg/lib/qux.dart': """ |
| 124 // No library tag. | 131 // No library tag. |
| 125 """}, | 132 """ |
| 126 hints: [MessageKind.DUPLICATED_RESOURCE]); | 133 }, hints: [ |
| 134 MessageKind.DUPLICATED_RESOURCE |
| 135 ]); |
| 127 | 136 |
| 128 await test({ | 137 await test({ |
| 129 'main.dart': """ | 138 'main.dart': """ |
| 130 library main; | 139 library main; |
| 131 | 140 |
| 132 import 'foo.dart'; | 141 import 'foo.dart'; |
| 133 import 'bar.dart'; | 142 import 'bar.dart'; |
| 134 """, | 143 """, |
| 135 'foo.dart': """ | 144 'foo.dart': """ |
| 136 library lib; | 145 library lib; |
| 137 """, | 146 """, |
| 138 'bar.dart': """ | 147 'bar.dart': """ |
| 139 library lib; | 148 library lib; |
| 140 """}, | 149 """ |
| 141 warnings: [MessageKind.DUPLICATED_LIBRARY_NAME, | 150 }, warnings: [ |
| 142 MessageKind.DUPLICATED_LIBRARY_NAME]); | 151 MessageKind.DUPLICATED_LIBRARY_NAME, |
| 152 MessageKind.DUPLICATED_LIBRARY_NAME |
| 153 ]); |
| 143 } | 154 } |
| 144 | |
| OLD | NEW |