OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Tests launched by extensions/renderer/api/serial/data_receiver_unittest.cc | 5 // Tests launched by extensions/renderer/api/serial/data_receiver_unittest.cc |
6 | 6 |
7 var test = require('test').binding; | 7 var test = require('test').binding; |
8 var unittestBindings = require('test_environment_specific_bindings'); | 8 var unittestBindings = require('test_environment_specific_bindings'); |
9 | 9 |
10 var fatalErrorValue = 2; | 10 var BUFFER_SIZE = 10; |
11 var bufferSize = 10; | 11 var FATAL_ERROR = 2; |
12 | 12 |
13 function createReceiver() { | 13 function createReceiver() { |
14 return Promise.all([ | 14 return Promise.all([ |
15 requireAsync('content/public/renderer/service_provider'), | 15 requireAsync('content/public/renderer/service_provider'), |
16 requireAsync('data_receiver'), | 16 requireAsync('data_receiver'), |
17 requireAsync('device/serial/data_stream.mojom'), | 17 requireAsync('device/serial/data_stream.mojom'), |
18 ]).then(test.callbackPass(function(modules) { | 18 ]).then(function(modules) { |
19 var serviceProvider = modules[0]; | 19 var serviceProvider = modules[0]; |
20 var dataReceiver = modules[1]; | 20 var dataReceiver = modules[1]; |
21 var dataStream = modules[2]; | 21 var dataStream = modules[2]; |
22 return new dataReceiver.DataReceiver( | 22 return new dataReceiver.DataReceiver( |
23 serviceProvider.connectToService(dataStream.DataSourceProxy.NAME_), | 23 serviceProvider.connectToService(dataStream.DataSourceProxy.NAME_), |
24 bufferSize, | 24 BUFFER_SIZE, |
25 fatalErrorValue); | 25 FATAL_ERROR); |
26 })); | 26 }); |
27 } | |
28 | |
29 function receiveAndCheckData(expectedData) { | |
raymes
2014/09/18 03:16:06
It would be good to comment these functions and po
Sam McNally
2014/09/19 04:58:47
Done.
| |
30 return function(receiver) { | |
31 return receiver.receive().then(function(data) { | |
32 test.assertEq(expectedData.length, data.byteLength); | |
33 for (var i = 0; i < expectedData.length; i++) | |
34 test.assertEq(expectedData.charCodeAt(i), new Int8Array(data)[i]); | |
35 return receiver; | |
36 }); | |
37 test.assertThrows( | |
38 receiver.receive, receiver, [], 'Receive already in progress.'); | |
39 }; | |
40 } | |
41 | |
42 function receiveAndCheckError(expectedError) { | |
43 return function(receiver) { | |
44 return receiver.receive().catch(function(error) { | |
45 test.assertEq(expectedError, error.error); | |
46 return receiver; | |
47 }); | |
48 test.assertThrows( | |
49 receiver.receive, receiver, [], 'Receive already in progress.'); | |
50 }; | |
51 } | |
52 | |
53 function serializeRoundTrip(receiver) { | |
54 return Promise.all([ | |
55 receiver.serialize(), | |
56 requireAsync('data_receiver'), | |
raymes
2014/09/18 03:16:06
This seems weird to have here?
Sam McNally
2014/09/19 04:58:47
createReceiver does the same.
| |
57 ]).then(function(promises) { | |
58 var serialized = promises[0]; | |
59 var dataReceiver = promises[1]; | |
raymes
2014/09/18 03:16:07
this is really "dataReceiverModule", right?
Sam McNally
2014/09/19 04:58:47
Done.
| |
60 return promises[1].DataReceiver.deserialize(promises[0]); | |
raymes
2014/09/18 03:16:07
I think you meant to use the named vars here.
Sam McNally
2014/09/19 04:58:47
Done.
| |
61 }); | |
62 } | |
63 | |
64 function closeReceiver(receiver) { | |
65 receiver.close(); | |
66 return receiver; | |
27 } | 67 } |
28 | 68 |
29 unittestBindings.exportTests([ | 69 unittestBindings.exportTests([ |
30 function testReceive() { | 70 function testReceive() { |
31 createReceiver().then(test.callbackPass(function(receiver) { | 71 createReceiver() |
32 receiver.receive().then(test.callbackPass(function(data) { | 72 .then(receiveAndCheckData('a')) |
33 test.assertEq(1, data.byteLength); | 73 .then(closeReceiver).then(test.succeed, test.fail); |
34 test.assertEq('a'.charCodeAt(0), new Int8Array(data)[0]); | |
35 receiver.close(); | |
36 })); | |
37 test.assertThrows( | |
38 receiver.receive, receiver, [], 'Receive already in progress.'); | |
39 })); | |
40 }, | 74 }, |
41 | 75 |
42 function testReceiveError() { | 76 function testReceiveError() { |
43 createReceiver().then(test.callbackPass(function(receiver) { | 77 createReceiver() |
44 receiver.receive().catch(test.callbackPass(function(error) { | 78 .then(receiveAndCheckError(1)) |
45 test.assertEq(1, error.error); | 79 .then(closeReceiver).then(test.succeed, test.fail); |
46 receiver.close(); | |
47 })); | |
48 })); | |
49 }, | 80 }, |
50 | 81 |
51 function testReceiveDataAndError() { | 82 function testReceiveDataAndError() { |
52 createReceiver().then(test.callbackPass(function(receiver) { | 83 createReceiver() |
53 receiver.receive().then(test.callbackPass(function(data) { | 84 .then(receiveAndCheckData('a')) |
54 test.assertEq(1, data.byteLength); | 85 .then(receiveAndCheckError(1)) |
55 test.assertEq('a'.charCodeAt(0), new Int8Array(data)[0]); | 86 .then(receiveAndCheckData('b')) |
56 return receiver.receive(); | 87 .then(closeReceiver).then(test.succeed, test.fail); |
57 })).catch(test.callbackPass(function(error) { | |
58 test.assertEq(1, error.error); | |
59 return receiver.receive(); | |
60 })).then(test.callbackPass(function(data) { | |
61 test.assertEq(1, data.byteLength); | |
62 test.assertEq('b'.charCodeAt(0), new Int8Array(data)[0]); | |
63 receiver.close(); | |
64 })); | |
65 })); | |
66 }, | 88 }, |
67 | 89 |
68 function testReceiveErrorThenData() { | 90 function testReceiveErrorThenData() { |
69 createReceiver().then(test.callbackPass(function(receiver) { | 91 createReceiver() |
70 receiver.receive().catch(test.callbackPass(function(error) { | 92 .then(receiveAndCheckError(1)) |
71 test.assertEq(1, error.error); | 93 .then(receiveAndCheckData('a')) |
72 return receiver.receive(); | 94 .then(closeReceiver).then(test.succeed, test.fail); |
73 })).then(test.callbackPass(function(data) { | 95 }, |
74 test.assertEq(1, data.byteLength); | 96 |
75 test.assertEq('a'.charCodeAt(0), new Int8Array(data)[0]); | 97 function testReceiveWithSerialization() { |
76 receiver.close(); | 98 createReceiver() |
77 })); | 99 .then(receiveAndCheckData('a')) |
78 })); | 100 .then(serializeRoundTrip) |
101 .then(receiveAndCheckData('b')) | |
102 .then(closeReceiver).then(test.succeed, test.fail); | |
103 }, | |
104 | |
105 function testReceiveErrorWithSerialization() { | |
106 createReceiver() | |
107 .then(receiveAndCheckError(1)) | |
108 .then(serializeRoundTrip) | |
109 .then(receiveAndCheckError(3)) | |
110 .then(closeReceiver).then(test.succeed, test.fail); | |
111 }, | |
112 | |
113 function testReceiveDataAndErrorWithSerialization() { | |
114 createReceiver() | |
115 .then(receiveAndCheckData('a')) | |
116 .then(receiveAndCheckError(1)) | |
117 .then(serializeRoundTrip) | |
118 .then(receiveAndCheckData('b')) | |
119 .then(receiveAndCheckError(3)) | |
120 .then(receiveAndCheckData('c')) | |
121 .then(closeReceiver).then(test.succeed, test.fail); | |
122 }, | |
123 | |
124 function testReceiveErrorThenDataWithSerialization() { | |
125 createReceiver() | |
126 .then(receiveAndCheckError(1)) | |
127 .then(serializeRoundTrip) | |
128 .then(receiveAndCheckData('a')) | |
129 .then(closeReceiver).then(test.succeed, test.fail); | |
130 }, | |
131 | |
132 function testSerializeDuringReceive() { | |
133 var receiver = createReceiver(); | |
134 receiver.then(receiveAndCheckError(FATAL_ERROR)); | |
135 receiver | |
136 .then(serializeRoundTrip) | |
137 .then(receiveAndCheckData('a')) | |
138 .then(closeReceiver).then(test.succeed, test.fail); | |
139 }, | |
140 | |
141 function testSerializeAfterClose() { | |
142 function receiveAfterClose(receiver) { | |
143 test.assertThrows( | |
144 receiver.receive, receiver, [], 'DataReceiver has been closed'); | |
145 } | |
146 | |
147 createReceiver() | |
148 .then(closeReceiver) | |
149 .then(serializeRoundTrip) | |
150 .then(receiveAfterClose).then(test.succeed, test.fail); | |
79 }, | 151 }, |
80 | 152 |
81 function testSourceShutdown() { | 153 function testSourceShutdown() { |
82 createReceiver().then(test.callbackPass(function(receiver) { | 154 createReceiver() |
83 receiver.receive().catch(test.callbackPass(function(error) { | 155 .then(receiveAndCheckError(FATAL_ERROR)) |
84 test.assertEq(fatalErrorValue, error.error); | 156 .then(closeReceiver).then(test.succeed, test.fail); |
85 receiver.close(); | |
86 })); | |
87 })); | |
88 }, | 157 }, |
89 | 158 |
90 ], test.runTests, exports); | 159 ], test.runTests, exports); |
OLD | NEW |