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

Side by Side Diff: mojo/apps/js/test/js_to_cpp_unittest.cc

Issue 265793015: Mojo: Replace RemotePtr with InterfacePtr and InterfaceImpl (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 7 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 | Annotate | Revision Log
OLDNEW
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 #include "base/file_util.h" 5 #include "base/file_util.h"
6 #include "base/files/file_path.h" 6 #include "base/files/file_path.h"
7 #include "base/message_loop/message_loop.h" 7 #include "base/message_loop/message_loop.h"
8 #include "base/run_loop.h" 8 #include "base/run_loop.h"
9 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
10 #include "gin/public/isolate_holder.h" 10 #include "gin/public/isolate_holder.h"
11 #include "mojo/apps/js/mojo_runner_delegate.h" 11 #include "mojo/apps/js/mojo_runner_delegate.h"
12 #include "mojo/apps/js/test/js_to_cpp.mojom.h" 12 #include "mojo/apps/js/test/js_to_cpp.mojom.h"
13 #include "mojo/common/common_type_converters.h" 13 #include "mojo/common/common_type_converters.h"
14 #include "mojo/common/test/test_utils.h" 14 #include "mojo/common/test/test_utils.h"
15 #include "mojo/public/cpp/bindings/allocation_scope.h" 15 #include "mojo/public/cpp/bindings/allocation_scope.h"
16 #include "mojo/public/cpp/bindings/remote_ptr.h"
17 #include "mojo/public/cpp/environment/environment.h" 16 #include "mojo/public/cpp/environment/environment.h"
18 #include "mojo/public/cpp/system/core.h" 17 #include "mojo/public/cpp/system/core.h"
19 #include "mojo/public/cpp/system/macros.h" 18 #include "mojo/public/cpp/system/macros.h"
20 #include "testing/gtest/include/gtest/gtest.h" 19 #include "testing/gtest/include/gtest/gtest.h"
21 20
22 namespace mojo { 21 namespace mojo {
23 namespace js { 22 namespace js {
24 namespace { 23 namespace {
25 24
26 // Negative numbers with different values in each byte, the last of 25 // Negative numbers with different values in each byte, the last of
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 EXPECT_EQ(std::string("one"), arg.string_array()[0].To<std::string>()); 106 EXPECT_EQ(std::string("one"), arg.string_array()[0].To<std::string>());
108 EXPECT_EQ(std::string("two"), arg.string_array()[1].To<std::string>()); 107 EXPECT_EQ(std::string("two"), arg.string_array()[1].To<std::string>());
109 EXPECT_EQ(std::string("three"), arg.string_array()[2].To<std::string>()); 108 EXPECT_EQ(std::string("three"), arg.string_array()[2].To<std::string>());
110 } 109 }
111 110
112 // Base Provider implementation class. It's expected that tests subclass and 111 // Base Provider implementation class. It's expected that tests subclass and
113 // override the appropriate Provider functions. When test is done quit the 112 // override the appropriate Provider functions. When test is done quit the
114 // run_loop(). 113 // run_loop().
115 class CppSideConnection : public js_to_cpp::CppSide { 114 class CppSideConnection : public js_to_cpp::CppSide {
116 public: 115 public:
117 CppSideConnection() : run_loop_(NULL), client_(NULL) { 116 CppSideConnection() : run_loop_(NULL), js_side_(NULL) {
118 } 117 }
119 virtual ~CppSideConnection() {} 118 virtual ~CppSideConnection() {}
120 119
121 void set_run_loop(base::RunLoop* run_loop) { run_loop_ = run_loop; } 120 void set_run_loop(base::RunLoop* run_loop) { run_loop_ = run_loop; }
122 base::RunLoop* run_loop() { return run_loop_; } 121 base::RunLoop* run_loop() { return run_loop_; }
123 122
124 void set_client(js_to_cpp::JsSide* client) { client_ = client; } 123 void set_js_side(js_to_cpp::JsSide* js_side) { js_side_ = js_side; }
125 js_to_cpp::JsSide* client() { return client_; } 124 js_to_cpp::JsSide* js_side() { return js_side_; }
126 125
127 // js_to_cpp::CppSide: 126 // js_to_cpp::CppSide:
128 virtual void StartTest() OVERRIDE { 127 virtual void StartTest() OVERRIDE {
129 NOTREACHED(); 128 NOTREACHED();
130 } 129 }
131 130
132 virtual void TestFinished() OVERRIDE { 131 virtual void TestFinished() OVERRIDE {
133 NOTREACHED(); 132 NOTREACHED();
134 } 133 }
135 134
136 virtual void PingResponse() OVERRIDE { 135 virtual void PingResponse() OVERRIDE {
137 NOTREACHED(); 136 NOTREACHED();
138 } 137 }
139 138
140 virtual void EchoResponse(const js_to_cpp::EchoArgs& arg1, 139 virtual void EchoResponse(const js_to_cpp::EchoArgs& arg1,
141 const js_to_cpp::EchoArgs& arg2) OVERRIDE { 140 const js_to_cpp::EchoArgs& arg2) OVERRIDE {
142 NOTREACHED(); 141 NOTREACHED();
143 } 142 }
144 143
145 virtual void BitFlipResponse(const js_to_cpp::EchoArgs& arg1) OVERRIDE { 144 virtual void BitFlipResponse(const js_to_cpp::EchoArgs& arg1) OVERRIDE {
146 NOTREACHED(); 145 NOTREACHED();
147 } 146 }
148 147
149 protected: 148 protected:
150 base::RunLoop* run_loop_; 149 base::RunLoop* run_loop_;
151 js_to_cpp::JsSide* client_; 150 js_to_cpp::JsSide* js_side_;
152 151
153 private: 152 private:
154 Environment environment; 153 Environment environment;
155 DISALLOW_COPY_AND_ASSIGN(CppSideConnection); 154 DISALLOW_COPY_AND_ASSIGN(CppSideConnection);
156 }; 155 };
157 156
158 // Trivial test to verify a message sent from JS is received. 157 // Trivial test to verify a message sent from JS is received.
159 class PingCppSideConnection : public CppSideConnection { 158 class PingCppSideConnection : public CppSideConnection {
160 public: 159 public:
161 explicit PingCppSideConnection() : got_message_(false) {} 160 explicit PingCppSideConnection() : got_message_(false) {}
162 virtual ~PingCppSideConnection() {} 161 virtual ~PingCppSideConnection() {}
163 162
164 // js_to_cpp::CppSide: 163 // js_to_cpp::CppSide:
165 virtual void StartTest() OVERRIDE { 164 virtual void StartTest() OVERRIDE {
166 client_->Ping(); 165 js_side_->Ping();
167 } 166 }
168 167
169 virtual void PingResponse() OVERRIDE { 168 virtual void PingResponse() OVERRIDE {
170 got_message_ = true; 169 got_message_ = true;
171 run_loop()->Quit(); 170 run_loop()->Quit();
172 } 171 }
173 172
174 bool DidSucceed() { 173 bool DidSucceed() {
175 return got_message_; 174 return got_message_;
176 } 175 }
177 176
178 private: 177 private:
179 bool got_message_; 178 bool got_message_;
180 DISALLOW_COPY_AND_ASSIGN(PingCppSideConnection); 179 DISALLOW_COPY_AND_ASSIGN(PingCppSideConnection);
181 }; 180 };
182 181
183 // Test that parameters are passed with correct values. 182 // Test that parameters are passed with correct values.
184 class EchoCppSideConnection : public CppSideConnection { 183 class EchoCppSideConnection : public CppSideConnection {
185 public: 184 public:
186 explicit EchoCppSideConnection() : 185 explicit EchoCppSideConnection() :
187 message_count_(0), 186 message_count_(0),
188 termination_seen_(false) { 187 termination_seen_(false) {
189 } 188 }
190 virtual ~EchoCppSideConnection() {} 189 virtual ~EchoCppSideConnection() {}
191 190
192 // js_to_cpp::CppSide: 191 // js_to_cpp::CppSide:
193 virtual void StartTest() OVERRIDE { 192 virtual void StartTest() OVERRIDE {
194 AllocationScope scope; 193 AllocationScope scope;
195 client_->Echo(kExpectedMessageCount, BuildSampleEchoArgs()); 194 js_side_->Echo(kExpectedMessageCount, BuildSampleEchoArgs());
196 } 195 }
197 196
198 virtual void EchoResponse(const js_to_cpp::EchoArgs& arg1, 197 virtual void EchoResponse(const js_to_cpp::EchoArgs& arg1,
199 const js_to_cpp::EchoArgs& arg2) OVERRIDE { 198 const js_to_cpp::EchoArgs& arg2) OVERRIDE {
200 message_count_ += 1; 199 message_count_ += 1;
201 CheckSampleEchoArgs(arg1); 200 CheckSampleEchoArgs(arg1);
202 EXPECT_EQ(-1, arg2.si64()); 201 EXPECT_EQ(-1, arg2.si64());
203 EXPECT_EQ(-1, arg2.si32()); 202 EXPECT_EQ(-1, arg2.si32());
204 EXPECT_EQ(-1, arg2.si16()); 203 EXPECT_EQ(-1, arg2.si16());
205 EXPECT_EQ(-1, arg2.si8()); 204 EXPECT_EQ(-1, arg2.si8());
(...skipping 18 matching lines...) Expand all
224 223
225 // Test that corrupted messages don't wreak havoc. 224 // Test that corrupted messages don't wreak havoc.
226 class BitFlipCppSideConnection : public CppSideConnection { 225 class BitFlipCppSideConnection : public CppSideConnection {
227 public: 226 public:
228 explicit BitFlipCppSideConnection() : termination_seen_(false) {} 227 explicit BitFlipCppSideConnection() : termination_seen_(false) {}
229 virtual ~BitFlipCppSideConnection() {} 228 virtual ~BitFlipCppSideConnection() {}
230 229
231 // js_to_cpp::CppSide: 230 // js_to_cpp::CppSide:
232 virtual void StartTest() OVERRIDE { 231 virtual void StartTest() OVERRIDE {
233 AllocationScope scope; 232 AllocationScope scope;
234 client_->BitFlip(BuildSampleEchoArgs()); 233 js_side_->BitFlip(BuildSampleEchoArgs());
235 } 234 }
236 235
237 virtual void BitFlipResponse(const js_to_cpp::EchoArgs& arg1) OVERRIDE { 236 virtual void BitFlipResponse(const js_to_cpp::EchoArgs& arg1) OVERRIDE {
238 // TODO(tsepez): How to check, may be corrupt in various ways. 237 // TODO(tsepez): How to check, may be corrupt in various ways.
239 } 238 }
240 239
241 virtual void TestFinished() OVERRIDE { 240 virtual void TestFinished() OVERRIDE {
242 termination_seen_ = true; 241 termination_seen_ = true;
243 run_loop()->Quit(); 242 run_loop()->Quit();
244 } 243 }
245 244
246 bool DidSucceed() { 245 bool DidSucceed() {
247 return termination_seen_; 246 return termination_seen_;
248 } 247 }
249 248
250 private: 249 private:
251 bool termination_seen_; 250 bool termination_seen_;
252 DISALLOW_COPY_AND_ASSIGN(BitFlipCppSideConnection); 251 DISALLOW_COPY_AND_ASSIGN(BitFlipCppSideConnection);
253 }; 252 };
254 253
255 } // namespace 254 } // namespace
256 255
257 class JsToCppTest : public testing::Test { 256 class JsToCppTest : public testing::Test {
258 public: 257 public:
259 JsToCppTest() {} 258 JsToCppTest() {}
260 259
261 void RunTest(const std::string& test, CppSideConnection* cpp_side) { 260 void RunTest(const std::string& test, CppSideConnection* cpp_side) {
262 cpp_side->set_run_loop(&run_loop_); 261 cpp_side->set_run_loop(&run_loop_);
263 InterfacePipe<js_to_cpp::CppSide, js_to_cpp::JsSide> pipe; 262
264 RemotePtr<js_to_cpp::JsSide> js_side; 263 MessagePipe pipe;
265 js_side.reset(pipe.handle_to_peer.Pass(), cpp_side); 264 js_to_cpp::JsSidePtr js_side =
266 js_side.router_for_testing()-> 265 MakeProxy<js_to_cpp::JsSide>(pipe.handle0.Pass());
266 js_side->SetClient(cpp_side);
267
268 js_side.internal_state()->router()->
267 set_enforce_errors_from_incoming_receiver(false); 269 set_enforce_errors_from_incoming_receiver(false);
268 cpp_side->set_client(js_side.get()); 270
271 cpp_side->set_js_side(js_side.get());
269 272
270 gin::IsolateHolder instance(gin::IsolateHolder::kStrictMode); 273 gin::IsolateHolder instance(gin::IsolateHolder::kStrictMode);
271 apps::MojoRunnerDelegate delegate; 274 apps::MojoRunnerDelegate delegate;
272 gin::ShellRunner runner(&delegate, instance.isolate()); 275 gin::ShellRunner runner(&delegate, instance.isolate());
273 delegate.Start(&runner, pipe.handle_to_self.release().value(), 276 delegate.Start(&runner, pipe.handle1.release().value(), test);
274 test);
275 277
276 run_loop_.Run(); 278 run_loop_.Run();
277 } 279 }
278 280
279 private: 281 private:
280 base::MessageLoop loop; 282 base::MessageLoop loop;
281 base::RunLoop run_loop_; 283 base::RunLoop run_loop_;
282 284
283 DISALLOW_COPY_AND_ASSIGN(JsToCppTest); 285 DISALLOW_COPY_AND_ASSIGN(JsToCppTest);
284 }; 286 };
(...skipping 21 matching lines...) Expand all
306 if (IsRunningOnIsolatedBot()) 308 if (IsRunningOnIsolatedBot())
307 return; 309 return;
308 310
309 BitFlipCppSideConnection cpp_side_connection; 311 BitFlipCppSideConnection cpp_side_connection;
310 RunTest("mojo/apps/js/test/js_to_cpp_unittest", &cpp_side_connection); 312 RunTest("mojo/apps/js/test/js_to_cpp_unittest", &cpp_side_connection);
311 EXPECT_TRUE(cpp_side_connection.DidSucceed()); 313 EXPECT_TRUE(cpp_side_connection.DidSucceed());
312 } 314 }
313 315
314 } // namespace js 316 } // namespace js
315 } // namespace mojo 317 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698