Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / mojo / apps / js / test / js_to_cpp_unittest.js
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/apps/js/test/js_to_cpp_unittest", [
6     "mojo/apps/js/test/js_to_cpp.mojom",
7     "mojo/public/js/bindings/connection",
8     "mojo/public/js/bindings/connector",
9     "mojo/public/js/bindings/core",
10 ], function (jsToCpp, connection, connector, core) {
11   var retainedConnection;
12   var BAD_VALUE = 13;
13   var DATA_PIPE_PARAMS = {
14     flags: core.CREATE_DATA_PIPE_OPTIONS_FLAG_NONE,
15     elementNumBytes: 1,
16     capacityNumBytes: 64
17   };
18
19   function JsSideConnection(cppSide) {
20     this.cppSide_ = cppSide;
21     cppSide.startTest();
22   }
23
24   JsSideConnection.prototype = Object.create(jsToCpp.JsSideStub.prototype);
25
26   JsSideConnection.prototype.ping = function (arg) {
27     this.cppSide_.pingResponse();
28   };
29
30   JsSideConnection.prototype.echo = function (numIterations, arg) {
31     var arg2;
32     var data_pipe1;
33     var data_pipe2;
34     var i;
35     var message_pipe1;
36     var message_pipe2;
37
38     // Ensure expected negative values are negative.
39     if (arg.si64 > 0)
40       arg.si64 = BAD_VALUE;
41
42     if (arg.si32 > 0)
43       arg.si32 = BAD_VALUE;
44
45     if (arg.si16 > 0)
46       arg.si16 = BAD_VALUE;
47
48     if (arg.si8 > 0)
49       arg.si8 = BAD_VALUE;
50
51     for (i = 0; i < numIterations; ++i) {
52       data_pipe1 = core.createDataPipe(DATA_PIPE_PARAMS);
53       data_pipe2 = core.createDataPipe(DATA_PIPE_PARAMS);
54       message_pipe1 = core.createMessagePipe();
55       message_pipe2 = core.createMessagePipe();
56
57       arg.data_handle = data_pipe1.consumerHandle;
58       arg.message_handle = message_pipe1.handle1;
59
60       arg2 = new jsToCpp.EchoArgs();
61       arg2.si64 = -1;
62       arg2.si32 = -1;
63       arg2.si16 = -1;
64       arg2.si8 = -1;
65       arg2.name = "going";
66       arg2.data_handle = data_pipe2.consumerHandle;
67       arg2.message_handle = message_pipe2.handle1;
68
69       this.cppSide_.echoResponse(arg, arg2);
70
71       core.close(data_pipe1.producerHandle);
72       core.close(data_pipe2.producerHandle);
73       core.close(message_pipe1.handle0);
74       core.close(message_pipe2.handle0);
75     }
76     this.cppSide_.testFinished();
77   };
78
79   JsSideConnection.prototype.bitFlip = function (arg) {
80     var iteration = 0;
81     var data_pipe;
82     var message_pipe;
83     var stopSignalled = false;
84     var proto = connector.Connector.prototype;
85     proto.realAccept = proto.accept;
86     proto.accept = function (message) {
87       var offset = iteration / 8;
88       var mask;
89       var value;
90       if (offset < message.buffer.arrayBuffer.byteLength) {
91         mask = 1 << (iteration % 8);
92         value = message.buffer.dataView.getUint8(offset) ^ mask;
93         message.buffer.dataView.setUint8(offset, value);
94         return this.realAccept(message);
95       }
96       stopSignalled = true;
97       return false;
98     };
99     while (!stopSignalled) {
100       data_pipe = core.createDataPipe(DATA_PIPE_PARAMS);
101       message_pipe = core.createMessagePipe();
102       arg.data_handle = data_pipe.consumerHandle;
103       arg.message_handle = message_pipe.handle1;
104       this.cppSide_.bitFlipResponse(arg);
105       core.close(data_pipe.producerHandle);
106       core.close(message_pipe.handle0);
107       iteration += 1;
108     }
109     proto.accept = proto.realAccept;
110     proto.realAccept = null;
111     this.cppSide_.testFinished();
112   };
113
114   return function(handle) {
115     retainedConnection = new connection.Connection(handle, JsSideConnection,
116                                                    jsToCpp.CppSideProxy);
117   };
118 });