| 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 d7aa87550c58e1bf1a039b8b1aa48e3786017cc5..a90329e0fc6f39fdb711b9a3c32c9a835c3a0a92 100644
|
| --- a/mojo/apps/js/test/js_to_cpp_unittest.cc
|
| +++ b/mojo/apps/js/test/js_to_cpp_unittest.cc
|
| @@ -61,6 +61,54 @@ bool IsRunningOnIsolatedBot() {
|
| return false;
|
| }
|
|
|
| +// NOTE: Callers will need to have established an AllocationScope, or you're
|
| +// gonna have a bad time.
|
| +js_to_cpp::EchoArgs BuildSampleEchoArgs() {
|
| + js_to_cpp::EchoArgs::Builder builder;
|
| + builder.set_si64(kExpectedInt64Value);
|
| + builder.set_si32(kExpectedInt32Value);
|
| + builder.set_si16(kExpectedInt16Value);
|
| + builder.set_si8(kExpectedInt8Value);
|
| + builder.set_ui64(kExpectedUInt64Value);
|
| + builder.set_ui32(kExpectedUInt32Value);
|
| + builder.set_ui16(kExpectedUInt16Value);
|
| + builder.set_ui8(kExpectedUInt8Value);
|
| + builder.set_float_val(kExpectedFloatVal);
|
| + builder.set_float_inf(kExpectedFloatInf);
|
| + builder.set_float_nan(kExpectedFloatNan);
|
| + builder.set_double_val(kExpectedDoubleVal);
|
| + builder.set_double_inf(kExpectedDoubleInf);
|
| + builder.set_double_nan(kExpectedDoubleNan);
|
| + builder.set_name("coming");
|
| + mojo::Array<mojo::String>::Builder string_array(3);
|
| + string_array[0] = "one";
|
| + string_array[1] = "two";
|
| + string_array[2] = "three";
|
| + builder.set_string_array(string_array.Finish());
|
| + return builder.Finish();
|
| +}
|
| +
|
| +void CheckSampleEchoArgs(const js_to_cpp::EchoArgs& arg) {
|
| + EXPECT_EQ(kExpectedInt64Value, arg.si64());
|
| + EXPECT_EQ(kExpectedInt32Value, arg.si32());
|
| + EXPECT_EQ(kExpectedInt16Value, arg.si16());
|
| + EXPECT_EQ(kExpectedInt8Value, arg.si8());
|
| + EXPECT_EQ(kExpectedUInt64Value, arg.ui64());
|
| + EXPECT_EQ(kExpectedUInt32Value, arg.ui32());
|
| + EXPECT_EQ(kExpectedUInt16Value, arg.ui16());
|
| + EXPECT_EQ(kExpectedUInt8Value, arg.ui8());
|
| + EXPECT_EQ(kExpectedFloatVal, arg.float_val());
|
| + EXPECT_EQ(kExpectedFloatInf, arg.float_inf());
|
| + EXPECT_NAN(arg.float_nan());
|
| + EXPECT_EQ(kExpectedDoubleVal, arg.double_val());
|
| + EXPECT_EQ(kExpectedDoubleInf, arg.double_inf());
|
| + EXPECT_NAN(arg.double_nan());
|
| + EXPECT_EQ(std::string("coming"), arg.name().To<std::string>());
|
| + EXPECT_EQ(std::string("one"), arg.string_array()[0].To<std::string>());
|
| + EXPECT_EQ(std::string("two"), arg.string_array()[1].To<std::string>());
|
| + EXPECT_EQ(std::string("three"), arg.string_array()[2].To<std::string>());
|
| +}
|
| +
|
| // Base Provider implementation class. It's expected that tests subclass and
|
| // override the appropriate Provider functions. When test is done quit the
|
| // run_loop().
|
| @@ -81,6 +129,10 @@ class CppSideConnection : public js_to_cpp::CppSide {
|
| NOTREACHED();
|
| }
|
|
|
| + virtual void TestFinished() OVERRIDE {
|
| + NOTREACHED();
|
| + }
|
| +
|
| virtual void PingResponse() OVERRIDE {
|
| NOTREACHED();
|
| }
|
| @@ -90,6 +142,10 @@ class CppSideConnection : public js_to_cpp::CppSide {
|
| NOTREACHED();
|
| }
|
|
|
| + virtual void BitFlipResponse(const js_to_cpp::EchoArgs& arg1) OVERRIDE {
|
| + NOTREACHED();
|
| + }
|
| +
|
| protected:
|
| base::RunLoop* run_loop_;
|
| js_to_cpp::JsSide* client_;
|
| @@ -127,78 +183,77 @@ class PingCppSideConnection : public CppSideConnection {
|
| // Test that parameters are passed with correct values.
|
| class EchoCppSideConnection : public CppSideConnection {
|
| public:
|
| - explicit EchoCppSideConnection() : message_count_(0) {}
|
| + explicit EchoCppSideConnection() :
|
| + message_count_(0),
|
| + termination_seen_(false) {
|
| + }
|
| virtual ~EchoCppSideConnection() {}
|
|
|
| // js_to_cpp::CppSide:
|
| virtual void StartTest() OVERRIDE {
|
| AllocationScope scope;
|
| - js_to_cpp::EchoArgs::Builder builder;
|
| - builder.set_si64(kExpectedInt64Value);
|
| - builder.set_si32(kExpectedInt32Value);
|
| - builder.set_si16(kExpectedInt16Value);
|
| - builder.set_si8(kExpectedInt8Value);
|
| - builder.set_ui64(kExpectedUInt64Value);
|
| - builder.set_ui32(kExpectedUInt32Value);
|
| - builder.set_ui16(kExpectedUInt16Value);
|
| - builder.set_ui8(kExpectedUInt8Value);
|
| - builder.set_float_val(kExpectedFloatVal);
|
| - builder.set_float_inf(kExpectedFloatInf);
|
| - builder.set_float_nan(kExpectedFloatNan);
|
| - builder.set_double_val(kExpectedDoubleVal);
|
| - builder.set_double_inf(kExpectedDoubleInf);
|
| - builder.set_double_nan(kExpectedDoubleNan);
|
| - builder.set_name("coming");
|
| - mojo::Array<mojo::String>::Builder string_array(3);
|
| - string_array[0] = "one";
|
| - string_array[1] = "two";
|
| - string_array[2] = "three";
|
| - builder.set_string_array(string_array.Finish());
|
| - client_->Echo(builder.Finish());
|
| + client_->Echo(kExpectedMessageCount, BuildSampleEchoArgs());
|
| }
|
|
|
| virtual void EchoResponse(const js_to_cpp::EchoArgs& arg1,
|
| const js_to_cpp::EchoArgs& arg2) OVERRIDE {
|
| - EXPECT_EQ(kExpectedInt64Value, arg1.si64());
|
| - EXPECT_EQ(kExpectedInt32Value, arg1.si32());
|
| - EXPECT_EQ(kExpectedInt16Value, arg1.si16());
|
| - EXPECT_EQ(kExpectedInt8Value, arg1.si8());
|
| - EXPECT_EQ(kExpectedUInt64Value, arg1.ui64());
|
| - EXPECT_EQ(kExpectedUInt32Value, arg1.ui32());
|
| - EXPECT_EQ(kExpectedUInt16Value, arg1.ui16());
|
| - EXPECT_EQ(kExpectedUInt8Value, arg1.ui8());
|
| - EXPECT_EQ(kExpectedFloatVal, arg1.float_val());
|
| - EXPECT_EQ(kExpectedFloatInf, arg1.float_inf());
|
| - EXPECT_NAN(arg1.float_nan());
|
| - EXPECT_EQ(kExpectedDoubleVal, arg1.double_val());
|
| - EXPECT_EQ(kExpectedDoubleInf, arg1.double_inf());
|
| - EXPECT_NAN(arg1.double_nan());
|
| - EXPECT_EQ(std::string("coming"), arg1.name().To<std::string>());
|
| - EXPECT_EQ(std::string("one"), arg1.string_array()[0].To<std::string>());
|
| - EXPECT_EQ(std::string("two"), arg1.string_array()[1].To<std::string>());
|
| - EXPECT_EQ(std::string("three"), arg1.string_array()[2].To<std::string>());
|
| -
|
| + message_count_ += 1;
|
| + CheckSampleEchoArgs(arg1);
|
| EXPECT_EQ(-1, arg2.si64());
|
| EXPECT_EQ(-1, arg2.si32());
|
| EXPECT_EQ(-1, arg2.si16());
|
| EXPECT_EQ(-1, arg2.si8());
|
| EXPECT_EQ(std::string("going"), arg2.name().To<std::string>());
|
| + }
|
|
|
| - message_count_ += 1;
|
| - if (message_count_ == kExpectedMessageCount)
|
| - run_loop_->Quit();
|
| + virtual void TestFinished() OVERRIDE {
|
| + termination_seen_ = true;
|
| + run_loop()->Quit();
|
| }
|
|
|
| bool DidSucceed() {
|
| - return message_count_ == kExpectedMessageCount;
|
| + return termination_seen_ && message_count_ == kExpectedMessageCount;
|
| }
|
|
|
| private:
|
| static const int kExpectedMessageCount = 100;
|
| int message_count_;
|
| + bool termination_seen_;
|
| DISALLOW_COPY_AND_ASSIGN(EchoCppSideConnection);
|
| };
|
|
|
| +// Test that corrupted messages don't wreak havoc.
|
| +class BitFlipCppSideConnection : public CppSideConnection {
|
| + public:
|
| + explicit BitFlipCppSideConnection() : termination_seen_(false) {}
|
| + virtual ~BitFlipCppSideConnection() {}
|
| +
|
| + // js_to_cpp::CppSide:
|
| + virtual void StartTest() OVERRIDE {
|
| + AllocationScope scope;
|
| + client_->BitFlip(BuildSampleEchoArgs());
|
| + }
|
| +
|
| + virtual void BitFlipResponse(const js_to_cpp::EchoArgs& arg1) OVERRIDE {
|
| + // TODO(tsepez): How to check, may be corrupt in various ways.
|
| + }
|
| +
|
| + virtual void TestFinished() OVERRIDE {
|
| + termination_seen_ = true;
|
| + run_loop()->Quit();
|
| + }
|
| +
|
| + bool DidSucceed() {
|
| + return termination_seen_;
|
| + }
|
| +
|
| + private:
|
| + bool termination_seen_;
|
| + DISALLOW_COPY_AND_ASSIGN(BitFlipCppSideConnection);
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| class JsToCppTest : public testing::Test {
|
| public:
|
| JsToCppTest() {}
|
| @@ -244,6 +299,15 @@ TEST_F(JsToCppTest, Echo) {
|
| EXPECT_TRUE(cpp_side_connection.DidSucceed());
|
| }
|
|
|
| -} // namespace
|
| +// TODO(tsepez): Disabled due to http://crbug.com/366797.
|
| +TEST_F(JsToCppTest, DISABLED_BitFlip) {
|
| + if (IsRunningOnIsolatedBot())
|
| + return;
|
| +
|
| + BitFlipCppSideConnection 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
|
|
|