| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 // VMOptions=--error_on_bad_type --error_on_bad_override | 4 // VMOptions=--error_on_bad_type --error_on_bad_override |
| 5 | 5 |
| 6 import 'package:observatory/service_io.dart'; | 6 import 'package:observatory/service_io.dart'; |
| 7 import 'package:unittest/unittest.dart'; | 7 import 'package:unittest/unittest.dart'; |
| 8 import 'test_helper.dart'; | 8 import 'test_helper.dart'; |
| 9 | 9 |
| 10 import 'dart:math' as math; | 10 import 'dart:math' as math; |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 } | 68 } |
| 69 | 69 |
| 70 testMethod(Isolate isolate) async { | 70 testMethod(Isolate isolate) async { |
| 71 // silence analyzer. | 71 // silence analyzer. |
| 72 expect(math.sqrt(4), equals(2)); | 72 expect(math.sqrt(4), equals(2)); |
| 73 Library rootLib = await isolate.rootLibrary.load(); | 73 Library rootLib = await isolate.rootLibrary.load(); |
| 74 ServiceFunction function = | 74 ServiceFunction function = |
| 75 rootLib.functions.singleWhere((f) => f.name == 'breakHere'); | 75 rootLib.functions.singleWhere((f) => f.name == 'breakHere'); |
| 76 Breakpoint bpt = await isolate.addBreakpointAtEntry(function); | 76 Breakpoint bpt = await isolate.addBreakpointAtEntry(function); |
| 77 print("Breakpoint: $bpt"); | 77 print("Breakpoint: $bpt"); |
| 78 expect(bpt is Breakpoint, isTrue); // I.e, not null. | 78 expect(bpt is Breakpoint, isTrue); // I.e, not null. |
| 79 | 79 |
| 80 bool hitBreakpoint = false; | 80 bool hitBreakpoint = false; |
| 81 var stream = await isolate.vm.getEventStream(VM.kDebugStream); | 81 var stream = await isolate.vm.getEventStream(VM.kDebugStream); |
| 82 var sub; | 82 var sub; |
| 83 sub = stream.listen((ServiceEvent event) async { | 83 sub = stream.listen((ServiceEvent event) async { |
| 84 print("Event $event"); | 84 print("Event $event"); |
| 85 if (event.kind == ServiceEvent.kPauseBreakpoint) { | 85 if (event.kind == ServiceEvent.kPauseBreakpoint) { |
| 86 var frameNumber = 1, r; | 86 var frameNumber = 1, r; |
| 87 r = await isolate.evalFrame(frameNumber, '123'); | 87 r = await isolate.evalFrame(frameNumber, '123'); /// instance: ok |
| 88 | 88 expect(r.valueAsString, equals('123')); /// instance: continued |
| 89 /// instance: ok | 89 r = await isolate.evalFrame(frameNumber, 'this'); /// scope: ok |
| 90 expect(r.valueAsString, equals('123')); | 90 expect(r.clazz.name, equals('C')); /// scope: continued |
| 91 | 91 r = await isolate.evalFrame(frameNumber, 'instVar'); /// instance: contin
ued |
| 92 /// instance: continued | 92 expect(r.valueAsString, equals('1')); /// instance: continued |
| 93 r = await isolate.evalFrame(frameNumber, 'this'); | 93 r = await isolate.evalFrame(frameNumber, 'classVar'); /// instance: contin
ued |
| 94 | 94 expect(r.valueAsString, equals('2')); /// instance: continued |
| 95 /// scope: ok | 95 r = await isolate.evalFrame(frameNumber, 'methodParam'); /// scope: conti
nued |
| 96 expect(r.clazz.name, equals('C')); | 96 expect(r.valueAsString, equals('3')); /// scope: continued |
| 97 | 97 r = await isolate.evalFrame(frameNumber, 'methodTemp'); /// scope: contin
ued |
| 98 /// scope: continued | 98 expect(r.valueAsString, equals('4')); /// scope: continued |
| 99 r = await isolate.evalFrame(frameNumber, 'instVar'); | 99 r = await isolate.evalFrame(frameNumber, 'outerParam'); /// scope: contin
ued |
| 100 | 100 expect(r.valueAsString, equals('5')); /// scope: continued |
| 101 /// instance: continued | 101 r = await isolate.evalFrame(frameNumber, 'outerTemp'); /// scope: continu
ed |
| 102 expect(r.valueAsString, equals('1')); | 102 expect(r.valueAsString, equals('6')); /// scope: continued |
| 103 | 103 r = await isolate.evalFrame(frameNumber, 'innerParam'); /// instance: con
tinued |
| 104 /// instance: continued | 104 expect(r.valueAsString, equals('7')); /// instance: continued |
| 105 r = await isolate.evalFrame(frameNumber, 'classVar'); | 105 r = await isolate.evalFrame(frameNumber, 'innerTemp'); /// instance: cont
inued |
| 106 | 106 expect(r.valueAsString, equals('8')); /// instance: continued |
| 107 /// instance: continued | 107 r = await isolate.evalFrame(frameNumber, 'math.sqrt'); /// instance: cont
inued |
| 108 expect(r.valueAsString, equals('2')); | 108 expect(r.isClosure, isTrue); /// instance: continued |
| 109 | |
| 110 /// instance: continued | |
| 111 r = await isolate.evalFrame(frameNumber, 'methodParam'); | |
| 112 | |
| 113 /// scope: continued | |
| 114 expect(r.valueAsString, equals('3')); | |
| 115 | |
| 116 /// scope: continued | |
| 117 r = await isolate.evalFrame(frameNumber, 'methodTemp'); | |
| 118 | |
| 119 /// scope: continued | |
| 120 expect(r.valueAsString, equals('4')); | |
| 121 | |
| 122 /// scope: continued | |
| 123 r = await isolate.evalFrame(frameNumber, 'outerParam'); | |
| 124 | |
| 125 /// scope: continued | |
| 126 expect(r.valueAsString, equals('5')); | |
| 127 | |
| 128 /// scope: continued | |
| 129 r = await isolate.evalFrame(frameNumber, 'outerTemp'); | |
| 130 | |
| 131 /// scope: continued | |
| 132 expect(r.valueAsString, equals('6')); | |
| 133 | |
| 134 /// scope: continued | |
| 135 r = await isolate.evalFrame(frameNumber, 'innerParam'); | |
| 136 | |
| 137 /// instance: continued | |
| 138 expect(r.valueAsString, equals('7')); | |
| 139 | |
| 140 /// instance: continued | |
| 141 r = await isolate.evalFrame(frameNumber, 'innerTemp'); | |
| 142 | |
| 143 /// instance: continued | |
| 144 expect(r.valueAsString, equals('8')); | |
| 145 | |
| 146 /// instance: continued | |
| 147 r = await isolate.evalFrame(frameNumber, 'math.sqrt'); | |
| 148 | |
| 149 /// instance: continued | |
| 150 expect(r.isClosure, isTrue); | |
| 151 | |
| 152 /// instance: continued | |
| 153 | 109 |
| 154 hitBreakpoint = true; | 110 hitBreakpoint = true; |
| 155 sub.cancel(); // Do not handle events for the other tests. | 111 sub.cancel(); // Do not handle events for the other tests. |
| 156 isolate.resume(); | 112 isolate.resume(); |
| 157 } | 113 } |
| 158 }); | 114 }); |
| 159 | 115 |
| 160 var result = await rootLib.evaluate('new C().method(3);'); | 116 var result = await rootLib.evaluate('new C().method(3);'); |
| 161 print("Result $result"); | 117 print("Result $result"); |
| 162 expect(hitBreakpoint, isTrue); | 118 expect(hitBreakpoint, isTrue); |
| 163 } | 119 } |
| 164 | 120 |
| 165 testMethod2(Isolate isolate) async { | 121 testMethod2(Isolate isolate) async { |
| 166 Library rootLib = await isolate.rootLibrary.load(); | 122 Library rootLib = await isolate.rootLibrary.load(); |
| 167 ServiceFunction function = | 123 ServiceFunction function = |
| 168 rootLib.functions.singleWhere((f) => f.name == 'breakHere'); | 124 rootLib.functions.singleWhere((f) => f.name == 'breakHere'); |
| 169 Breakpoint bpt = await isolate.addBreakpointAtEntry(function); | 125 Breakpoint bpt = await isolate.addBreakpointAtEntry(function); |
| 170 print("Breakpoint: $bpt"); | 126 print("Breakpoint: $bpt"); |
| 171 expect(bpt is Breakpoint, isTrue); // I.e, not null. | 127 expect(bpt is Breakpoint, isTrue); // I.e, not null. |
| 172 | 128 |
| 173 bool hitBreakpoint = false; | 129 bool hitBreakpoint = false; |
| 174 var stream = await isolate.vm.getEventStream(VM.kDebugStream); | 130 var stream = await isolate.vm.getEventStream(VM.kDebugStream); |
| 175 var sub; | 131 var sub; |
| 176 sub = stream.listen((ServiceEvent event) async { | 132 sub = stream.listen((ServiceEvent event) async { |
| 177 print("Event $event"); | 133 print("Event $event"); |
| 178 if (event.kind == ServiceEvent.kPauseBreakpoint) { | 134 if (event.kind == ServiceEvent.kPauseBreakpoint) { |
| 179 var frameNumber = 1, r; | 135 var frameNumber = 1, r; |
| 180 r = await isolate.evalFrame(frameNumber, '123'); | 136 r = await isolate.evalFrame(frameNumber, '123'); |
| 181 expect(r.valueAsString, equals('123')); | 137 expect(r.valueAsString, equals('123')); |
| 182 r = await isolate.evalFrame(frameNumber, 'this'); | 138 r = await isolate.evalFrame(frameNumber, 'this'); |
| 183 expect(r is DartError, isTrue); | 139 expect(r is DartError, isTrue); |
| 184 r = await isolate.evalFrame(frameNumber, 'instVar'); | 140 r = await isolate.evalFrame(frameNumber, 'instVar'); |
| 185 expect(r is DartError, isTrue); | 141 expect(r is DartError, isTrue); |
| 186 r = await isolate.evalFrame(frameNumber, 'classVar'); | 142 r = await isolate.evalFrame(frameNumber, 'classVar'); |
| 187 expect(r.valueAsString, equals('2')); | 143 expect(r.valueAsString, equals('2')); |
| 188 r = await isolate.evalFrame(frameNumber, 'methodParam'); | 144 r = await isolate.evalFrame(frameNumber, 'methodParam'); |
| 189 expect(r.valueAsString, equals('3')); | 145 expect(r.valueAsString, equals('3')); /// scope: continued |
| 190 | |
| 191 /// scope: continued | |
| 192 r = await isolate.evalFrame(frameNumber, 'methodTemp'); | 146 r = await isolate.evalFrame(frameNumber, 'methodTemp'); |
| 193 expect(r.valueAsString, equals('4')); | 147 expect(r.valueAsString, equals('4')); /// scope: continued |
| 194 | |
| 195 /// scope: continued | |
| 196 r = await isolate.evalFrame(frameNumber, 'outerParam'); | 148 r = await isolate.evalFrame(frameNumber, 'outerParam'); |
| 197 expect(r.valueAsString, equals('5')); | 149 expect(r.valueAsString, equals('5')); /// scope: continued |
| 198 | |
| 199 /// scope: continued | |
| 200 r = await isolate.evalFrame(frameNumber, 'outerTemp'); | 150 r = await isolate.evalFrame(frameNumber, 'outerTemp'); |
| 201 expect(r.valueAsString, equals('6')); | 151 expect(r.valueAsString, equals('6')); /// scope: continued |
| 202 | |
| 203 /// scope: continued | |
| 204 r = await isolate.evalFrame(frameNumber, 'innerParam'); | 152 r = await isolate.evalFrame(frameNumber, 'innerParam'); |
| 205 expect(r.valueAsString, equals('7')); | 153 expect(r.valueAsString, equals('7')); |
| 206 r = await isolate.evalFrame(frameNumber, 'innerTemp'); | 154 r = await isolate.evalFrame(frameNumber, 'innerTemp'); |
| 207 expect(r.valueAsString, equals('8')); | 155 expect(r.valueAsString, equals('8')); |
| 208 r = await isolate.evalFrame(frameNumber, 'math.sqrt'); | 156 r = await isolate.evalFrame(frameNumber, 'math.sqrt'); |
| 209 expect(r.isClosure, isTrue); | 157 expect(r.isClosure, isTrue); |
| 210 | 158 |
| 211 hitBreakpoint = true; | 159 hitBreakpoint = true; |
| 212 sub.cancel(); // Do not handle events for the other tests. | 160 sub.cancel(); // Do not handle events for the other tests. |
| 213 isolate.resume(); | 161 isolate.resume(); |
| 214 } | 162 } |
| 215 }); | 163 }); |
| 216 | 164 |
| 217 var result = await rootLib.evaluate('C.method2(3);'); | 165 var result = await rootLib.evaluate('C.method2(3);'); |
| 218 print("Result $result"); | 166 print("Result $result"); |
| 219 expect(hitBreakpoint, isTrue); | 167 expect(hitBreakpoint, isTrue); |
| 220 } | 168 } |
| 221 | 169 |
| 222 testMethod3(Isolate isolate) async { | 170 testMethod3(Isolate isolate) async { |
| 223 Library rootLib = await isolate.rootLibrary.load(); | 171 Library rootLib = await isolate.rootLibrary.load(); |
| 224 ServiceFunction function = | 172 ServiceFunction function = |
| 225 rootLib.functions.singleWhere((f) => f.name == 'breakHere'); | 173 rootLib.functions.singleWhere((f) => f.name == 'breakHere'); |
| 226 Breakpoint bpt = await isolate.addBreakpointAtEntry(function); | 174 Breakpoint bpt = await isolate.addBreakpointAtEntry(function); |
| 227 print("Breakpoint: $bpt"); | 175 print("Breakpoint: $bpt"); |
| 228 expect(bpt is Breakpoint, isTrue); // I.e, not null. | 176 expect(bpt is Breakpoint, isTrue); // I.e, not null. |
| 229 | 177 |
| 230 bool hitBreakpoint = false; | 178 bool hitBreakpoint = false; |
| 231 var stream = await isolate.vm.getEventStream(VM.kDebugStream); | 179 var stream = await isolate.vm.getEventStream(VM.kDebugStream); |
| 232 var sub; | 180 var sub; |
| 233 sub = stream.listen((ServiceEvent event) async { | 181 sub = stream.listen((ServiceEvent event) async { |
| 234 print("Event $event"); | 182 print("Event $event"); |
| 235 if (event.kind == ServiceEvent.kPauseBreakpoint) { | 183 if (event.kind == ServiceEvent.kPauseBreakpoint) { |
| 236 var frameNumber = 1, r; | 184 var frameNumber = 1, r; |
| 237 r = await isolate.evalFrame(frameNumber, '123'); | 185 r = await isolate.evalFrame(frameNumber, '123'); |
| 238 expect(r.valueAsString, equals('123')); | 186 expect(r.valueAsString, equals('123')); |
| 239 r = await isolate.evalFrame(frameNumber, 'this'); | 187 r = await isolate.evalFrame(frameNumber, 'this'); |
| 240 expect(r.clazz.name, equals('C')); | 188 expect(r.clazz.name, equals('C')); |
| 241 r = await isolate.evalFrame(frameNumber, 'instVar'); | 189 r = await isolate.evalFrame(frameNumber, 'instVar'); |
| 242 expect(r.valueAsString, equals('1')); | 190 expect(r.valueAsString, equals('1')); |
| 243 r = await isolate.evalFrame(frameNumber, 'classVar'); | 191 r = await isolate.evalFrame(frameNumber, 'classVar'); |
| 244 expect(r.valueAsString, equals('2')); | 192 expect(r.valueAsString, equals('2')); |
| 245 r = await isolate.evalFrame(frameNumber, 'methodParam'); | 193 r = await isolate.evalFrame(frameNumber, 'methodParam'); |
| 246 expect(r.valueAsString, equals('3')); | 194 expect(r.valueAsString, equals('3')); |
| 247 r = await isolate.evalFrame(frameNumber, 'methodTemp'); | 195 r = await isolate.evalFrame(frameNumber, 'methodTemp'); |
| 248 expect(r.valueAsString, equals('4')); | 196 expect(r.valueAsString, equals('4')); |
| 249 r = await isolate.evalFrame(frameNumber, 'math.sqrt'); | 197 r = await isolate.evalFrame(frameNumber, 'math.sqrt'); |
| 250 expect(r.isClosure, isTrue); | 198 expect(r.isClosure, isTrue); |
| 251 | 199 |
| 252 hitBreakpoint = true; | 200 hitBreakpoint = true; |
| 253 sub.cancel(); // Do not handle events for the other tests. | 201 sub.cancel(); // Do not handle events for the other tests. |
| 254 isolate.resume(); | 202 isolate.resume(); |
| 255 } | 203 } |
| 256 }); | 204 }); |
| 257 | 205 |
| 258 var result = await rootLib.evaluate('new C().method3(3);'); | 206 var result = await rootLib.evaluate('new C().method3(3);'); |
| 259 print("Result $result"); | 207 print("Result $result"); |
| 260 expect(hitBreakpoint, isTrue); | 208 expect(hitBreakpoint, isTrue); |
| 261 } | 209 } |
| 262 | 210 |
| 211 |
| 263 testMethod4(Isolate isolate) async { | 212 testMethod4(Isolate isolate) async { |
| 264 Library rootLib = await isolate.rootLibrary.load(); | 213 Library rootLib = await isolate.rootLibrary.load(); |
| 265 ServiceFunction function = | 214 ServiceFunction function = |
| 266 rootLib.functions.singleWhere((f) => f.name == 'breakHere'); | 215 rootLib.functions.singleWhere((f) => f.name == 'breakHere'); |
| 267 Breakpoint bpt = await isolate.addBreakpointAtEntry(function); | 216 Breakpoint bpt = await isolate.addBreakpointAtEntry(function); |
| 268 print("Breakpoint: $bpt"); | 217 print("Breakpoint: $bpt"); |
| 269 expect(bpt is Breakpoint, isTrue); // I.e, not null. | 218 expect(bpt is Breakpoint, isTrue); // I.e, not null. |
| 270 | 219 |
| 271 bool hitBreakpoint = false; | 220 bool hitBreakpoint = false; |
| 272 var stream = await isolate.vm.getEventStream(VM.kDebugStream); | 221 var stream = await isolate.vm.getEventStream(VM.kDebugStream); |
| 273 var sub; | 222 var sub; |
| 274 sub = stream.listen((ServiceEvent event) async { | 223 sub = stream.listen((ServiceEvent event) async { |
| 275 print("Event $event"); | 224 print("Event $event"); |
| 276 if (event.kind == ServiceEvent.kPauseBreakpoint) { | 225 if (event.kind == ServiceEvent.kPauseBreakpoint) { |
| 277 var frameNumber = 1, r; | 226 var frameNumber = 1, r; |
| 278 r = await isolate.evalFrame(frameNumber, '123'); | 227 r = await isolate.evalFrame(frameNumber, '123'); /// instance: continued |
| 279 | 228 expect(r.valueAsString, equals('123')); /// instance: continued |
| 280 /// instance: continued | 229 r = await isolate.evalFrame(frameNumber, 'this'); /// scope: continued |
| 281 expect(r.valueAsString, equals('123')); | 230 expect(r.clazz.name, equals('C')); /// scope: continued |
| 282 | 231 r = await isolate.evalFrame(frameNumber, 'instVar'); /// instance: contin
ued |
| 283 /// instance: continued | 232 expect(r.valueAsString, equals('1')); /// instance: continued |
| 284 r = await isolate.evalFrame(frameNumber, 'this'); | 233 r = await isolate.evalFrame(frameNumber, 'classVar'); /// instance: conti
nued |
| 285 | 234 expect(r.valueAsString, equals('2')); /// instance: continued |
| 286 /// scope: continued | 235 r = await isolate.evalFrame(frameNumber, 'methodParam'); /// scope: conti
nued |
| 287 expect(r.clazz.name, equals('C')); | 236 expect(r.valueAsString, equals('3')); /// scope: continued |
| 288 | 237 r = await isolate.evalFrame(frameNumber, 'methodTemp'); /// scope: contin
ued |
| 289 /// scope: continued | 238 expect(r.valueAsString, equals('4')); /// scope: continued |
| 290 r = await isolate.evalFrame(frameNumber, 'instVar'); | 239 r = await isolate.evalFrame(frameNumber, 'outerParam'); /// scope: contin
ued |
| 291 | 240 expect(r.valueAsString, equals('5')); /// scope: continued |
| 292 /// instance: continued | 241 r = await isolate.evalFrame(frameNumber, 'outerTemp'); /// scope: continu
ed |
| 293 expect(r.valueAsString, equals('1')); | 242 expect(r.valueAsString, equals('6')); /// scope: continued |
| 294 | 243 r = await isolate.evalFrame(frameNumber, 'innerParam'); /// instance: con
tinued |
| 295 /// instance: continued | 244 expect(r.valueAsString, equals('7')); /// instance: continued |
| 296 r = await isolate.evalFrame(frameNumber, 'classVar'); | 245 r = await isolate.evalFrame(frameNumber, 'innerTemp'); /// instance: cont
inued |
| 297 | 246 expect(r.valueAsString, equals('8')); /// instance: continued |
| 298 /// instance: continued | 247 r = await isolate.evalFrame(frameNumber, 'math.sqrt'); /// instance: cont
inued |
| 299 expect(r.valueAsString, equals('2')); | 248 expect(r.isClosure, isTrue); /// instance: continued |
| 300 | |
| 301 /// instance: continued | |
| 302 r = await isolate.evalFrame(frameNumber, 'methodParam'); | |
| 303 | |
| 304 /// scope: continued | |
| 305 expect(r.valueAsString, equals('3')); | |
| 306 | |
| 307 /// scope: continued | |
| 308 r = await isolate.evalFrame(frameNumber, 'methodTemp'); | |
| 309 | |
| 310 /// scope: continued | |
| 311 expect(r.valueAsString, equals('4')); | |
| 312 | |
| 313 /// scope: continued | |
| 314 r = await isolate.evalFrame(frameNumber, 'outerParam'); | |
| 315 | |
| 316 /// scope: continued | |
| 317 expect(r.valueAsString, equals('5')); | |
| 318 | |
| 319 /// scope: continued | |
| 320 r = await isolate.evalFrame(frameNumber, 'outerTemp'); | |
| 321 | |
| 322 /// scope: continued | |
| 323 expect(r.valueAsString, equals('6')); | |
| 324 | |
| 325 /// scope: continued | |
| 326 r = await isolate.evalFrame(frameNumber, 'innerParam'); | |
| 327 | |
| 328 /// instance: continued | |
| 329 expect(r.valueAsString, equals('7')); | |
| 330 | |
| 331 /// instance: continued | |
| 332 r = await isolate.evalFrame(frameNumber, 'innerTemp'); | |
| 333 | |
| 334 /// instance: continued | |
| 335 expect(r.valueAsString, equals('8')); | |
| 336 | |
| 337 /// instance: continued | |
| 338 r = await isolate.evalFrame(frameNumber, 'math.sqrt'); | |
| 339 | |
| 340 /// instance: continued | |
| 341 expect(r.isClosure, isTrue); | |
| 342 | |
| 343 /// instance: continued | |
| 344 | 249 |
| 345 hitBreakpoint = true; | 250 hitBreakpoint = true; |
| 346 sub.cancel(); // Do not handle events for the other tests. | 251 sub.cancel(); // Do not handle events for the other tests. |
| 347 isolate.resume(); | 252 isolate.resume(); |
| 348 } | 253 } |
| 349 }); | 254 }); |
| 350 | 255 |
| 351 var result = await rootLib | 256 var result = await rootLib.evaluate( |
| 352 .evaluate('(){ new C().method4(3); C.closureWithReturnedHome(7); }()'); | 257 '(){ new C().method4(3); C.closureWithReturnedHome(7); }()'); |
| 353 print("Result $result"); | 258 print("Result $result"); |
| 354 expect(hitBreakpoint, isTrue); | 259 expect(hitBreakpoint, isTrue); |
| 355 } | 260 } |
| 356 | 261 |
| 357 var tests = [ | 262 var tests = [ |
| 358 testMethod, | 263 testMethod, |
| 359 testMethod2, | 264 testMethod2, |
| 360 testMethod3, | 265 testMethod3, |
| 361 testMethod4, | 266 testMethod4, |
| 362 ]; | 267 ]; |
| 363 | 268 |
| 364 main(args) => runIsolateTests(args, tests); | 269 main(args) => runIsolateTests(args, tests); |
| OLD | NEW |