// Copyright (c) 2020, 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. // @dart = 2.9 import "dart:collection"; import "package:expect/expect.dart"; import 'cast_helper.dart'; void main() { testDowncast(); testUpcast(); testRegression(); } void testDowncast() { var list = new List.from(elements); var dList = List.castFrom(list); Expect.throws(() => dList.first); // C is not D. Expect.equals(d, dList[1]); Expect.throws(() => dList[2]); // E is not D. Expect.equals(f, dList[3]); Expect.equals(null, dList.last); Expect.throws(() => dList.toList()); // Setting works. dList[2] = d; Expect.equals(d, dList[2]); } void testUpcast() { var list2 = new List.from(elements); var dList2 = List.castFrom(list2); Expect.listEquals(elements, dList2); Expect.throws(() => dList2[2] = new Object()); // Cannot set non-C. Expect.listEquals(elements, dList2); } void testRegression() { var numList = [4, 3, 2, 1]; var intList = numList.cast(); intList.sort(null); Expect.listEquals([1, 2, 3, 4], numList); Expect.listEquals([1, 2, 3, 4], intList); }