// Copyright (c) 2011, 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. import "package:expect/expect.dart"; // Test that a final list literal is not expandable nor modifiable. class ConstListLiteralTest { static void testMain() { var list = const [4, 2, 3]; Expect.equals(3, list.length); var exception = null; try { list.add(4); } on UnsupportedError catch (e) { exception = e; } Expect.equals(true, exception != null); Expect.equals(3, list.length); exception = null; exception = null; try { list.addAll([4, 5]); } on UnsupportedError catch (e) { exception = e; } Expect.equals(true, exception != null); Expect.equals(3, list.length); exception = null; try { list[0] = 0; } on UnsupportedError catch (e) { exception = e; } Expect.equals(true, exception != null); Expect.equals(3, list.length); exception = null; try { list.sort((a, b) => a - b); } on UnsupportedError catch (e) { exception = e; } Expect.equals(true, exception != null); Expect.equals(3, list.length); Expect.equals(4, list[0]); Expect.equals(2, list[1]); Expect.equals(3, list[2]); exception = null; try { list.setRange(0, 1, [1], 0); } on UnsupportedError catch (e) { exception = e; } Expect.equals(true, exception != null); Expect.equals(3, list.length); Expect.equals(4, list[0]); Expect.equals(2, list[1]); Expect.equals(3, list[2]); // Note: the next check is a regression test for dart2js. The immutable list // overrides the 'length' property of List, but relies on using the native // 'forEach' construct in Array. This test ensures that our strategy works // correctly. int x = 0; list.forEach((e) { x += e; }); Expect.equals(9, x); } } main() { ConstListLiteralTest.testMain(); }