| // Copyright (c) 2018, 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. |
| |
| // test w/ `pub run test -N prefer_const_literals_to_create_immutables` |
| |
| // Hack to work around issues importing `meta.dart` in tests. |
| // Ideally, remove: |
| library meta; |
| |
| class _Immutable { |
| const _Immutable(); |
| } |
| |
| const _Immutable immutable = const _Immutable(); |
| |
| @immutable |
| class A { |
| const A(a); |
| const A.named({a}); |
| } |
| |
| // basic tests |
| var l1 = new A([]); // LINT |
| var l2 = new A(const[]); // OK |
| |
| // tests for nested lists |
| var l3 = new A([ // LINT |
| []]); // LINT |
| var l4 = new A([ // LINT |
| const[]]); // OK |
| var l5 = new A(const[ //OK |
| const[]]); // OK |
| |
| // tests with maps and parenthesis |
| var l6 = new A({1: // LINT |
| []});// LINT |
| var l7 = new A(const {1: const []});// OK |
| var l8 = new A((([])));// LINT |
| var l9 = new A(((const[])));// OK |
| |
| // test with const inside |
| var l10 = new A([const A(null)]); // LINT |
| |
| // test named parameter |
| var l11 = new A.named(a: []); // LINT |
| |
| // test with literals |
| var l12 = new A([1]); // LINT |
| var l13 = new A([1.0]); // LINT |
| var l14 = new A(['']); // LINT |
| var l15 = new A([null]); // LINT |
| |
| // basic tests |
| var m1 = new A({}); // LINT |
| var m2 = new A(const{}); // OK |
| |
| // tests for nested maps |
| var m3 = new A({ // LINT |
| 1: {}}); // LINT |
| var m4 = new A({ // LINT |
| 1: const{}}); // OK |
| var m5 = new A(const{1: //OK |
| const{}}); // OK |
| |
| // tests with lists and parenthesis |
| var m6 = new A([ // LINT |
| {}]);// LINT |
| var m7 = new A(const [const {}]);// OK |
| var m8 = new A((({})));// LINT |
| var m9 = new A(((const{})));// OK |
| |
| // test with const inside |
| var m10 = new A({1: const A(null)}); // LINT |
| |
| // test named parameter |
| var m11 = new A.named(a: {}); // LINT |
| |
| // test with literals |
| var m12 = new A({1: 1}); // LINT |
| var m13 = new A({1: 1.0}); // LINT |
| var m14 = new A({1: ''}); // LINT |
| var m15 = new A({1: null}); // LINT |
| |
| // ignore: undefined_class |
| var e1 = new B([]); // OK |
| |
| // optional new |
| class C {} |
| var m16 = A([C()]); // OK |