| // Copyright (c) 2018, 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. |
| |
| // VMOptions=--enable-isolate-groups --experimental-enable-isolate-groups-jit |
| // VMOptions=--no-enable-isolate-groups |
| |
| // Verifies that large typed data can be passed in a field through message port. |
| // This is a regression test for |
| // https://github.com/flutter/flutter/issues/22796. |
| |
| import 'dart:io'; |
| import 'dart:isolate'; |
| import 'dart:typed_data'; |
| |
| import "package:expect/expect.dart"; |
| |
| class A { |
| // TFA thinks this field has type _Int32List but sending an object across |
| // a message port creates an instance that has _ExternalInt32List inside. |
| final _int32Array = new Int32List(5 * 1024); |
| A() { |
| _int32Array.setRange( |
| 0, _int32Array.length, Iterable.generate(_int32Array.length)); |
| verify(); |
| } |
| |
| void verify() { |
| for (var i = 0; i < _int32Array.length; i++) { |
| if (_int32Array[i] != i) { |
| print('_int32Array[$i]: ${_int32Array[i]} != ${i}'); |
| } |
| Expect.equals(i, _int32Array[i]); |
| } |
| } |
| } |
| |
| void main() { |
| final rp = new ReceivePort(); |
| rp.listen((dynamic data) { |
| (data as A).verify(); |
| print("ok"); |
| exit(0); |
| }); |
| rp.sendPort.send(A()); |
| } |