22// for details. All rights reserved. Use of this source code is governed by a
33// BSD-style license that can be found in the LICENSE file.
44
5- // Test that ensures correct exception is thrown when attempting to use
6- // transferred transferables .
5+ // Test that ensures correct exceptions are thrown when misusing
6+ // [TransferableTypedData] .
77
88import 'dart:async' ;
99import 'dart:collection' ;
@@ -15,20 +15,30 @@ import 'dart:math';
1515
1616import "package:expect/expect.dart" ;
1717
18- throwsIfMaterializeAfterSend () {
19- final rp = ReceivePort ();
18+ throwsIfMaterializeAfterSend () async {
19+ final completer = Completer <bool >();
20+ final rp = ReceivePort ()
21+ ..listen ((e) {
22+ completer.complete (true );
23+ });
2024 final transferable = TransferableTypedData .fromList ([Uint8List (1024 )]);
2125 rp.sendPort.send (transferable);
2226 Expect .throwsArgumentError (() => transferable.materialize ());
27+ await completer.future;
2328 rp.close ();
2429}
2530
26- throwsIfSendMoreThanOnce () {
27- final rp = ReceivePort ();
31+ throwsIfSendMoreThanOnce () async {
32+ final completer = Completer <bool >();
33+ final rp = ReceivePort ()
34+ ..listen ((e) {
35+ completer.complete (true );
36+ });
2837 final bytes = Uint8List (1024 );
2938 final transferable = TransferableTypedData .fromList ([bytes]);
3039 rp.sendPort.send (transferable);
3140 Expect .throwsArgumentError (() => rp.sendPort.send (transferable));
41+ await completer.future;
3242 rp.close ();
3343}
3444
@@ -39,7 +49,6 @@ throwsIfMaterializeMoreThanOnce() {
3949}
4050
4151throwsIfReceiverMaterializesMoreThanOnce () async {
42- final rp = ReceivePort ();
4352 final completer = Completer <List >();
4453 final isolateErrors = ReceivePort ()..listen ((e) => completer.complete (e));
4554 await Isolate .spawn (
@@ -51,7 +60,6 @@ throwsIfReceiverMaterializesMoreThanOnce() async {
5160 "Invalid argument(s): Attempt to materialize object that was"
5261 " transferred already." );
5362 isolateErrors.close ();
54- rp.close ();
5563}
5664
5765void receiver (final transferable) {
@@ -74,15 +82,6 @@ throwsIfCummulativeListIsTooLargeOn32bitPlatform() {
7482 () => TransferableTypedData .fromList ([halfmax, halfmax, Uint8List (2 )]));
7583}
7684
77- throwsIfCummulativeListCantBeAllocated () {
78- // Attempt to create total 1tb uint8list which should fail on 32 and 64-bit
79- // platforms.
80- final bytes100MB = Uint8List (100 * 1024 * 1024 );
81- final total1TB = List <Uint8List >.filled (10000 , bytes100MB);
82- // Try to make a 1 TB transferable.
83- Expect .throws (() => TransferableTypedData .fromList (total1TB));
84- }
85-
8685class MyList <T > extends ListBase <T > {
8786 @override
8887 int length;
@@ -97,16 +96,12 @@ class MyTypedData implements TypedData {
9796 noSuchMethod (_) {}
9897}
9998
100- main () {
101- throwsIfMaterializeAfterSend ();
102- throwsIfSendMoreThanOnce ();
99+ main () async {
100+ await throwsIfMaterializeAfterSend ();
101+ await throwsIfSendMoreThanOnce ();
103102 throwsIfMaterializeMoreThanOnce ();
104- throwsIfReceiverMaterializesMoreThanOnce ();
103+ await throwsIfReceiverMaterializesMoreThanOnce ();
105104 throwsIfCummulativeListIsTooLargeOn32bitPlatform ();
106- if (! Platform .isMacOS) {
107- // this test crashes the process on mac.
108- throwsIfCummulativeListCantBeAllocated ();
109- }
110105
111106 Expect .throwsArgumentError (() => TransferableTypedData .fromList (null ));
112107 Expect .throwsArgumentError (() => TransferableTypedData .fromList ([null ]));
0 commit comments