blob: 4cf555837e734083507e86f064a52ec5dc7a1c2a [file] [log] [blame]
// Copyright (c) 2019, 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
@JS()
library array_test;
import 'package:expect/expect.dart';
import 'package:js/js.dart';
import 'package:js/js_util.dart' as js;
main() {
testArrayConstructor();
}
/// Test that we can access .constructor() on a JS Array instance, regardless
/// of the reified generic type.
///
/// Regression test for https://github.com/dart-lang/sdk/issues/36372
testArrayConstructor() {
var list = <int>[1, 2, 3];
testArray = list;
// Call the consturctor with `new`.
var array = js.callConstructor(js.getProperty(testArray, 'constructor'), []);
var list2 = array as List;
Expect.listEquals(list2, []);
Expect.notEquals(list, list2, '$list2 should be a new list');
// We could return a reified type here, but currently does not to match
// dart2js, and because the Array is being returned to JS.
Expect.isFalse(list2 is List<int>,
'$list2 should not have a reified generic type (it was allocated by JS)');
list2.addAll([1, 2, 3]);
Expect.listEquals(list, list2);
}
external Object get testArray;
external set testArray(value);