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_sender_unittest.cc | 5 // Tests launched by extensions/renderer/api/serial/data_sender_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 BUFFER_SIZE = 11; | 10 var BUFFER_SIZE = 11; |
(...skipping 19 matching lines...) Expand all Loading... |
30 var serviceProvider = modules[0]; | 30 var serviceProvider = modules[0]; |
31 var dataSender = modules[1]; | 31 var dataSender = modules[1]; |
32 var dataStream = modules[2]; | 32 var dataStream = modules[2]; |
33 return new dataSender.DataSender( | 33 return new dataSender.DataSender( |
34 serviceProvider.connectToService(dataStream.DataSinkProxy.NAME_), | 34 serviceProvider.connectToService(dataStream.DataSinkProxy.NAME_), |
35 BUFFER_SIZE, | 35 BUFFER_SIZE, |
36 FATAL_ERROR); | 36 FATAL_ERROR); |
37 })); | 37 })); |
38 } | 38 } |
39 | 39 |
| 40 function serializeRoundTrip(sender) { |
| 41 return Promise.all([ |
| 42 sender.serialize(), |
| 43 requireAsync('data_sender'), |
| 44 ]).then(function(promises) { |
| 45 var serialized = promises[0]; |
| 46 var dataSender = promises[1]; |
| 47 return dataSender.DataSender.deserialize(serialized); |
| 48 }); |
| 49 } |
| 50 |
40 unittestBindings.exportTests([ | 51 unittestBindings.exportTests([ |
41 function testSend() { | 52 function testSend() { |
42 createSender().then(test.callbackPass(function(sender) { | 53 createSender().then(test.callbackPass(function(sender) { |
43 var seen = null; | 54 var seen = null; |
44 sender.send(generateData(1)).then(test.callbackPass(function(bytesSent) { | 55 sender.send(generateData(1)).then(test.callbackPass(function(bytesSent) { |
45 test.assertEq(1, bytesSent); | 56 test.assertEq(1, bytesSent); |
46 test.assertEq(null, seen); | 57 test.assertEq(null, seen); |
47 seen = 'first'; | 58 seen = 'first'; |
48 })); | 59 })); |
49 sender.send(generateData(1)).then(test.callbackPass(function(bytesSent) { | 60 sender.send(generateData(1)).then(test.callbackPass(function(bytesSent) { |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
208 seen = 'cancel'; | 219 seen = 'cancel'; |
209 sender.close(); | 220 sender.close(); |
210 })); | 221 })); |
211 sender.close(); | 222 sender.close(); |
212 test.assertThrows( | 223 test.assertThrows( |
213 sender.cancel, sender, [], 'DataSender has been closed'); | 224 sender.cancel, sender, [], 'DataSender has been closed'); |
214 test.assertThrows(sender.send, sender, [], 'DataSender has been closed'); | 225 test.assertThrows(sender.send, sender, [], 'DataSender has been closed'); |
215 })); | 226 })); |
216 }, | 227 }, |
217 | 228 |
| 229 function testSendWithSerialization() { |
| 230 createSender().then(test.callbackPass(function(sender) { |
| 231 return sender.send(generateData(1)).then(test.callbackPass( |
| 232 function(bytesSent) { |
| 233 test.assertEq(1, bytesSent); |
| 234 return sender; |
| 235 })); |
| 236 })).then(test.callbackPass(serializeRoundTrip)).then(test.callbackPass( |
| 237 function(sender) { |
| 238 var seen = null; |
| 239 sender.send(generateData(1)).then(test.callbackPass(function(bytesSent) { |
| 240 test.assertEq(1, bytesSent); |
| 241 test.assertEq(null, seen); |
| 242 seen = 'second'; |
| 243 })); |
| 244 sender.send(generateData(1)).then(test.callbackPass(function(bytesSent) { |
| 245 sender.close(); |
| 246 test.assertEq(1, bytesSent); |
| 247 test.assertEq('second', seen); |
| 248 seen = 'third'; |
| 249 })); |
| 250 })); |
| 251 }, |
| 252 |
| 253 function testSendErrorWithSerialization() { |
| 254 createSender().then(test.callbackPass(function(sender) { |
| 255 return sender.send(generateData(BUFFER_SIZE * 3, 'b')).catch( |
| 256 test.callbackPass(function(e) { |
| 257 test.assertEq(1, e.error); |
| 258 test.assertEq(0, e.bytesSent); |
| 259 return sender.send(generateData(1)); |
| 260 })).then(test.callbackPass(function(bytesSent) { |
| 261 test.assertEq(1, bytesSent); |
| 262 return sender; |
| 263 })); |
| 264 })).then(test.callbackPass(serializeRoundTrip)).then(test.callbackPass( |
| 265 function(sender) { |
| 266 sender.send(generateData(BUFFER_SIZE * 3, 'b')).catch( |
| 267 test.callbackPass(function(e) { |
| 268 test.assertEq(3, e.error); |
| 269 test.assertEq(0, e.bytesSent); |
| 270 sender.send(generateData(1, 'c')).then(test.callbackPass( |
| 271 function(bytesSent) { |
| 272 test.assertEq(1, bytesSent); |
| 273 sender.close(); |
| 274 })); |
| 275 })); |
| 276 })); |
| 277 }, |
| 278 |
| 279 function testSendErrorPartialSuccessWithSerialization() { |
| 280 createSender().then(test.callbackPass(function(sender) { |
| 281 return sender.send(generateData(BUFFER_SIZE * 3, 'b')).catch( |
| 282 test.callbackPass(function(e) { |
| 283 test.assertEq(1, e.error); |
| 284 test.assertEq(5, e.bytesSent); |
| 285 return sender.send(generateData(1)); |
| 286 })).then(test.callbackPass(function(bytesSent) { |
| 287 test.assertEq(1, bytesSent); |
| 288 return sender; |
| 289 })); |
| 290 })).then(test.callbackPass(serializeRoundTrip)).then(test.callbackPass( |
| 291 function(sender) { |
| 292 sender.send(generateData(BUFFER_SIZE * 3, 'c')).catch(test.callbackPass( |
| 293 function(e) { |
| 294 test.assertEq(3, e.error); |
| 295 test.assertEq(5, e.bytesSent); |
| 296 return sender.send(generateData(1, 'd')); |
| 297 })).then(test.callbackPass(function(bytesSent) { |
| 298 test.assertEq(1, bytesSent); |
| 299 sender.close(); |
| 300 })); |
| 301 })); |
| 302 }, |
| 303 |
| 304 function testSendErrorBetweenPacketsWithSerialization() { |
| 305 createSender().then(test.callbackPass(function(sender) { |
| 306 var first = sender.send(generateData(2, 'b')).catch(test.callbackPass( |
| 307 function(e) { |
| 308 test.assertEq(1, e.error); |
| 309 test.assertEq(2, e.bytesSent); |
| 310 })); |
| 311 // After an error, all sends in progress will be cancelled. |
| 312 var second = sender.send(generateData(2, 'b')).catch(test.callbackPass( |
| 313 function(e) { |
| 314 test.assertEq(1, e.error); |
| 315 test.assertEq(0, e.bytesSent); |
| 316 return sender.send(generateData(1)); |
| 317 })).then(test.callbackPass( |
| 318 function(bytesSent) { |
| 319 test.assertEq(1, bytesSent); |
| 320 })); |
| 321 return Promise.all([first, second]).then(test.callbackPass(function() { |
| 322 return sender; |
| 323 })); |
| 324 })).then(test.callbackPass(serializeRoundTrip)).then(test.callbackPass( |
| 325 function(sender) { |
| 326 sender.send(generateData(2, 'c')).catch(test.callbackPass(function(e) { |
| 327 test.assertEq(3, e.error); |
| 328 test.assertEq(2, e.bytesSent); |
| 329 })); |
| 330 // After an error, all sends in progress will be cancelled. |
| 331 sender.send(generateData(2, 'c')).catch(test.callbackPass(function(e) { |
| 332 test.assertEq(3, e.error); |
| 333 test.assertEq(0, e.bytesSent); |
| 334 sender.send(generateData(1, 'd')).then(test.callbackPass( |
| 335 function(bytesSent) { |
| 336 test.assertEq(1, bytesSent); |
| 337 sender.close(); |
| 338 })); |
| 339 })); |
| 340 })); |
| 341 }, |
| 342 |
| 343 function testSendErrorInSecondPacketWithSerialization() { |
| 344 createSender().then(test.callbackPass(function(sender) { |
| 345 var first = sender.send(generateData(2, 'b')).then(test.callbackPass( |
| 346 function(bytesSent) { |
| 347 test.assertEq(2, bytesSent); |
| 348 })); |
| 349 var second = sender.send(generateData(2, 'b')).catch(test.callbackPass( |
| 350 function(e) { |
| 351 test.assertEq(1, e.error); |
| 352 test.assertEq(1, e.bytesSent); |
| 353 return sender.send(generateData(1)).then(test.callbackPass( |
| 354 function(bytesSent) { |
| 355 test.assertEq(1, bytesSent); |
| 356 })); |
| 357 })); |
| 358 return Promise.all([first, second]).then(test.callbackPass(function() { |
| 359 return sender; |
| 360 })); |
| 361 })).then(test.callbackPass(serializeRoundTrip)).then(test.callbackPass( |
| 362 function(sender) { |
| 363 sender.send(generateData(2, 'c')).then(test.callbackPass( |
| 364 function(bytesSent) { |
| 365 test.assertEq(2, bytesSent); |
| 366 })); |
| 367 sender.send(generateData(2, 'c')).catch(test.callbackPass(function(e) { |
| 368 test.assertEq(3, e.error); |
| 369 test.assertEq(1, e.bytesSent); |
| 370 return sender.send(generateData(1, 'd')).then(test.callbackPass( |
| 371 function(bytesSent) { |
| 372 test.assertEq(1, bytesSent); |
| 373 sender.close(); |
| 374 })); |
| 375 })); |
| 376 })); |
| 377 }, |
| 378 |
| 379 function testCancelWithSerialization() { |
| 380 createSender().then(test.callbackPass(function(sender) { |
| 381 var seen = null; |
| 382 sender.send(generateData(1, 'b')).catch(test.callbackPass(function(e) { |
| 383 test.assertEq(3, e.error); |
| 384 test.assertEq(0, e.bytesSent); |
| 385 test.assertEq(null, seen); |
| 386 seen = 'send'; |
| 387 })); |
| 388 return sender.cancel(3).then(test.callbackPass(function() { |
| 389 test.assertEq('send', seen); |
| 390 seen = 'cancel'; |
| 391 return sender; |
| 392 })); |
| 393 })).then(test.callbackPass(serializeRoundTrip)).then(test.callbackPass( |
| 394 function(sender) { |
| 395 var seen = null; |
| 396 sender.send(generateData(1, 'c')).catch(test.callbackPass(function(e) { |
| 397 test.assertEq(3, e.error); |
| 398 test.assertEq(0, e.bytesSent); |
| 399 test.assertEq(null, seen); |
| 400 seen = 'send'; |
| 401 })); |
| 402 return sender.cancel(3).then(test.callbackPass(function() { |
| 403 test.assertEq('send', seen); |
| 404 seen = 'cancel'; |
| 405 sender.close(); |
| 406 })).then(test.callbackPass(function() { |
| 407 return sender; |
| 408 })); |
| 409 })); |
| 410 }, |
| 411 |
| 412 function testSerializeWithSendsInProgress() { |
| 413 createSender().then(test.callbackPass(function(sender) { |
| 414 var seen = null; |
| 415 sender.send(generateData(1, 'b')).catch(test.callbackPass(function(e) { |
| 416 test.assertEq(FATAL_ERROR, e.error); |
| 417 test.assertEq(0, e.bytesSent); |
| 418 test.assertEq(null, seen); |
| 419 seen = 'send'; |
| 420 })); |
| 421 sender.send(generateData(1, 'b')).catch(test.callbackPass(function(e) { |
| 422 test.assertEq(FATAL_ERROR, e.error); |
| 423 test.assertEq(0, e.bytesSent); |
| 424 test.assertEq('send', seen); |
| 425 seen = 'send2'; |
| 426 })); |
| 427 serializeRoundTrip(sender).then(test.callbackPass(function(sender) { |
| 428 test.assertEq('send2', seen); |
| 429 seen = 'serialized'; |
| 430 sender.close(); |
| 431 })); |
| 432 })); |
| 433 }, |
| 434 |
| 435 function testSerializeWithSendAndCancelInProgress() { |
| 436 createSender().then(test.callbackPass(function(sender) { |
| 437 var seen = null; |
| 438 sender.send(generateData(1, 'b')).catch(test.callbackPass(function(e) { |
| 439 test.assertEq(3, e.error); |
| 440 test.assertEq(0, e.bytesSent); |
| 441 test.assertEq(null, seen); |
| 442 seen = 'send'; |
| 443 })); |
| 444 sender.cancel(3).then(test.callbackPass(function() { |
| 445 test.assertEq('send', seen); |
| 446 seen = 'cancel'; |
| 447 })); |
| 448 serializeRoundTrip(sender).then(test.callbackPass(function(sender) { |
| 449 test.assertEq('cancel', seen); |
| 450 seen = 'serialized'; |
| 451 sender.close(); |
| 452 })); |
| 453 })); |
| 454 }, |
| 455 |
218 ], test.runTests, exports); | 456 ], test.runTests, exports); |
OLD | NEW |