| Index: mojo/apps/js/test/js_to_cpp_unittest.cc
|
| diff --git a/mojo/apps/js/test/js_to_cpp_unittest.cc b/mojo/apps/js/test/js_to_cpp_unittest.cc
|
| index 64259df156faaf7c2b00c4229412aa2edda00162..5e2cc73b3b606297e5a6531254becea8ddc0bfbc 100644
|
| --- a/mojo/apps/js/test/js_to_cpp_unittest.cc
|
| +++ b/mojo/apps/js/test/js_to_cpp_unittest.cc
|
| @@ -126,12 +126,6 @@ void CheckSampleEchoArgs(const js_to_cpp::EchoArgs& arg) {
|
| CheckDataPipe(arg.data_handle().get().value());
|
| }
|
|
|
| -js_to_cpp::EchoArgsList BuildSampleEchoArgsList() {
|
| - js_to_cpp::EchoArgsList::Builder builder;
|
| - builder.set_item(BuildSampleEchoArgs());
|
| - return builder.Finish();
|
| -}
|
| -
|
| void CheckSampleEchoArgsList(const js_to_cpp::EchoArgsList& list) {
|
| if (list.is_null())
|
| return;
|
| @@ -154,6 +148,22 @@ void CheckCorruptedStringArray(const mojo::Array<mojo::String>& string_array) {
|
| CheckCorruptedString(string_array[i]);
|
| }
|
|
|
| +void CheckCorruptedEchoArgs(const js_to_cpp::EchoArgs& arg) {
|
| + if (arg.is_null())
|
| + return;
|
| + CheckCorruptedString(arg.name());
|
| + CheckCorruptedStringArray(arg.string_array());
|
| + if (arg.data_handle().is_valid())
|
| + CheckDataPipe(arg.data_handle().get().value());
|
| +}
|
| +
|
| +void CheckCorruptedEchoArgsList(const js_to_cpp::EchoArgsList& list) {
|
| + if (list.is_null())
|
| + return;
|
| + CheckCorruptedEchoArgs(list.item());
|
| + CheckCorruptedEchoArgsList(list.next());
|
| +}
|
| +
|
| // Base Provider implementation class. It's expected that tests subclass and
|
| // override the appropriate Provider functions. When test is done quit the
|
| // run_loop().
|
| @@ -186,10 +196,14 @@ class CppSideConnection : public js_to_cpp::CppSide {
|
| NOTREACHED();
|
| }
|
|
|
| - virtual void BitFlipResponse(const js_to_cpp::EchoArgs& arg1) OVERRIDE {
|
| + virtual void BitFlipResponse(const js_to_cpp::EchoArgsList& list) OVERRIDE {
|
| NOTREACHED();
|
| }
|
|
|
| + virtual void BackPointerResponse(
|
| + const js_to_cpp::EchoArgsList& list) OVERRIDE {
|
| + NOTREACHED();
|
| + }
|
| protected:
|
| base::RunLoop* run_loop_;
|
| js_to_cpp::JsSide* js_side_;
|
| @@ -201,7 +215,7 @@ class CppSideConnection : public js_to_cpp::CppSide {
|
| // Trivial test to verify a message sent from JS is received.
|
| class PingCppSideConnection : public CppSideConnection {
|
| public:
|
| - explicit PingCppSideConnection() : got_message_(false) {}
|
| + PingCppSideConnection() : got_message_(false) {}
|
| virtual ~PingCppSideConnection() {}
|
|
|
| // js_to_cpp::CppSide:
|
| @@ -226,7 +240,7 @@ class PingCppSideConnection : public CppSideConnection {
|
| // Test that parameters are passed with correct values.
|
| class EchoCppSideConnection : public CppSideConnection {
|
| public:
|
| - explicit EchoCppSideConnection() :
|
| + EchoCppSideConnection() :
|
| message_count_(0),
|
| termination_seen_(false) {
|
| }
|
| @@ -235,7 +249,7 @@ class EchoCppSideConnection : public CppSideConnection {
|
| // js_to_cpp::CppSide:
|
| virtual void StartTest() OVERRIDE {
|
| AllocationScope scope;
|
| - js_side_->Echo(kExpectedMessageCount, BuildSampleEchoArgsList());
|
| + js_side_->Echo(kExpectedMessageCount, BuildSampleEchoArgs());
|
| }
|
|
|
| virtual void EchoResponse(const js_to_cpp::EchoArgsList& list) OVERRIDE {
|
| @@ -259,7 +273,7 @@ class EchoCppSideConnection : public CppSideConnection {
|
| }
|
|
|
| private:
|
| - static const int kExpectedMessageCount = 100;
|
| + static const int kExpectedMessageCount = 10;
|
| int message_count_;
|
| bool termination_seen_;
|
| DISALLOW_COPY_AND_ASSIGN(EchoCppSideConnection);
|
| @@ -268,7 +282,7 @@ class EchoCppSideConnection : public CppSideConnection {
|
| // Test that corrupted messages don't wreak havoc.
|
| class BitFlipCppSideConnection : public CppSideConnection {
|
| public:
|
| - explicit BitFlipCppSideConnection() : termination_seen_(false) {}
|
| + BitFlipCppSideConnection() : termination_seen_(false) {}
|
| virtual ~BitFlipCppSideConnection() {}
|
|
|
| // js_to_cpp::CppSide:
|
| @@ -277,13 +291,8 @@ class BitFlipCppSideConnection : public CppSideConnection {
|
| js_side_->BitFlip(BuildSampleEchoArgs());
|
| }
|
|
|
| - virtual void BitFlipResponse(const js_to_cpp::EchoArgs& arg) OVERRIDE {
|
| - if (arg.is_null())
|
| - return;
|
| - CheckCorruptedString(arg.name());
|
| - CheckCorruptedStringArray(arg.string_array());
|
| - if (arg.data_handle().is_valid())
|
| - CheckDataPipe(arg.data_handle().get().value());
|
| + virtual void BitFlipResponse(const js_to_cpp::EchoArgsList& list) OVERRIDE {
|
| + CheckCorruptedEchoArgsList(list);
|
| }
|
|
|
| virtual void TestFinished() OVERRIDE {
|
| @@ -300,6 +309,37 @@ class BitFlipCppSideConnection : public CppSideConnection {
|
| DISALLOW_COPY_AND_ASSIGN(BitFlipCppSideConnection);
|
| };
|
|
|
| +// Test that severely random messages don't wreak havoc.
|
| +class BackPointerCppSideConnection : public CppSideConnection {
|
| + public:
|
| + BackPointerCppSideConnection() : termination_seen_(false) {}
|
| + virtual ~BackPointerCppSideConnection() {}
|
| +
|
| + // js_to_cpp::CppSide:
|
| + virtual void StartTest() OVERRIDE {
|
| + AllocationScope scope;
|
| + js_side_->BackPointer(BuildSampleEchoArgs());
|
| + }
|
| +
|
| + virtual void BackPointerResponse(
|
| + const js_to_cpp::EchoArgsList& list) OVERRIDE {
|
| + CheckCorruptedEchoArgsList(list);
|
| + }
|
| +
|
| + virtual void TestFinished() OVERRIDE {
|
| + termination_seen_ = true;
|
| + run_loop()->Quit();
|
| + }
|
| +
|
| + bool DidSucceed() {
|
| + return termination_seen_;
|
| + }
|
| +
|
| + private:
|
| + bool termination_seen_;
|
| + DISALLOW_COPY_AND_ASSIGN(BackPointerCppSideConnection);
|
| +};
|
| +
|
| } // namespace
|
|
|
| class JsToCppTest : public testing::Test {
|
| @@ -363,5 +403,15 @@ TEST_F(JsToCppTest, DISABLED_BitFlip) {
|
| EXPECT_TRUE(cpp_side_connection.DidSucceed());
|
| }
|
|
|
| +// TODO(tsepez): Disabled due to http://crbug.com/366797.
|
| +TEST_F(JsToCppTest, DISABLED_BackPointer) {
|
| + if (IsRunningOnIsolatedBot())
|
| + return;
|
| +
|
| + BackPointerCppSideConnection cpp_side_connection;
|
| + RunTest("mojo/apps/js/test/js_to_cpp_unittest", &cpp_side_connection);
|
| + EXPECT_TRUE(cpp_side_connection.DidSucceed());
|
| +}
|
| +
|
| } // namespace js
|
| } // namespace mojo
|
|
|