Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(79)

Side by Side Diff: mojo/edk/js/tests/js_to_cpp_tests.js

Issue 2920383004: Reland of Moves mojo_js_integration_tests into blink. (Closed)
Patch Set: Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « mojo/edk/js/tests/js_to_cpp_tests.cc ('k') | testing/buildbot/chromium.linux.json » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 define('mojo/edk/js/tests/js_to_cpp_tests', [
6 'console',
7 'mojo/edk/js/tests/js_to_cpp.mojom',
8 'mojo/public/js/bindings',
9 'mojo/public/js/connector',
10 'mojo/public/js/core',
11 ], function (console, jsToCpp, bindings, connector, core) {
12 var retainedJsSide;
13 var retainedJsSideStub;
14 var sampleData;
15 var sampleMessage;
16 var BAD_VALUE = 13;
17 var DATA_PIPE_PARAMS = {
18 flags: core.CREATE_DATA_PIPE_OPTIONS_FLAG_NONE,
19 elementNumBytes: 1,
20 capacityNumBytes: 64
21 };
22
23 function JsSideConnection() {
24 this.binding = new bindings.Binding(jsToCpp.JsSide, this);
25 }
26
27 JsSideConnection.prototype.setCppSide = function(cppSide) {
28 this.cppSide_ = cppSide;
29 this.cppSide_.startTest();
30 };
31
32 JsSideConnection.prototype.ping = function (arg) {
33 this.cppSide_.pingResponse();
34 };
35
36 JsSideConnection.prototype.echo = function (numIterations, arg) {
37 var dataPipe1;
38 var dataPipe2;
39 var i;
40 var messagePipe1;
41 var messagePipe2;
42 var specialArg;
43
44 // Ensure expected negative values are negative.
45 if (arg.si64 > 0)
46 arg.si64 = BAD_VALUE;
47
48 if (arg.si32 > 0)
49 arg.si32 = BAD_VALUE;
50
51 if (arg.si16 > 0)
52 arg.si16 = BAD_VALUE;
53
54 if (arg.si8 > 0)
55 arg.si8 = BAD_VALUE;
56
57 for (i = 0; i < numIterations; ++i) {
58 dataPipe1 = core.createDataPipe(DATA_PIPE_PARAMS);
59 dataPipe2 = core.createDataPipe(DATA_PIPE_PARAMS);
60 messagePipe1 = core.createMessagePipe();
61 messagePipe2 = core.createMessagePipe();
62
63 arg.data_handle = dataPipe1.consumerHandle;
64 arg.message_handle = messagePipe1.handle1;
65
66 specialArg = new jsToCpp.EchoArgs();
67 specialArg.si64 = -1;
68 specialArg.si32 = -1;
69 specialArg.si16 = -1;
70 specialArg.si8 = -1;
71 specialArg.name = 'going';
72 specialArg.data_handle = dataPipe2.consumerHandle;
73 specialArg.message_handle = messagePipe2.handle1;
74
75 writeDataPipe(dataPipe1, sampleData);
76 writeDataPipe(dataPipe2, sampleData);
77 writeMessagePipe(messagePipe1, sampleMessage);
78 writeMessagePipe(messagePipe2, sampleMessage);
79
80 this.cppSide_.echoResponse(createEchoArgsList(specialArg, arg));
81
82 core.close(dataPipe1.producerHandle);
83 core.close(dataPipe2.producerHandle);
84 core.close(messagePipe1.handle0);
85 core.close(messagePipe2.handle0);
86 }
87 this.cppSide_.testFinished();
88 };
89
90 JsSideConnection.prototype.bitFlip = function (arg) {
91 var iteration = 0;
92 var dataPipe;
93 var messagePipe;
94 var proto = connector.Connector.prototype;
95 var stopSignalled = false;
96
97 proto.realAccept = proto.accept;
98 proto.accept = function (message) {
99 var offset = iteration / 8;
100 var mask;
101 var value;
102 if (offset < message.buffer.arrayBuffer.byteLength) {
103 mask = 1 << (iteration % 8);
104 value = message.buffer.getUint8(offset) ^ mask;
105 message.buffer.setUint8(offset, value);
106 return this.realAccept(message);
107 }
108 stopSignalled = true;
109 return false;
110 };
111
112 while (!stopSignalled) {
113 messagePipe = core.createMessagePipe();
114 writeMessagePipe(messagePipe, sampleMessage);
115 arg.message_handle = messagePipe.handle1;
116
117 this.cppSide_.bitFlipResponse(createEchoArgsList(arg), null);
118
119 core.close(messagePipe.handle0);
120 iteration += 1;
121 }
122
123 proto.accept = proto.realAccept;
124 proto.realAccept = null;
125 this.cppSide_.testFinished();
126 };
127
128 JsSideConnection.prototype.backPointer = function (arg) {
129 var iteration = 0;
130 var dataPipe;
131 var messagePipe;
132 var proto = connector.Connector.prototype;
133 var stopSignalled = false;
134
135 proto.realAccept = proto.accept;
136 proto.accept = function (message) {
137 var delta = 8 * (1 + iteration % 32);
138 var offset = 8 * ((iteration / 32) | 0);
139 if (offset < message.buffer.arrayBuffer.byteLength - 4) {
140 message.buffer.dataView.setUint32(offset, 0x100000000 - delta, true);
141 message.buffer.dataView.setUint32(offset + 4, 0xffffffff, true);
142 return this.realAccept(message);
143 }
144 stopSignalled = true;
145 return false;
146 };
147
148 while (!stopSignalled) {
149 messagePipe = core.createMessagePipe();
150 writeMessagePipe(messagePipe, sampleMessage);
151 arg.message_handle = messagePipe.handle1;
152
153 this.cppSide_.backPointerResponse(createEchoArgsList(arg));
154
155 core.close(messagePipe.handle0);
156 iteration += 1;
157 }
158
159 proto.accept = proto.realAccept;
160 proto.realAccept = null;
161 this.cppSide_.testFinished();
162 };
163
164 function writeDataPipe(pipe, data) {
165 var writeResult = core.writeData(
166 pipe.producerHandle, data, core.WRITE_DATA_FLAG_ALL_OR_NONE);
167
168 if (writeResult.result != core.RESULT_OK) {
169 console.log('ERROR: Data pipe write result was ' + writeResult.result);
170 return false;
171 }
172 if (writeResult.numBytes != data.length) {
173 console.log('ERROR: Data pipe write length was ' + writeResult.numBytes);
174 return false;
175 }
176 return true;
177 }
178
179 function writeMessagePipe(pipe, arrayBuffer) {
180 var result = core.writeMessage(pipe.handle0, arrayBuffer, [], 0);
181 if (result != core.RESULT_OK) {
182 console.log('ERROR: Message pipe write result was ' + result);
183 return false;
184 }
185 return true;
186 }
187
188 function createEchoArgsListElement(item, next) {
189 var list = new jsToCpp.EchoArgsList();
190 list.item = item;
191 list.next = next;
192 return list;
193 }
194
195 function createEchoArgsList() {
196 var genuineArray = Array.prototype.slice.call(arguments);
197 return genuineArray.reduceRight(function (previous, current) {
198 return createEchoArgsListElement(current, previous);
199 }, null);
200 }
201
202 return function(jsSideRequestHandle) {
203 var i;
204 sampleData = new Uint8Array(DATA_PIPE_PARAMS.capacityNumBytes);
205 for (i = 0; i < sampleData.length; ++i) {
206 sampleData[i] = i;
207 }
208 sampleMessage = new Uint8Array(DATA_PIPE_PARAMS.capacityNumBytes);
209 for (i = 0; i < sampleMessage.length; ++i) {
210 sampleMessage[i] = 255 - i;
211 }
212 retainedJsSide = new JsSideConnection;
213 retainedJsSide.binding.bind(jsSideRequestHandle);
214 };
215 });
OLDNEW
« no previous file with comments | « mojo/edk/js/tests/js_to_cpp_tests.cc ('k') | testing/buildbot/chromium.linux.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698