| Index: mojo/apps/js/test/js_to_cpp_unittest.js
|
| diff --git a/mojo/apps/js/test/js_to_cpp_unittest.js b/mojo/apps/js/test/js_to_cpp_unittest.js
|
| index 9ce456e70e5b9b85ba8c4f6b1e0aceb0f28a505a..976bd3ea4fe092f363caf8dc18e345657804a441 100644
|
| --- a/mojo/apps/js/test/js_to_cpp_unittest.js
|
| +++ b/mojo/apps/js/test/js_to_cpp_unittest.js
|
| @@ -29,14 +29,12 @@ define('mojo/apps/js/test/js_to_cpp_unittest', [
|
| this.cppSide_.pingResponse();
|
| };
|
|
|
| - JsSideConnection.prototype.echo = function (numIterations, list) {
|
| - var arg = list.item;
|
| + JsSideConnection.prototype.echo = function (numIterations, arg) {
|
| var dataPipe1;
|
| var dataPipe2;
|
| var i;
|
| var messagePipe1;
|
| var messagePipe2;
|
| - var resultList;
|
| var specialArg;
|
|
|
| // Ensure expected negative values are negative.
|
| @@ -73,12 +71,7 @@ define('mojo/apps/js/test/js_to_cpp_unittest', [
|
| writeDataPipe(dataPipe1, senderData);
|
| writeDataPipe(dataPipe2, senderData);
|
|
|
| - resultList = new jsToCpp.EchoArgsList();
|
| - resultList.next = new jsToCpp.EchoArgsList();
|
| - resultList.item = specialArg;
|
| - resultList.next.item = arg;
|
| -
|
| - this.cppSide_.echoResponse(resultList);
|
| + this.cppSide_.echoResponse(createEchoArgsList(specialArg, arg));
|
|
|
| core.close(dataPipe1.producerHandle);
|
| core.close(dataPipe2.producerHandle);
|
| @@ -92,8 +85,9 @@ define('mojo/apps/js/test/js_to_cpp_unittest', [
|
| var iteration = 0;
|
| var dataPipe;
|
| var messagePipe;
|
| - var stopSignalled = false;
|
| var proto = connector.Connector.prototype;
|
| + var resultList;
|
| + var stopSignalled = false;
|
|
|
| proto.realAccept = proto.accept;
|
| proto.accept = function (message) {
|
| @@ -116,7 +110,46 @@ define('mojo/apps/js/test/js_to_cpp_unittest', [
|
| writeDataPipe(dataPipe, senderData);
|
| arg.data_handle = dataPipe.consumerHandle;
|
| arg.message_handle = messagePipe.handle1;
|
| - this.cppSide_.bitFlipResponse(arg);
|
| + resultList = createEchoArgsList(arg);
|
| + this.cppSide_.bitFlipResponse(resultList);
|
| + core.close(dataPipe.producerHandle);
|
| + core.close(messagePipe.handle0);
|
| + iteration += 1;
|
| + }
|
| +
|
| + proto.accept = proto.realAccept;
|
| + proto.realAccept = null;
|
| + this.cppSide_.testFinished();
|
| + };
|
| +
|
| + JsSideConnection.prototype.backPointer = function (arg) {
|
| + var iteration = 0;
|
| + var dataPipe;
|
| + var messagePipe;
|
| + var proto = connector.Connector.prototype;
|
| + var resultList = createEchoArgsList(arg);
|
| + var stopSignalled = false;
|
| +
|
| + proto.realAccept = proto.accept;
|
| + proto.accept = function (message) {
|
| + var delta = 8 * (1 + iteration % 32);
|
| + var offset = 8 * ((iteration / 32) | 0);
|
| + if (offset < message.buffer.arrayBuffer.byteLength - 4) {
|
| + message.buffer.dataView.setUint32(offset, 0x100000000 - delta, true);
|
| + message.buffer.dataView.setUint32(offset + 4, 0xffffffff, true);
|
| + return this.realAccept(message);
|
| + }
|
| + stopSignalled = true;
|
| + return false;
|
| + };
|
| +
|
| + while (!stopSignalled) {
|
| + dataPipe = core.createDataPipe(DATA_PIPE_PARAMS);
|
| + messagePipe = core.createMessagePipe();
|
| + writeDataPipe(dataPipe, senderData);
|
| + arg.data_handle = dataPipe.consumerHandle;
|
| + arg.message_handle = messagePipe.handle1;
|
| + this.cppSide_.backPointerResponse(resultList);
|
| core.close(dataPipe.producerHandle);
|
| core.close(messagePipe.handle0);
|
| iteration += 1;
|
| @@ -142,6 +175,20 @@ define('mojo/apps/js/test/js_to_cpp_unittest', [
|
| return true;
|
| }
|
|
|
| + function createEchoArgsListElement(item, next) {
|
| + var list = new jsToCpp.EchoArgsList();
|
| + list.item = item;
|
| + list.next = next;
|
| + return list;
|
| + }
|
| +
|
| + function createEchoArgsList() {
|
| + var genuineArray = Array.prototype.slice.call(arguments);
|
| + return genuineArray.reduceRight(function (previous, current) {
|
| + return createEchoArgsListElement(current, previous);
|
| + }, null);
|
| + }
|
| +
|
| return function(handle) {
|
| var i;
|
| senderData = new Uint8Array(DATA_PIPE_PARAMS.capacityNumBytes);
|
|
|