Chromium Code Reviews| 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 |