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:analyzer/dart/ast/ast.dart'; | 5 import 'package:analyzer/dart/ast/ast.dart'; |
6 import 'package:analyzer/dart/ast/token.dart'; | 6 import 'package:analyzer/dart/ast/token.dart'; |
7 import 'package:analyzer/file_system/file_system.dart'; | 7 import 'package:analyzer/file_system/file_system.dart'; |
8 import 'package:analyzer/file_system/memory_file_system.dart'; | 8 import 'package:analyzer/file_system/memory_file_system.dart'; |
9 import 'package:analyzer/src/dart/sdk/patch.dart'; | 9 import 'package:analyzer/src/dart/sdk/patch.dart'; |
10 import 'package:analyzer/src/dart/sdk/sdk.dart'; | 10 import 'package:analyzer/src/dart/sdk/sdk.dart'; |
(...skipping 16 matching lines...) Expand all Loading... |
27 Folder sdkFolder; | 27 Folder sdkFolder; |
28 FolderBasedDartSdk sdk; | 28 FolderBasedDartSdk sdk; |
29 | 29 |
30 SdkPatcher patcher = new SdkPatcher(); | 30 SdkPatcher patcher = new SdkPatcher(); |
31 RecordingErrorListener listener = new RecordingErrorListener(); | 31 RecordingErrorListener listener = new RecordingErrorListener(); |
32 | 32 |
33 void setUp() { | 33 void setUp() { |
34 sdkFolder = provider.getFolder(_p('/sdk')); | 34 sdkFolder = provider.getFolder(_p('/sdk')); |
35 } | 35 } |
36 | 36 |
| 37 test_class_constructor_append_fail_notPrivate_named() { |
| 38 expect(() { |
| 39 _doTopLevelPatching( |
| 40 r''' |
| 41 class C {} |
| 42 ''', |
| 43 r''' |
| 44 @patch |
| 45 class C { |
| 46 C.named() {} |
| 47 } |
| 48 '''); |
| 49 }, throwsArgumentError); |
| 50 } |
| 51 |
| 52 test_class_constructor_append_fail_notPrivate_unnamed() { |
| 53 expect(() { |
| 54 _doTopLevelPatching( |
| 55 r''' |
| 56 class C {} |
| 57 ''', |
| 58 r''' |
| 59 @patch |
| 60 class C { |
| 61 C() {} |
| 62 } |
| 63 '''); |
| 64 }, throwsArgumentError); |
| 65 } |
| 66 |
| 67 test_class_constructor_append_named() { |
| 68 CompilationUnit unit = _doTopLevelPatching( |
| 69 r''' |
| 70 class C { |
| 71 } |
| 72 ''', |
| 73 r''' |
| 74 @patch |
| 75 class C { |
| 76 C._named() {} |
| 77 } |
| 78 '''); |
| 79 _assertUnitCode(unit, 'class C {C._named() {}}'); |
| 80 ClassDeclaration clazz = unit.declarations[0]; |
| 81 ConstructorDeclaration constructor = clazz.members[0]; |
| 82 _assertPrevNextToken(clazz.leftBracket, constructor.beginToken); |
| 83 _assertPrevNextToken(constructor.endToken, clazz.rightBracket); |
| 84 } |
| 85 |
| 86 test_class_constructor_append_unnamed() { |
| 87 CompilationUnit unit = _doTopLevelPatching( |
| 88 r''' |
| 89 class _C { |
| 90 } |
| 91 ''', |
| 92 r''' |
| 93 @patch |
| 94 class _C { |
| 95 _C() {} |
| 96 } |
| 97 '''); |
| 98 _assertUnitCode(unit, 'class _C {_C() {}}'); |
| 99 ClassDeclaration clazz = unit.declarations[0]; |
| 100 ConstructorDeclaration constructor = clazz.members[0]; |
| 101 _assertPrevNextToken(clazz.leftBracket, constructor.beginToken); |
| 102 _assertPrevNextToken(constructor.endToken, clazz.rightBracket); |
| 103 } |
| 104 |
| 105 test_class_constructor_patch() { |
| 106 CompilationUnit unit = _doTopLevelPatching( |
| 107 r''' |
| 108 class C { |
| 109 external C.named(); |
| 110 } |
| 111 ''', |
| 112 r''' |
| 113 @patch |
| 114 class C { |
| 115 @patch |
| 116 C.named() { |
| 117 print(42); |
| 118 } |
| 119 } |
| 120 '''); |
| 121 _assertUnitCode(unit, 'class C {C.named() {print(42);}}'); |
| 122 ClassDeclaration clazz = unit.declarations[0]; |
| 123 ConstructorDeclaration constructor = clazz.members[0]; |
| 124 expect(constructor.externalKeyword, isNull); |
| 125 _assertPrevNextToken( |
| 126 constructor.parameters.endToken, constructor.body.beginToken); |
| 127 _assertPrevNextToken(constructor.endToken, clazz.rightBracket); |
| 128 } |
| 129 |
| 130 test_class_constructor_patch_fail_baseFactory_patchGenerative() { |
| 131 expect(() { |
| 132 _doTopLevelPatching( |
| 133 r''' |
| 134 class C { |
| 135 external factory C.named(); |
| 136 } |
| 137 ''', |
| 138 r''' |
| 139 @patch |
| 140 class C { |
| 141 @patch |
| 142 C.named() {} |
| 143 } |
| 144 '''); |
| 145 }, throwsArgumentError); |
| 146 } |
| 147 |
| 148 test_class_constructor_patch_fail_baseGenerative_patchFactory() { |
| 149 expect(() { |
| 150 _doTopLevelPatching( |
| 151 r''' |
| 152 class C { |
| 153 external C.named(); |
| 154 } |
| 155 ''', |
| 156 r''' |
| 157 @patch |
| 158 class C { |
| 159 @patch |
| 160 factory C.named() {} |
| 161 } |
| 162 '''); |
| 163 }, throwsArgumentError); |
| 164 } |
| 165 |
| 166 test_class_constructor_patch_fail_hasInitializers() { |
| 167 expect(() { |
| 168 _doTopLevelPatching( |
| 169 r''' |
| 170 class C { |
| 171 int f; |
| 172 external C.named() : f = 1; |
| 173 } |
| 174 ''', |
| 175 r''' |
| 176 @patch |
| 177 class C { |
| 178 @patch |
| 179 C.named() : f = 2 {} |
| 180 } |
| 181 '''); |
| 182 }, throwsArgumentError); |
| 183 } |
| 184 |
| 185 test_class_constructor_patch_fail_noExternalKeyword() { |
| 186 expect(() { |
| 187 _doTopLevelPatching( |
| 188 r''' |
| 189 class C { |
| 190 C.named(); |
| 191 } |
| 192 ''', |
| 193 r''' |
| 194 @patch |
| 195 class C { |
| 196 @patch |
| 197 C.named() {} |
| 198 } |
| 199 '''); |
| 200 }, throwsArgumentError); |
| 201 } |
| 202 |
| 203 test_class_constructor_patch_initializers() { |
| 204 CompilationUnit unit = _doTopLevelPatching( |
| 205 r''' |
| 206 class C { |
| 207 int f; |
| 208 external C.named(); |
| 209 } |
| 210 ''', |
| 211 r''' |
| 212 @patch |
| 213 class C { |
| 214 @patch |
| 215 C.named() : f = 2 { |
| 216 print(42); |
| 217 } |
| 218 } |
| 219 '''); |
| 220 _assertUnitCode(unit, 'class C {int f; C.named() : f = 2 {print(42);}}'); |
| 221 ClassDeclaration clazz = unit.declarations[0]; |
| 222 ConstructorDeclaration constructor = clazz.members[1]; |
| 223 expect(constructor.externalKeyword, isNull); |
| 224 _assertPrevNextToken(constructor.parameters.endToken, |
| 225 constructor.initializers.beginToken.previous); |
| 226 _assertPrevNextToken(constructor.endToken, clazz.rightBracket); |
| 227 } |
| 228 |
37 test_class_getter_append() { | 229 test_class_getter_append() { |
38 CompilationUnit unit = _doTopLevelPatching( | 230 CompilationUnit unit = _doTopLevelPatching( |
39 r''' | 231 r''' |
40 class C { | 232 class C { |
41 void a() {} | 233 void a() {} |
42 } | 234 } |
43 ''', | 235 ''', |
44 r''' | 236 r''' |
45 @patch | 237 @patch |
46 class C { | 238 class C { |
(...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
446 void _setSdkLibraries(String code) { | 638 void _setSdkLibraries(String code) { |
447 provider.newFile( | 639 provider.newFile( |
448 _p('/sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart'), code); | 640 _p('/sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart'), code); |
449 } | 641 } |
450 | 642 |
451 static void _assertPrevNextToken(Token prev, Token next) { | 643 static void _assertPrevNextToken(Token prev, Token next) { |
452 expect(prev.next, same(next)); | 644 expect(prev.next, same(next)); |
453 expect(next.previous, same(prev)); | 645 expect(next.previous, same(prev)); |
454 } | 646 } |
455 } | 647 } |
OLD | NEW |