| 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 define("mojo/apps/js/test/js_to_cpp_unittest", [ | 5 define('mojo/apps/js/test/js_to_cpp_unittest', [ |
| 6 "mojo/apps/js/test/js_to_cpp.mojom", | 6 'console', |
| 7 "mojo/public/js/bindings/connection", | 7 'mojo/apps/js/test/js_to_cpp.mojom', |
| 8 "mojo/public/js/bindings/connector", | 8 'mojo/public/js/bindings/connection', |
| 9 "mojo/public/js/bindings/core", | 9 'mojo/public/js/bindings/connector', |
| 10 ], function (jsToCpp, connection, connector, core) { | 10 'mojo/public/js/bindings/core', |
| 11 ], function (console, jsToCpp, connection, connector, core) { |
| 11 var retainedConnection; | 12 var retainedConnection; |
| 13 var senderData; |
| 12 var BAD_VALUE = 13; | 14 var BAD_VALUE = 13; |
| 13 var DATA_PIPE_PARAMS = { | 15 var DATA_PIPE_PARAMS = { |
| 14 flags: core.CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, | 16 flags: core.CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, |
| 15 elementNumBytes: 1, | 17 elementNumBytes: 1, |
| 16 capacityNumBytes: 64 | 18 capacityNumBytes: 64 |
| 17 }; | 19 }; |
| 18 | 20 |
| 19 function JsSideConnection(cppSide) { | 21 function JsSideConnection(cppSide) { |
| 20 this.cppSide_ = cppSide; | 22 this.cppSide_ = cppSide; |
| 21 cppSide.startTest(); | 23 cppSide.startTest(); |
| 22 } | 24 } |
| 23 | 25 |
| 24 JsSideConnection.prototype = Object.create(jsToCpp.JsSideStub.prototype); | 26 JsSideConnection.prototype = Object.create(jsToCpp.JsSideStub.prototype); |
| 25 | 27 |
| 26 JsSideConnection.prototype.ping = function (arg) { | 28 JsSideConnection.prototype.ping = function (arg) { |
| 27 this.cppSide_.pingResponse(); | 29 this.cppSide_.pingResponse(); |
| 28 }; | 30 }; |
| 29 | 31 |
| 30 JsSideConnection.prototype.echo = function (numIterations, arg) { | 32 JsSideConnection.prototype.echo = function (numIterations, arg) { |
| 31 var arg2; | 33 var arg2; |
| 32 var data_pipe1; | 34 var dataPipe1; |
| 33 var data_pipe2; | 35 var dataPipe2; |
| 34 var i; | 36 var i; |
| 35 var message_pipe1; | 37 var messagePipe1; |
| 36 var message_pipe2; | 38 var messagePipe2; |
| 37 | 39 |
| 38 // Ensure expected negative values are negative. | 40 // Ensure expected negative values are negative. |
| 39 if (arg.si64 > 0) | 41 if (arg.si64 > 0) |
| 40 arg.si64 = BAD_VALUE; | 42 arg.si64 = BAD_VALUE; |
| 41 | 43 |
| 42 if (arg.si32 > 0) | 44 if (arg.si32 > 0) |
| 43 arg.si32 = BAD_VALUE; | 45 arg.si32 = BAD_VALUE; |
| 44 | 46 |
| 45 if (arg.si16 > 0) | 47 if (arg.si16 > 0) |
| 46 arg.si16 = BAD_VALUE; | 48 arg.si16 = BAD_VALUE; |
| 47 | 49 |
| 48 if (arg.si8 > 0) | 50 if (arg.si8 > 0) |
| 49 arg.si8 = BAD_VALUE; | 51 arg.si8 = BAD_VALUE; |
| 50 | 52 |
| 51 for (i = 0; i < numIterations; ++i) { | 53 for (i = 0; i < numIterations; ++i) { |
| 52 data_pipe1 = core.createDataPipe(DATA_PIPE_PARAMS); | 54 dataPipe1 = core.createDataPipe(DATA_PIPE_PARAMS); |
| 53 data_pipe2 = core.createDataPipe(DATA_PIPE_PARAMS); | 55 dataPipe2 = core.createDataPipe(DATA_PIPE_PARAMS); |
| 54 message_pipe1 = core.createMessagePipe(); | 56 messagePipe1 = core.createMessagePipe(); |
| 55 message_pipe2 = core.createMessagePipe(); | 57 messagePipe2 = core.createMessagePipe(); |
| 56 | 58 |
| 57 arg.data_handle = data_pipe1.consumerHandle; | 59 arg.data_handle = dataPipe1.consumerHandle; |
| 58 arg.message_handle = message_pipe1.handle1; | 60 arg.message_handle = messagePipe1.handle1; |
| 59 | 61 |
| 60 arg2 = new jsToCpp.EchoArgs(); | 62 arg2 = new jsToCpp.EchoArgs(); |
| 61 arg2.si64 = -1; | 63 arg2.si64 = -1; |
| 62 arg2.si32 = -1; | 64 arg2.si32 = -1; |
| 63 arg2.si16 = -1; | 65 arg2.si16 = -1; |
| 64 arg2.si8 = -1; | 66 arg2.si8 = -1; |
| 65 arg2.name = "going"; | 67 arg2.name = 'going'; |
| 66 arg2.data_handle = data_pipe2.consumerHandle; | 68 arg2.data_handle = dataPipe2.consumerHandle; |
| 67 arg2.message_handle = message_pipe2.handle1; | 69 arg2.message_handle = messagePipe2.handle1; |
| 68 | 70 |
| 71 writeDataPipe(dataPipe1, senderData); |
| 72 writeDataPipe(dataPipe2, senderData); |
| 69 this.cppSide_.echoResponse(arg, arg2); | 73 this.cppSide_.echoResponse(arg, arg2); |
| 70 | 74 |
| 71 core.close(data_pipe1.producerHandle); | 75 core.close(dataPipe1.producerHandle); |
| 72 core.close(data_pipe2.producerHandle); | 76 core.close(dataPipe2.producerHandle); |
| 73 core.close(message_pipe1.handle0); | 77 core.close(messagePipe1.handle0); |
| 74 core.close(message_pipe2.handle0); | 78 core.close(messagePipe2.handle0); |
| 75 } | 79 } |
| 76 this.cppSide_.testFinished(); | 80 this.cppSide_.testFinished(); |
| 77 }; | 81 }; |
| 78 | 82 |
| 79 JsSideConnection.prototype.bitFlip = function (arg) { | 83 JsSideConnection.prototype.bitFlip = function (arg) { |
| 80 var iteration = 0; | 84 var iteration = 0; |
| 81 var data_pipe; | 85 var dataPipe; |
| 82 var message_pipe; | 86 var messagePipe; |
| 83 var stopSignalled = false; | 87 var stopSignalled = false; |
| 84 var proto = connector.Connector.prototype; | 88 var proto = connector.Connector.prototype; |
| 89 |
| 85 proto.realAccept = proto.accept; | 90 proto.realAccept = proto.accept; |
| 86 proto.accept = function (message) { | 91 proto.accept = function (message) { |
| 87 var offset = iteration / 8; | 92 var offset = iteration / 8; |
| 88 var mask; | 93 var mask; |
| 89 var value; | 94 var value; |
| 90 if (offset < message.buffer.arrayBuffer.byteLength) { | 95 if (offset < message.buffer.arrayBuffer.byteLength) { |
| 91 mask = 1 << (iteration % 8); | 96 mask = 1 << (iteration % 8); |
| 92 value = message.buffer.dataView.getUint8(offset) ^ mask; | 97 value = message.buffer.dataView.getUint8(offset) ^ mask; |
| 93 message.buffer.dataView.setUint8(offset, value); | 98 message.buffer.dataView.setUint8(offset, value); |
| 94 return this.realAccept(message); | 99 return this.realAccept(message); |
| 95 } | 100 } |
| 96 stopSignalled = true; | 101 stopSignalled = true; |
| 97 return false; | 102 return false; |
| 98 }; | 103 }; |
| 104 |
| 99 while (!stopSignalled) { | 105 while (!stopSignalled) { |
| 100 data_pipe = core.createDataPipe(DATA_PIPE_PARAMS); | 106 dataPipe = core.createDataPipe(DATA_PIPE_PARAMS); |
| 101 message_pipe = core.createMessagePipe(); | 107 messagePipe = core.createMessagePipe(); |
| 102 arg.data_handle = data_pipe.consumerHandle; | 108 writeDataPipe(dataPipe, senderData); |
| 103 arg.message_handle = message_pipe.handle1; | 109 arg.data_handle = dataPipe.consumerHandle; |
| 110 arg.message_handle = messagePipe.handle1; |
| 104 this.cppSide_.bitFlipResponse(arg); | 111 this.cppSide_.bitFlipResponse(arg); |
| 105 core.close(data_pipe.producerHandle); | 112 core.close(dataPipe.producerHandle); |
| 106 core.close(message_pipe.handle0); | 113 core.close(messagePipe.handle0); |
| 107 iteration += 1; | 114 iteration += 1; |
| 108 } | 115 } |
| 116 |
| 109 proto.accept = proto.realAccept; | 117 proto.accept = proto.realAccept; |
| 110 proto.realAccept = null; | 118 proto.realAccept = null; |
| 111 this.cppSide_.testFinished(); | 119 this.cppSide_.testFinished(); |
| 112 }; | 120 }; |
| 113 | 121 |
| 122 function writeDataPipe(pipe, data) { |
| 123 var writeResult = core.writeData( |
| 124 pipe.producerHandle, data, core.WRITE_DATA_FLAG_ALL_OR_NONE); |
| 125 |
| 126 if (writeResult.result != core.RESULT_OK) { |
| 127 console.log('ERROR: Write result was ' + writeResult.result); |
| 128 return false; |
| 129 } |
| 130 if (writeResult.numBytes != data.length) { |
| 131 console.log('ERROR: Write length was ' + writeResult.numBytes); |
| 132 return false; |
| 133 } |
| 134 return true; |
| 135 } |
| 136 |
| 114 return function(handle) { | 137 return function(handle) { |
| 138 var i; |
| 139 senderData = new Uint8Array(DATA_PIPE_PARAMS.capacityNumBytes); |
| 140 for (i = 0; i < senderData.length; ++i) |
| 141 senderData[i] = i; |
| 142 |
| 115 retainedConnection = new connection.Connection(handle, JsSideConnection, | 143 retainedConnection = new connection.Connection(handle, JsSideConnection, |
| 116 jsToCpp.CppSideProxy); | 144 jsToCpp.CppSideProxy); |
| 117 }; | 145 }; |
| 118 }); | 146 }); |
| OLD | NEW |