| // 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. |
| // Check that arrays from const array literals are immutable. |
| |
| import "package:expect/expect.dart"; |
| |
| class ListLiteral3Test { |
| static const List<String> canonicalJoke = const ["knock", "knock"]; |
| |
| static testMain() { |
| List<String> joke = const ["knock", "knock"]; |
| // Elements of canonical lists are canonicalized. |
| Expect.identical(joke, canonicalJoke); |
| Expect.identical(joke[0], joke[1]); |
| Expect.identical(joke[0], canonicalJoke[0]); |
| |
| // Lists from literals are immutable. |
| Expect.throwsUnsupportedError(() => joke[0] = "sock"); |
| Expect.identical(joke[0], joke[1]); |
| |
| // Make sure lists allocated at runtime are mutable and are |
| // not canonicalized. |
| List<String> lame_joke = ["knock", "knock"]; // Invokes operator new. |
| Expect.identical(joke[1], lame_joke[1]); |
| // Operator new creates a mutable list. |
| Expect.equals(false, identical(joke, lame_joke)); |
| lame_joke[1] = "who"; |
| Expect.identical("who", lame_joke[1]); |
| |
| // Elements of canonical lists are canonicalized. |
| List<List<int>> a = const <List<int>>[ |
| const [1, 2], |
| const [1, 2] |
| ]; |
| Expect.identical(a[0], a[1]); |
| Expect.identical(a[0][0], a[1][0]); |
| Expect.throwsUnsupportedError(() => a[0][0] = 42); |
| |
| List<List<double>> b = const [ |
| const [1.0, 2.0], |
| const [1.0, 2.0] |
| ]; |
| Expect.identical(b[0], b[1]); |
| Expect.equals(true, b[0][0] == 1.0); |
| Expect.identical(b[0][0], b[1][0]); |
| Expect.throwsUnsupportedError(() => b[0][0] = 42.0); |
| } |
| } |
| |
| main() { |
| ListLiteral3Test.testMain(); |
| } |