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