| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 import 'package:async_helper/async_helper.dart'; | 5 import 'package:async_helper/async_helper.dart'; |
| 6 import 'package:compiler/src/commandline_options.dart'; | 6 import 'package:compiler/src/commandline_options.dart'; |
| 7 import 'package:compiler/src/diagnostics/messages.dart'; | 7 import 'package:compiler/src/diagnostics/messages.dart'; |
| 8 import 'package:compiler/src/io/source_file.dart'; | 8 import 'package:compiler/src/io/source_file.dart'; |
| 9 import 'package:expect/expect.dart'; | 9 import 'package:expect/expect.dart'; |
| 10 import 'memory_compiler.dart'; | 10 import 'memory_compiler.dart'; |
| 11 import 'memory_source_file_helper.dart'; | 11 import 'memory_source_file_helper.dart'; |
| 12 | 12 |
| 13 const List<Test> TESTS = const <Test>[ | 13 const List<Test> TESTS = const <Test>[ |
| 14 const Test(''' | 14 const Test( |
| 15 ''' |
| 15 class A { A(b); } | 16 class A { A(b); } |
| 16 class B extends A { | 17 class B extends A { |
| 17 a() {} | 18 a() {} |
| 18 | 19 |
| 19 lot() {} | 20 lot() {} |
| 20 | 21 |
| 21 of() {} | 22 of() {} |
| 22 | 23 |
| 23 var members; | 24 var members; |
| 24 } | 25 } |
| 25 main() => new B();''', | 26 main() => new B();''', |
| 26 const { | 27 const { |
| 27 MessageKind.NO_MATCHING_CONSTRUCTOR_FOR_IMPLICIT: ''' | 28 MessageKind.NO_MATCHING_CONSTRUCTOR_FOR_IMPLICIT: ''' |
| 28 class B extends A { | 29 class B extends A { |
| 29 ^^^^^^^^^^^^^^^^^'''}), | 30 ^^^^^^^^^^^^^^^^^''' |
| 30 | 31 }), |
| 31 const Test(''' | 32 const Test( |
| 33 ''' |
| 32 class I {} | 34 class I {} |
| 33 class A { A(b); } | 35 class A { A(b); } |
| 34 class B extends A implements I { | 36 class B extends A implements I { |
| 35 a() {} | 37 a() {} |
| 36 | 38 |
| 37 lot() {} | 39 lot() {} |
| 38 | 40 |
| 39 of() {} | 41 of() {} |
| 40 | 42 |
| 41 var members; | 43 var members; |
| 42 } | 44 } |
| 43 main() => new B();''', | 45 main() => new B();''', |
| 44 const { | 46 const { |
| 45 MessageKind.NO_MATCHING_CONSTRUCTOR_FOR_IMPLICIT: ''' | 47 MessageKind.NO_MATCHING_CONSTRUCTOR_FOR_IMPLICIT: ''' |
| 46 class B extends A implements I { | 48 class B extends A implements I { |
| 47 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^'''}), | 49 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^''' |
| 48 | 50 }), |
| 49 const Test(''' | 51 const Test( |
| 52 ''' |
| 50 class M<T> {} | 53 class M<T> {} |
| 51 class A { A(b); } | 54 class A { A(b); } |
| 52 class B extends A with M<int> { | 55 class B extends A with M<int> { |
| 53 a() {} | 56 a() {} |
| 54 | 57 |
| 55 lot() {} | 58 lot() {} |
| 56 | 59 |
| 57 of() {} | 60 of() {} |
| 58 | 61 |
| 59 var members; | 62 var members; |
| 60 } | 63 } |
| 61 main() => new B();''', | 64 main() => new B();''', |
| 62 const { | 65 const { |
| 63 MessageKind.NO_MATCHING_CONSTRUCTOR_FOR_IMPLICIT: ''' | 66 MessageKind.NO_MATCHING_CONSTRUCTOR_FOR_IMPLICIT: ''' |
| 64 class B extends A with M<int> { | 67 class B extends A with M<int> { |
| 65 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^'''}), | 68 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^''' |
| 66 | 69 }), |
| 67 const Test(''' | 70 const Test( |
| 71 ''' |
| 68 class A { A(b); } | 72 class A { A(b); } |
| 69 class B | 73 class B |
| 70 extends A { | 74 extends A { |
| 71 a() {} | 75 a() {} |
| 72 | 76 |
| 73 lot() {} | 77 lot() {} |
| 74 | 78 |
| 75 of() {} | 79 of() {} |
| 76 | 80 |
| 77 var members; | 81 var members; |
| 78 } | 82 } |
| 79 main() => new B();''', | 83 main() => new B();''', |
| 80 const { | 84 const { |
| 81 MessageKind.NO_MATCHING_CONSTRUCTOR_FOR_IMPLICIT: ''' | 85 MessageKind.NO_MATCHING_CONSTRUCTOR_FOR_IMPLICIT: ''' |
| 82 class B | 86 class B |
| 83 extends A { | 87 extends A { |
| 84 '''}), | 88 ''' |
| 85 | 89 }), |
| 86 const Test(''' | 90 const Test( |
| 91 ''' |
| 87 void foo(int a) { | 92 void foo(int a) { |
| 88 // a | 93 // a |
| 89 // non-empty | 94 // non-empty |
| 90 // body | 95 // body |
| 91 } | 96 } |
| 92 main() => foo('');''', | 97 main() => foo('');''', |
| 93 const { | 98 const { |
| 94 MessageKind.THIS_IS_THE_METHOD: ''' | 99 MessageKind.THIS_IS_THE_METHOD: ''' |
| 95 void foo(int a) { | 100 void foo(int a) { |
| 96 ^^^^^^^^^^^^^^^'''}), | 101 ^^^^^^^^^^^^^^^''' |
| 97 | 102 }), |
| 98 const Test(''' | 103 const Test( |
| 104 ''' |
| 99 void foo(int a, | 105 void foo(int a, |
| 100 int b) { | 106 int b) { |
| 101 // a | 107 // a |
| 102 // non-empty | 108 // non-empty |
| 103 // body | 109 // body |
| 104 } | 110 } |
| 105 main() => foo('', 0);''', | 111 main() => foo('', 0);''', |
| 106 const { | 112 const { |
| 107 MessageKind.THIS_IS_THE_METHOD: ''' | 113 MessageKind.THIS_IS_THE_METHOD: ''' |
| 108 void foo(int a, | 114 void foo(int a, |
| 109 int b) { | 115 int b) { |
| 110 '''}), | 116 ''' |
| 111 | 117 }), |
| 112 const Test(''' | 118 const Test( |
| 119 ''' |
| 113 class A { | 120 class A { |
| 114 int foo() { | 121 int foo() { |
| 115 // a | 122 // a |
| 116 // non-empty | 123 // non-empty |
| 117 // body | 124 // body |
| 118 } | 125 } |
| 119 } | 126 } |
| 120 class B extends A { | 127 class B extends A { |
| 121 int get foo { | 128 int get foo { |
| 122 // a | 129 // a |
| 123 // non-empty | 130 // non-empty |
| 124 // body | 131 // body |
| 125 return 0; | 132 return 0; |
| 126 } | 133 } |
| 127 } | 134 } |
| 128 main() => new B();''', | 135 main() => new B();''', |
| 129 const { | 136 const { |
| 130 MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER: ''' | 137 MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER: ''' |
| 131 int get foo { | 138 int get foo { |
| 132 ^^^^^^^^^^^''', | 139 ^^^^^^^^^^^''', |
| 133 MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER_CONT: ''' | 140 MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER_CONT: ''' |
| 134 int foo() { | 141 int foo() { |
| 135 ^^^^^^^^^'''}), | 142 ^^^^^^^^^''' |
| 143 }), |
| 136 ]; | 144 ]; |
| 137 | 145 |
| 138 class Test { | 146 class Test { |
| 139 final String code; | 147 final String code; |
| 140 final Map<MessageKind, String> kindToSpan; | 148 final Map<MessageKind, String> kindToSpan; |
| 141 | 149 |
| 142 const Test(this.code, this.kindToSpan); | 150 const Test(this.code, this.kindToSpan); |
| 143 } | 151 } |
| 144 | 152 |
| 145 const String MARKER = '---marker---'; | 153 const String MARKER = '---marker---'; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 158 MemorySourceFileProvider provider = cachedCompiler.provider; | 166 MemorySourceFileProvider provider = cachedCompiler.provider; |
| 159 Map<MessageKind, String> kindToSpan = | 167 Map<MessageKind, String> kindToSpan = |
| 160 new Map<MessageKind, String>.from(test.kindToSpan); | 168 new Map<MessageKind, String>.from(test.kindToSpan); |
| 161 for (CollectedMessage message in collector.messages) { | 169 for (CollectedMessage message in collector.messages) { |
| 162 String expectedSpanText = kindToSpan[message.messageKind]; | 170 String expectedSpanText = kindToSpan[message.messageKind]; |
| 163 if (expectedSpanText != null) { | 171 if (expectedSpanText != null) { |
| 164 SourceFile sourceFile = provider.getSourceFile(message.uri); | 172 SourceFile sourceFile = provider.getSourceFile(message.uri); |
| 165 String locationMessage = | 173 String locationMessage = |
| 166 sourceFile.getLocationMessage(MARKER, message.begin, message.end); | 174 sourceFile.getLocationMessage(MARKER, message.begin, message.end); |
| 167 // Remove `filename:line:column:` and message. | 175 // Remove `filename:line:column:` and message. |
| 168 String strippedLocationMessage = locationMessage.substring( | 176 String strippedLocationMessage = locationMessage |
| 169 locationMessage.indexOf(MARKER) + MARKER.length + 1); | 177 .substring(locationMessage.indexOf(MARKER) + MARKER.length + 1); |
| 170 Expect.equals(expectedSpanText, strippedLocationMessage, | 178 Expect.equals( |
| 179 expectedSpanText, |
| 180 strippedLocationMessage, |
| 171 "Unexpected span for ${message.messageKind} in\n${test.code}" | 181 "Unexpected span for ${message.messageKind} in\n${test.code}" |
| 172 "\nExpected:${expectedSpanText.codeUnits}" | 182 "\nExpected:${expectedSpanText.codeUnits}" |
| 173 "\nActual :${strippedLocationMessage.codeUnits}"); | 183 "\nActual :${strippedLocationMessage.codeUnits}"); |
| 174 kindToSpan.remove(message.messageKind); | 184 kindToSpan.remove(message.messageKind); |
| 175 } | 185 } |
| 176 } | 186 } |
| 177 kindToSpan.forEach((MessageKind kind, _) { | 187 kindToSpan.forEach((MessageKind kind, _) { |
| 178 Expect.fail("Missing message kin $kind in\n${test.code}"); | 188 Expect.fail("Missing message kin $kind in\n${test.code}"); |
| 179 }); | 189 }); |
| 180 } | 190 } |
| 181 }); | 191 }); |
| 182 } | 192 } |
| OLD | NEW |