| // Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| // Tests syntax edge cases. |
| import 'package:expect/expect.dart'; |
| |
| void main() { |
| // Trailing comma after then. |
| Expect.listEquals([1], [if (true) 1]); |
| Expect.mapEquals({1: 1}, {if (true) 1: 1}); |
| Expect.setEquals({1}, {if (true) 1}); |
| |
| // Trailing comma after else. |
| Expect.listEquals([1], [if (true) 1 else 2]); |
| Expect.mapEquals({1: 1}, {if (true) 1: 1 else 2: 2}); |
| Expect.setEquals({1}, {if (true) 1 else 2}); |
| |
| // Trailing comma after for. |
| Expect.listEquals([1], [1, for (; false;) 2]); |
| Expect.mapEquals({1: 1}, {1: 1, for (; false;) 2: 2}); |
| Expect.setEquals({1}, {1, for (; false;) 2}); |
| |
| // Dangling else. |
| Expect.listEquals( |
| [1], |
| [ |
| if (true) |
| if (false) 0 else 1, |
| ], |
| ); |
| Expect.listEquals( |
| [1], |
| [ |
| if (true) |
| if (false) 0 else 1 |
| else |
| 2, |
| ], |
| ); |
| Expect.listEquals( |
| [2], |
| [ |
| if (false) |
| if (false) 0 else 1 |
| else |
| 2, |
| ], |
| ); |
| |
| // Precedence of then. |
| Expect.listEquals([1, 2, 3], [1, if (true) true ? 2 : 0, 3]); |
| var a = 0; |
| Expect.listEquals([1, 2, 3], [1, if (true) a = 2, 3]); |
| |
| // Precedence of else. |
| Expect.listEquals([1, 2, 3], [1, if (false) 0 else true ? 2 : 0, 3]); |
| a = 0; |
| Expect.listEquals([1, 2, 3], [1, if (false) 0 else a = 2, 3]); |
| |
| // Precedence of for. |
| Expect.listEquals( |
| [1, 2, 3], |
| [1, for (var i = 0; i < 1; i++) true ? 2 : 0, 3], |
| ); |
| a = 0; |
| Expect.listEquals([1, 2, 3], [1, for (var i = 0; i < 1; i++) a = 2, 3]); |
| } |