Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 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 | |
| 3 // BSD-style license that can be found in the LICENSE file. | |
| 4 | |
| 5 import "dart:async"; | |
| 6 import "package:expect/expect.dart"; | |
| 7 import "package:async_helper/async_helper.dart"; | |
| 8 | |
| 9 class Tracer { | |
| 10 final String expected; | |
| 11 final String name; | |
| 12 int counter = 0; | |
| 13 | |
| 14 Tracer(this.expected, [this.name]); | |
| 15 | |
| 16 void trace(msg) { | |
| 17 if (name != null) { | |
| 18 print("Tracing $name: $msg"); | |
| 19 } | |
| 20 Expect.equals(expected[counter], msg); | |
| 21 counter++; | |
| 22 } | |
| 23 | |
| 24 void done() { | |
| 25 Expect.equals(expected.length, counter, "Received too few traces"); | |
| 26 } | |
| 27 } | |
| 28 | |
| 29 foo1(Tracer tracer) async { | |
|
floitsch
2015/02/17 12:40:58
You could consider removing the "async" in the ///
sigurdm
2015/02/17 14:19:49
I want to check that the async rewrite works prope
| |
| 30 try { | |
| 31 tracer.trace("a"); | |
| 32 // This await forces dart2js to rewrite the try into a state machine | |
|
floitsch
2015/02/17 12:40:58
nit nit. 2 spaces after "await".
sigurdm
2015/02/17 14:19:49
Done.
| |
| 33 // instead of relying on the existing structure. | |
| 34 await new Future.value(3); /// forceAwait: ok | |
| 35 tracer.trace("b"); | |
| 36 throw "Error"; | |
| 37 } catch (error) { | |
| 38 tracer.trace("c"); | |
| 39 Expect.equals("Error", error); | |
| 40 throw "Error2"; | |
| 41 tracer.trace("d"); | |
| 42 } finally { | |
| 43 tracer.trace("e"); | |
| 44 } | |
| 45 tracer.trace("f"); | |
| 46 } | |
| 47 | |
| 48 foo2(Tracer tracer) async { | |
| 49 try { | |
| 50 tracer.trace("a"); | |
| 51 await new Future.value(3); /// forceAwait: continued | |
| 52 tracer.trace("b"); | |
| 53 throw "Error"; | |
| 54 tracer.trace("c"); | |
| 55 } catch (error) { | |
| 56 tracer.trace("d"); | |
| 57 Expect.equals("Error", error); | |
| 58 await new Future.error("Error2"); | |
| 59 } finally { | |
| 60 tracer.trace("e"); | |
| 61 } | |
| 62 tracer.trace("f"); | |
| 63 } | |
| 64 | |
| 65 foo3(Tracer tracer) async { | |
| 66 try { | |
| 67 tracer.trace("a"); | |
| 68 await new Future.value(3); /// forceAwait: continued | |
| 69 tracer.trace("b"); | |
| 70 throw "Error"; | |
| 71 tracer.trace("c"); | |
| 72 } catch (error) { | |
| 73 Expect.equals("Error", error); | |
| 74 tracer.trace("d"); | |
| 75 return; | |
| 76 } finally { | |
| 77 tracer.trace("e"); | |
| 78 } | |
| 79 tracer.trace("f"); | |
| 80 } | |
| 81 | |
| 82 foo4(Tracer tracer) async { | |
| 83 try { | |
| 84 try { | |
| 85 await new Future.value(3); | |
|
floitsch
2015/02/17 12:40:58
/// forceAwait: continue ?
sigurdm
2015/02/17 14:19:49
Done.
| |
| 86 tracer.trace("a"); | |
| 87 throw "Error"; | |
| 88 } catch(error) { | |
| 89 tracer.trace("b"); | |
| 90 Expect.equals("Error", error); | |
| 91 throw "Error2"; | |
| 92 } | |
| 93 } catch(error) { | |
| 94 Expect.equals("Error2", error); | |
| 95 tracer.trace("c"); | |
| 96 } | |
| 97 tracer.trace("d"); | |
| 98 | |
| 99 } | |
| 100 | |
| 101 foo5(Tracer tracer) async { | |
| 102 try { | |
| 103 tracer.trace("a"); | |
| 104 try { | |
| 105 await new Future.value(3); /// forceAwait: continued | |
| 106 tracer.trace("b"); | |
| 107 throw "Error"; | |
| 108 } catch(error) { | |
| 109 tracer.trace("c"); | |
| 110 Expect.equals("Error", error); | |
| 111 throw "Error2"; | |
| 112 } | |
| 113 } finally { | |
| 114 tracer.trace("d"); | |
| 115 } | |
| 116 tracer.trace("e"); | |
| 117 | |
| 118 } | |
| 119 | |
| 120 foo6(Tracer tracer) async { | |
| 121 try { | |
| 122 try { | |
| 123 await new Future.value(3); /// forceAwait: continued | |
| 124 tracer.trace("a"); | |
| 125 throw "Error"; | |
| 126 } catch(error) { | |
| 127 tracer.trace("b"); | |
| 128 Expect.equals("Error", error); | |
| 129 throw "Error2"; | |
| 130 } finally { | |
| 131 tracer.trace("c"); | |
| 132 throw "Error3"; | |
|
floitsch
2015/02/17 12:40:58
Please add a few tests, where the "finally" does a
sigurdm
2015/02/17 14:19:49
Done.
| |
| 133 } | |
| 134 } catch(error) { | |
| 135 tracer.trace("d"); | |
| 136 Expect.equals("Error3", error); | |
| 137 } | |
| 138 tracer.trace("e"); | |
| 139 } | |
| 140 | |
| 141 foo7(Tracer tracer) async { | |
| 142 try { | |
| 143 try { | |
| 144 await new Future.value(3); /// forceAwait: continued | |
| 145 tracer.trace("a"); | |
| 146 throw "Error"; | |
| 147 } catch(error) { | |
| 148 Expect.equals("Error", error); | |
| 149 tracer.trace("b"); | |
| 150 throw "Error2"; | |
| 151 } finally { | |
| 152 tracer.trace("c"); | |
| 153 throw "Error3"; | |
| 154 } | |
| 155 } finally { | |
| 156 tracer.trace("d"); | |
| 157 } | |
| 158 tracer.trace("e"); | |
| 159 } | |
| 160 | |
| 161 foo8(Tracer tracer) async { | |
| 162 try { | |
| 163 try { | |
| 164 await new Future.value(3); /// forceAwait: continued | |
| 165 tracer.trace("a"); | |
| 166 throw "Error"; | |
| 167 } catch(error) { | |
| 168 Expect.equals("Error", error); | |
| 169 tracer.trace("b"); | |
| 170 return; | |
| 171 } finally { | |
| 172 tracer.trace("c"); | |
| 173 throw "Error3"; | |
| 174 } | |
| 175 } finally { | |
| 176 tracer.trace("d"); | |
| 177 } | |
| 178 tracer.trace("e"); | |
| 179 } | |
| 180 | |
| 181 foo9(Tracer tracer) async { | |
| 182 try { | |
| 183 while(true) { | |
| 184 try { | |
| 185 await new Future.value(3); /// forceAwait: continued | |
| 186 tracer.trace("a"); | |
| 187 throw "Error"; | |
| 188 } catch(error) { | |
| 189 Expect.equals("Error", error); | |
| 190 tracer.trace("b"); | |
| 191 return; | |
| 192 } finally { | |
| 193 tracer.trace("c"); | |
| 194 break; | |
| 195 } | |
| 196 tracer.trace("d"); | |
| 197 } | |
| 198 } finally { | |
| 199 tracer.trace("e"); | |
| 200 } | |
| 201 tracer.trace("f"); | |
| 202 } | |
| 203 | |
| 204 foo10(Tracer tracer) async { | |
|
floitsch
2015/02/17 12:40:58
does the same as foo9.
sigurdm
2015/02/17 14:19:49
Removed
| |
| 205 try { | |
| 206 while(true) { | |
| 207 try { | |
| 208 await new Future.value(3); /// forceAwait: continued | |
| 209 tracer.trace("a"); | |
| 210 throw "Error"; | |
| 211 } catch(error) { | |
| 212 Expect.equals("Error", error); | |
| 213 tracer.trace("b"); | |
| 214 return; | |
| 215 } finally { | |
| 216 tracer.trace("c"); | |
| 217 break; | |
| 218 } | |
| 219 tracer.trace("d"); | |
| 220 } | |
| 221 } finally { | |
| 222 tracer.trace("e"); | |
| 223 } | |
| 224 tracer.trace("f"); | |
| 225 } | |
| 226 | |
| 227 foo11(Tracer tracer) async { | |
| 228 try { | |
| 229 bool firstTime = true; | |
| 230 while(true) { | |
| 231 tracer.trace("a"); | |
| 232 if (firstTime) { | |
| 233 try { | |
| 234 await new Future.value(3); /// forceAwait: continued | |
| 235 tracer.trace("b"); | |
| 236 throw "Error"; | |
| 237 } catch(error) { | |
| 238 Expect.equals("Error", error); | |
| 239 tracer.trace("c"); | |
| 240 firstTime = false; | |
| 241 continue; | |
| 242 } finally { | |
| 243 tracer.trace("d"); | |
| 244 } | |
| 245 } else { | |
| 246 tracer.trace("e"); | |
| 247 return; | |
| 248 } | |
| 249 } | |
| 250 } finally { | |
| 251 tracer.trace("f"); | |
| 252 } | |
| 253 tracer.trace("g"); | |
| 254 } | |
| 255 | |
| 256 foo12(Tracer tracer) async { | |
| 257 try { | |
| 258 bool firstTime = true; | |
| 259 while(true) { | |
| 260 tracer.trace("a"); | |
| 261 if (firstTime) { | |
| 262 try { | |
| 263 await new Future.value(3); /// forceAwait: continued | |
| 264 tracer.trace("b"); | |
| 265 throw "Error"; | |
| 266 } catch(error) { | |
| 267 Expect.equals("Error", error); | |
| 268 tracer.trace("c"); | |
| 269 firstTime = false; | |
| 270 continue; | |
| 271 } finally { | |
| 272 tracer.trace("d"); | |
| 273 break; | |
| 274 } | |
| 275 } else { | |
| 276 tracer.trace("e"); | |
| 277 return; | |
| 278 } | |
| 279 } | |
| 280 } finally { | |
| 281 tracer.trace("f"); | |
| 282 } | |
| 283 tracer.trace("g"); | |
| 284 } | |
| 285 | |
| 286 foo13(Tracer tracer) async { | |
| 287 try { | |
| 288 try { | |
| 289 tracer.trace("a"); | |
| 290 return; | |
| 291 } catch (error) { | |
| 292 tracer.trace("b"); | |
| 293 } finally { | |
| 294 tracer.trace("c"); | |
| 295 try { | |
| 296 try { | |
| 297 await new Future.value(3); /// forceAwait: continued | |
| 298 tracer.trace("d"); | |
| 299 throw "Error"; | |
| 300 } finally { | |
| 301 tracer.trace("e"); | |
| 302 } | |
| 303 } finally { | |
| 304 tracer.trace("f"); | |
| 305 } | |
| 306 } | |
| 307 } finally { | |
| 308 tracer.trace("g"); | |
| 309 } | |
| 310 tracer.trace("h"); | |
| 311 } | |
| 312 | |
| 313 foo14(Tracer tracer) async { | |
| 314 try { | |
| 315 try { | |
| 316 tracer.trace("a"); | |
| 317 throw "Error"; | |
| 318 } catch (error) { | |
| 319 tracer.trace("b"); | |
| 320 try { | |
| 321 await new Future.value(3); /// forceAwait: continued | |
| 322 throw "Error2"; | |
| 323 } catch(error) { | |
| 324 tracer.trace("c"); | |
| 325 } finally { | |
| 326 tracer.trace("d"); | |
| 327 } | |
| 328 tracer.trace("e"); | |
| 329 throw "Error3"; | |
| 330 } finally { | |
| 331 tracer.trace("f"); | |
| 332 } | |
| 333 } finally { | |
| 334 tracer.trace("g"); | |
| 335 } | |
| 336 tracer.trace("h"); | |
| 337 } | |
| 338 | |
| 339 test() async { | |
| 340 Tracer tracer = new Tracer("abce"); | |
| 341 try { | |
|
floitsch
2015/02/17 12:40:58
You could avoid a lot of the boilerplate:
runTest
sigurdm
2015/02/17 14:19:49
Done.
| |
| 342 await foo1(tracer); | |
| 343 } catch (e) { | |
| 344 Expect.equals("Error2", e); | |
|
floitsch
2015/02/17 12:40:58
You should trace the catching.
sigurdm
2015/02/17 14:19:49
Done.
| |
| 345 } | |
| 346 tracer.done(); | |
| 347 | |
| 348 tracer = new Tracer("abde"); | |
| 349 try { | |
| 350 await foo2(tracer); | |
| 351 } catch (e) { | |
| 352 Expect.equals("Error2", e); | |
| 353 } | |
| 354 tracer.done(); | |
| 355 | |
| 356 tracer = new Tracer("abde"); | |
| 357 await foo3(tracer); | |
| 358 tracer.done(); | |
| 359 | |
| 360 tracer = new Tracer("abcd"); | |
| 361 var x = foo4(tracer); | |
| 362 await x; | |
| 363 print("foo4 done"); | |
| 364 tracer.done(); | |
| 365 | |
| 366 tracer = new Tracer("abcd"); | |
| 367 try { | |
| 368 await foo5(tracer); | |
| 369 } catch (e) { | |
| 370 Expect.equals("Error2", e); | |
| 371 } | |
| 372 tracer.done(); | |
| 373 | |
| 374 tracer = new Tracer("abcde"); | |
| 375 await foo6(tracer); | |
| 376 tracer.done(); | |
| 377 | |
| 378 tracer = new Tracer("abcd"); | |
| 379 try { | |
| 380 await foo7(tracer); | |
| 381 } catch (e) { | |
| 382 Expect.equals("Error3", e); | |
| 383 } | |
| 384 tracer.done(); | |
| 385 | |
| 386 tracer = new Tracer("abcd"); | |
| 387 try { | |
| 388 await foo8(tracer); | |
| 389 } catch (e) { | |
| 390 Expect.equals("Error3", e); | |
| 391 } | |
| 392 tracer.done(); | |
| 393 | |
| 394 tracer = new Tracer("abcef"); | |
| 395 await foo9(tracer); | |
| 396 tracer.done(); | |
| 397 | |
| 398 tracer = new Tracer("abcef"); | |
| 399 await foo10(tracer); | |
| 400 tracer.done(); | |
| 401 | |
| 402 tracer = new Tracer("abcdaef"); | |
| 403 await foo11(tracer); | |
| 404 tracer.done(); | |
| 405 | |
| 406 tracer = new Tracer("abcdfg"); | |
| 407 await foo12(tracer); | |
| 408 tracer.done(); | |
| 409 | |
| 410 tracer = new Tracer("acdefg"); | |
| 411 try { | |
| 412 await foo13(tracer); | |
| 413 } catch (e) { | |
| 414 Expect.equals("Error", e); | |
| 415 } | |
| 416 tracer.done(); | |
| 417 | |
| 418 tracer = new Tracer("abcdefg", "foo14"); | |
| 419 try { | |
| 420 await foo14(tracer); | |
| 421 } catch (e) { | |
| 422 Expect.equals("Error3", e); | |
| 423 } | |
| 424 tracer.done(); | |
| 425 } | |
| 426 | |
| 427 void main() { | |
| 428 asyncTest(test); | |
| 429 } | |
| OLD | NEW |