| // 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]); |
| } |