| 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 |