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