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 #include "base/at_exit.h" | 5 #include "base/at_exit.h" |
6 #include "base/files/file_path.h" | 6 #include "base/files/file_path.h" |
7 #include "base/files/file_util.h" | 7 #include "base/files/file_util.h" |
8 #include "base/macros.h" | 8 #include "base/macros.h" |
9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
205 // Base Provider implementation class. It's expected that tests subclass and | 205 // Base Provider implementation class. It's expected that tests subclass and |
206 // override the appropriate Provider functions. When test is done quit the | 206 // override the appropriate Provider functions. When test is done quit the |
207 // run_loop(). | 207 // run_loop(). |
208 class CppSideConnection : public js_to_cpp::CppSide { | 208 class CppSideConnection : public js_to_cpp::CppSide { |
209 public: | 209 public: |
210 CppSideConnection() : | 210 CppSideConnection() : |
211 run_loop_(NULL), | 211 run_loop_(NULL), |
212 js_side_(NULL), | 212 js_side_(NULL), |
213 mishandled_messages_(0) { | 213 mishandled_messages_(0) { |
214 } | 214 } |
215 virtual ~CppSideConnection() {} | 215 ~CppSideConnection() override {} |
216 | 216 |
217 void set_run_loop(base::RunLoop* run_loop) { run_loop_ = run_loop; } | 217 void set_run_loop(base::RunLoop* run_loop) { run_loop_ = run_loop; } |
218 base::RunLoop* run_loop() { return run_loop_; } | 218 base::RunLoop* run_loop() { return run_loop_; } |
219 | 219 |
220 void set_js_side(js_to_cpp::JsSide* js_side) { js_side_ = js_side; } | 220 void set_js_side(js_to_cpp::JsSide* js_side) { js_side_ = js_side; } |
221 js_to_cpp::JsSide* js_side() { return js_side_; } | 221 js_to_cpp::JsSide* js_side() { return js_side_; } |
222 | 222 |
223 // js_to_cpp::CppSide: | 223 // js_to_cpp::CppSide: |
224 virtual void StartTest() override { | 224 void StartTest() override { NOTREACHED(); } |
225 NOTREACHED(); | |
226 } | |
227 | 225 |
228 virtual void TestFinished() override { | 226 void TestFinished() override { NOTREACHED(); } |
229 NOTREACHED(); | |
230 } | |
231 | 227 |
232 virtual void PingResponse() override { | 228 void PingResponse() override { mishandled_messages_ += 1; } |
| 229 |
| 230 void EchoResponse(js_to_cpp::EchoArgsListPtr list) override { |
233 mishandled_messages_ += 1; | 231 mishandled_messages_ += 1; |
234 } | 232 } |
235 | 233 |
236 virtual void EchoResponse(js_to_cpp::EchoArgsListPtr list) override { | 234 void BitFlipResponse(js_to_cpp::EchoArgsListPtr list) override { |
237 mishandled_messages_ += 1; | 235 mishandled_messages_ += 1; |
238 } | 236 } |
239 | 237 |
240 virtual void BitFlipResponse(js_to_cpp::EchoArgsListPtr list) override { | 238 void BackPointerResponse(js_to_cpp::EchoArgsListPtr list) override { |
241 mishandled_messages_ += 1; | 239 mishandled_messages_ += 1; |
242 } | 240 } |
243 | 241 |
244 virtual void BackPointerResponse( | |
245 js_to_cpp::EchoArgsListPtr list) override { | |
246 mishandled_messages_ += 1; | |
247 } | |
248 | |
249 protected: | 242 protected: |
250 base::RunLoop* run_loop_; | 243 base::RunLoop* run_loop_; |
251 js_to_cpp::JsSide* js_side_; | 244 js_to_cpp::JsSide* js_side_; |
252 int mishandled_messages_; | 245 int mishandled_messages_; |
253 | 246 |
254 private: | 247 private: |
255 DISALLOW_COPY_AND_ASSIGN(CppSideConnection); | 248 DISALLOW_COPY_AND_ASSIGN(CppSideConnection); |
256 }; | 249 }; |
257 | 250 |
258 // Trivial test to verify a message sent from JS is received. | 251 // Trivial test to verify a message sent from JS is received. |
259 class PingCppSideConnection : public CppSideConnection { | 252 class PingCppSideConnection : public CppSideConnection { |
260 public: | 253 public: |
261 PingCppSideConnection() : got_message_(false) {} | 254 PingCppSideConnection() : got_message_(false) {} |
262 virtual ~PingCppSideConnection() {} | 255 ~PingCppSideConnection() override {} |
263 | 256 |
264 // js_to_cpp::CppSide: | 257 // js_to_cpp::CppSide: |
265 virtual void StartTest() override { | 258 void StartTest() override { js_side_->Ping(); } |
266 js_side_->Ping(); | |
267 } | |
268 | 259 |
269 virtual void PingResponse() override { | 260 void PingResponse() override { |
270 got_message_ = true; | 261 got_message_ = true; |
271 run_loop()->Quit(); | 262 run_loop()->Quit(); |
272 } | 263 } |
273 | 264 |
274 bool DidSucceed() { | 265 bool DidSucceed() { |
275 return got_message_ && !mishandled_messages_; | 266 return got_message_ && !mishandled_messages_; |
276 } | 267 } |
277 | 268 |
278 private: | 269 private: |
279 bool got_message_; | 270 bool got_message_; |
280 DISALLOW_COPY_AND_ASSIGN(PingCppSideConnection); | 271 DISALLOW_COPY_AND_ASSIGN(PingCppSideConnection); |
281 }; | 272 }; |
282 | 273 |
283 // Test that parameters are passed with correct values. | 274 // Test that parameters are passed with correct values. |
284 class EchoCppSideConnection : public CppSideConnection { | 275 class EchoCppSideConnection : public CppSideConnection { |
285 public: | 276 public: |
286 EchoCppSideConnection() : | 277 EchoCppSideConnection() : |
287 message_count_(0), | 278 message_count_(0), |
288 termination_seen_(false) { | 279 termination_seen_(false) { |
289 } | 280 } |
290 virtual ~EchoCppSideConnection() {} | 281 ~EchoCppSideConnection() override {} |
291 | 282 |
292 // js_to_cpp::CppSide: | 283 // js_to_cpp::CppSide: |
293 virtual void StartTest() override { | 284 void StartTest() override { |
294 js_side_->Echo(kExpectedMessageCount, BuildSampleEchoArgs()); | 285 js_side_->Echo(kExpectedMessageCount, BuildSampleEchoArgs()); |
295 } | 286 } |
296 | 287 |
297 virtual void EchoResponse(js_to_cpp::EchoArgsListPtr list) override { | 288 void EchoResponse(js_to_cpp::EchoArgsListPtr list) override { |
298 const js_to_cpp::EchoArgsPtr& special_arg = list->item; | 289 const js_to_cpp::EchoArgsPtr& special_arg = list->item; |
299 message_count_ += 1; | 290 message_count_ += 1; |
300 EXPECT_EQ(-1, special_arg->si64); | 291 EXPECT_EQ(-1, special_arg->si64); |
301 EXPECT_EQ(-1, special_arg->si32); | 292 EXPECT_EQ(-1, special_arg->si32); |
302 EXPECT_EQ(-1, special_arg->si16); | 293 EXPECT_EQ(-1, special_arg->si16); |
303 EXPECT_EQ(-1, special_arg->si8); | 294 EXPECT_EQ(-1, special_arg->si8); |
304 EXPECT_EQ(std::string("going"), special_arg->name.To<std::string>()); | 295 EXPECT_EQ(std::string("going"), special_arg->name.To<std::string>()); |
305 CheckSampleEchoArgsList(list->next); | 296 CheckSampleEchoArgsList(list->next); |
306 } | 297 } |
307 | 298 |
308 virtual void TestFinished() override { | 299 void TestFinished() override { |
309 termination_seen_ = true; | 300 termination_seen_ = true; |
310 run_loop()->Quit(); | 301 run_loop()->Quit(); |
311 } | 302 } |
312 | 303 |
313 bool DidSucceed() { | 304 bool DidSucceed() { |
314 return termination_seen_ && | 305 return termination_seen_ && |
315 !mishandled_messages_ && | 306 !mishandled_messages_ && |
316 message_count_ == kExpectedMessageCount; | 307 message_count_ == kExpectedMessageCount; |
317 } | 308 } |
318 | 309 |
319 private: | 310 private: |
320 static const int kExpectedMessageCount = 10; | 311 static const int kExpectedMessageCount = 10; |
321 int message_count_; | 312 int message_count_; |
322 bool termination_seen_; | 313 bool termination_seen_; |
323 DISALLOW_COPY_AND_ASSIGN(EchoCppSideConnection); | 314 DISALLOW_COPY_AND_ASSIGN(EchoCppSideConnection); |
324 }; | 315 }; |
325 | 316 |
326 // Test that corrupted messages don't wreak havoc. | 317 // Test that corrupted messages don't wreak havoc. |
327 class BitFlipCppSideConnection : public CppSideConnection { | 318 class BitFlipCppSideConnection : public CppSideConnection { |
328 public: | 319 public: |
329 BitFlipCppSideConnection() : termination_seen_(false) {} | 320 BitFlipCppSideConnection() : termination_seen_(false) {} |
330 virtual ~BitFlipCppSideConnection() {} | 321 ~BitFlipCppSideConnection() override {} |
331 | 322 |
332 // js_to_cpp::CppSide: | 323 // js_to_cpp::CppSide: |
333 virtual void StartTest() override { | 324 void StartTest() override { js_side_->BitFlip(BuildSampleEchoArgs()); } |
334 js_side_->BitFlip(BuildSampleEchoArgs()); | |
335 } | |
336 | 325 |
337 virtual void BitFlipResponse(js_to_cpp::EchoArgsListPtr list) override { | 326 void BitFlipResponse(js_to_cpp::EchoArgsListPtr list) override { |
338 CheckCorruptedEchoArgsList(list); | 327 CheckCorruptedEchoArgsList(list); |
339 } | 328 } |
340 | 329 |
341 virtual void TestFinished() override { | 330 void TestFinished() override { |
342 termination_seen_ = true; | 331 termination_seen_ = true; |
343 run_loop()->Quit(); | 332 run_loop()->Quit(); |
344 } | 333 } |
345 | 334 |
346 bool DidSucceed() { | 335 bool DidSucceed() { |
347 return termination_seen_; | 336 return termination_seen_; |
348 } | 337 } |
349 | 338 |
350 private: | 339 private: |
351 bool termination_seen_; | 340 bool termination_seen_; |
352 DISALLOW_COPY_AND_ASSIGN(BitFlipCppSideConnection); | 341 DISALLOW_COPY_AND_ASSIGN(BitFlipCppSideConnection); |
353 }; | 342 }; |
354 | 343 |
355 // Test that severely random messages don't wreak havoc. | 344 // Test that severely random messages don't wreak havoc. |
356 class BackPointerCppSideConnection : public CppSideConnection { | 345 class BackPointerCppSideConnection : public CppSideConnection { |
357 public: | 346 public: |
358 BackPointerCppSideConnection() : termination_seen_(false) {} | 347 BackPointerCppSideConnection() : termination_seen_(false) {} |
359 virtual ~BackPointerCppSideConnection() {} | 348 ~BackPointerCppSideConnection() override {} |
360 | 349 |
361 // js_to_cpp::CppSide: | 350 // js_to_cpp::CppSide: |
362 virtual void StartTest() override { | 351 void StartTest() override { js_side_->BackPointer(BuildSampleEchoArgs()); } |
363 js_side_->BackPointer(BuildSampleEchoArgs()); | |
364 } | |
365 | 352 |
366 virtual void BackPointerResponse( | 353 void BackPointerResponse(js_to_cpp::EchoArgsListPtr list) override { |
367 js_to_cpp::EchoArgsListPtr list) override { | |
368 CheckCorruptedEchoArgsList(list); | 354 CheckCorruptedEchoArgsList(list); |
369 } | 355 } |
370 | 356 |
371 virtual void TestFinished() override { | 357 void TestFinished() override { |
372 termination_seen_ = true; | 358 termination_seen_ = true; |
373 run_loop()->Quit(); | 359 run_loop()->Quit(); |
374 } | 360 } |
375 | 361 |
376 bool DidSucceed() { | 362 bool DidSucceed() { |
377 return termination_seen_; | 363 return termination_seen_; |
378 } | 364 } |
379 | 365 |
380 private: | 366 private: |
381 bool termination_seen_; | 367 bool termination_seen_; |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
449 if (IsRunningOnIsolatedBot()) | 435 if (IsRunningOnIsolatedBot()) |
450 return; | 436 return; |
451 | 437 |
452 BackPointerCppSideConnection cpp_side_connection; | 438 BackPointerCppSideConnection cpp_side_connection; |
453 RunTest("mojo/apps/js/test/js_to_cpp_unittest", &cpp_side_connection); | 439 RunTest("mojo/apps/js/test/js_to_cpp_unittest", &cpp_side_connection); |
454 EXPECT_TRUE(cpp_side_connection.DidSucceed()); | 440 EXPECT_TRUE(cpp_side_connection.DidSucceed()); |
455 } | 441 } |
456 | 442 |
457 } // namespace js | 443 } // namespace js |
458 } // namespace mojo | 444 } // namespace mojo |
OLD | NEW |