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

Unified Diff: mojo/apps/js/test/js_to_cpp_unittest.cc

Issue 268593002: Move existing Mojo JS <--> CPP tests out of webui test harness. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix JS busted when I alphebetized dependency list. Created 6 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/apps/js/test/js_to_cpp.mojom ('k') | mojo/apps/js/test/js_to_cpp_unittest.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 3b19142275a3623c89cb2e943a31b32602be5325..d7aa87550c58e1bf1a039b8b1aa48e3786017cc5 100644
--- a/mojo/apps/js/test/js_to_cpp_unittest.cc
+++ b/mojo/apps/js/test/js_to_cpp_unittest.cc
@@ -9,74 +9,206 @@
#include "base/strings/utf_string_conversions.h"
#include "gin/public/isolate_holder.h"
#include "mojo/apps/js/mojo_runner_delegate.h"
+#include "mojo/apps/js/test/js_to_cpp.mojom.h"
#include "mojo/common/common_type_converters.h"
#include "mojo/common/test/test_utils.h"
+#include "mojo/public/cpp/bindings/allocation_scope.h"
#include "mojo/public/cpp/bindings/remote_ptr.h"
#include "mojo/public/cpp/environment/environment.h"
#include "mojo/public/cpp/system/core.h"
#include "mojo/public/cpp/system/macros.h"
-#include "mojo/public/interfaces/bindings/tests/sample_interfaces.mojom.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace mojo {
namespace js {
namespace {
+// Negative numbers with different values in each byte, the last of
+// which can survive promotion to double and back.
+const int8 kExpectedInt8Value = -65;
+const int16 kExpectedInt16Value = -16961;
+const int32 kExpectedInt32Value = -1145258561;
+const int64 kExpectedInt64Value = -77263311946305LL;
+
+// Positive numbers with different values in each byte, the last of
+// which can survive promotion to double and back.
+const uint8 kExpectedUInt8Value = 65;
+const uint16 kExpectedUInt16Value = 16961;
+const uint32 kExpectedUInt32Value = 1145258561;
+const uint64 kExpectedUInt64Value = 77263311946305LL;
+
+// Double/float values, including special case constants.
+const double kExpectedDoubleVal = 3.14159265358979323846;
+const double kExpectedDoubleInf = std::numeric_limits<double>::infinity();
+const double kExpectedDoubleNan = std::numeric_limits<double>::quiet_NaN();
+const float kExpectedFloatVal = static_cast<float>(kExpectedDoubleVal);
+const float kExpectedFloatInf = std::numeric_limits<float>::infinity();
+const float kExpectedFloatNan = std::numeric_limits<float>::quiet_NaN();
+
+// NaN has the property that it is not equal to itself.
+#define EXPECT_NAN(x) EXPECT_NE(x, x)
+
+bool IsRunningOnIsolatedBot() {
+ // TODO(yzshen): Remove this check once isolated tests are supported on the
+ // Chromium waterfall. (http://crbug.com/351214)
+ const base::FilePath test_file_path(
+ test::GetFilePathForJSResource(
+ "mojo/public/interfaces/bindings/tests/sample_interfaces.mojom"));
+ if (!base::PathExists(test_file_path)) {
+ LOG(WARNING) << "Mojom binding files don't exist. Skipping the test.";
+ return true;
+ }
+ return false;
+}
+
// Base Provider implementation class. It's expected that tests subclass and
// override the appropriate Provider functions. When test is done quit the
// run_loop().
-class ProviderConnection : public sample::Provider {
+class CppSideConnection : public js_to_cpp::CppSide {
public:
- ProviderConnection() : run_loop_(NULL), client_(NULL) {
+ CppSideConnection() : run_loop_(NULL), client_(NULL) {
}
- virtual ~ProviderConnection() {}
+ virtual ~CppSideConnection() {}
void set_run_loop(base::RunLoop* run_loop) { run_loop_ = run_loop; }
base::RunLoop* run_loop() { return run_loop_; }
- void set_client(sample::ProviderClient* client) { client_ = client; }
- sample::ProviderClient* client() { return client_; }
+ void set_client(js_to_cpp::JsSide* client) { client_ = client; }
+ js_to_cpp::JsSide* client() { return client_; }
- // sample::Provider:
- virtual void EchoString(const String& a,
- const Callback<void(String)>& callback) OVERRIDE {
+ // js_to_cpp::CppSide:
+ virtual void StartTest() OVERRIDE {
NOTREACHED();
}
- virtual void EchoStrings(
- const String& a,
- const String& b,
- const Callback<void(String, String)>& callback) OVERRIDE {
+
+ virtual void PingResponse() OVERRIDE {
NOTREACHED();
}
- virtual void EchoMessagePipeHandle(
- ScopedMessagePipeHandle a,
- const Callback<void(ScopedMessagePipeHandle)>& callback) OVERRIDE {
+
+ virtual void EchoResponse(const js_to_cpp::EchoArgs& arg1,
+ const js_to_cpp::EchoArgs& arg2) OVERRIDE {
NOTREACHED();
}
- virtual void EchoEnum(sample::Enum a,
- const Callback<void(sample::Enum)>& callback)
- OVERRIDE {
- NOTREACHED();
+
+ protected:
+ base::RunLoop* run_loop_;
+ js_to_cpp::JsSide* client_;
+
+ private:
+ Environment environment;
+ DISALLOW_COPY_AND_ASSIGN(CppSideConnection);
+};
+
+// Trivial test to verify a message sent from JS is received.
+class PingCppSideConnection : public CppSideConnection {
+ public:
+ explicit PingCppSideConnection() : got_message_(false) {}
+ virtual ~PingCppSideConnection() {}
+
+ // js_to_cpp::CppSide:
+ virtual void StartTest() OVERRIDE {
+ client_->Ping();
+ }
+
+ virtual void PingResponse() OVERRIDE {
+ got_message_ = true;
+ run_loop()->Quit();
+ }
+
+ bool DidSucceed() {
+ return got_message_;
}
private:
- base::RunLoop* run_loop_;
- sample::ProviderClient* client_;
+ bool got_message_;
+ DISALLOW_COPY_AND_ASSIGN(PingCppSideConnection);
+};
- DISALLOW_COPY_AND_ASSIGN(ProviderConnection);
+// Test that parameters are passed with correct values.
+class EchoCppSideConnection : public CppSideConnection {
+ public:
+ explicit EchoCppSideConnection() : message_count_(0) {}
+ 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());
+ }
+
+ 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>());
+
+ 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();
+ }
+
+ bool DidSucceed() {
+ return message_count_ == kExpectedMessageCount;
+ }
+
+ private:
+ static const int kExpectedMessageCount = 100;
+ int message_count_;
+ DISALLOW_COPY_AND_ASSIGN(EchoCppSideConnection);
};
class JsToCppTest : public testing::Test {
public:
JsToCppTest() {}
- void RunTest(const std::string& test, ProviderConnection* provider) {
- provider->set_run_loop(&run_loop_);
- InterfacePipe<sample::Provider, sample::ProviderClient> pipe;
- RemotePtr<sample::ProviderClient> provider_client;
- provider_client.reset(pipe.handle_to_peer.Pass(), provider);
-
- provider->set_client(provider_client.get());
+ void RunTest(const std::string& test, CppSideConnection* cpp_side) {
+ cpp_side->set_run_loop(&run_loop_);
+ InterfacePipe<js_to_cpp::CppSide, js_to_cpp::JsSide> pipe;
+ RemotePtr<js_to_cpp::JsSide> js_side;
+ js_side.reset(pipe.handle_to_peer.Pass(), cpp_side);
+ cpp_side->set_client(js_side.get());
gin::IsolateHolder instance(gin::IsolateHolder::kStrictMode);
apps::MojoRunnerDelegate delegate;
@@ -88,49 +220,28 @@ class JsToCppTest : public testing::Test {
}
private:
- Environment environment;
base::MessageLoop loop;
base::RunLoop run_loop_;
DISALLOW_COPY_AND_ASSIGN(JsToCppTest);
};
-// Trivial test to verify a message sent from JS is received.
-class FromJsProviderConnection : public ProviderConnection {
- public:
- explicit FromJsProviderConnection() {}
- virtual ~FromJsProviderConnection() {
- }
-
- const base::string16& echo_string() const { return echo_string_; }
-
- // Provider:
- virtual void EchoString(const String& a,
- const Callback<void(String)>& callback) OVERRIDE {
- echo_string_ = a.To<base::string16>();
- run_loop()->Quit();
- }
-
- private:
- base::string16 echo_string_;
+TEST_F(JsToCppTest, Ping) {
+ if (IsRunningOnIsolatedBot())
+ return;
- DISALLOW_COPY_AND_ASSIGN(FromJsProviderConnection);
-};
+ PingCppSideConnection cpp_side_connection;
+ RunTest("mojo/apps/js/test/js_to_cpp_unittest", &cpp_side_connection);
+ EXPECT_TRUE(cpp_side_connection.DidSucceed());
+}
-TEST_F(JsToCppTest, FromJS) {
- // TODO(yzshen): Remove this check once isolated tests are supported on the
- // Chromium waterfall. (http://crbug.com/351214)
- const base::FilePath test_file_path(
- test::GetFilePathForJSResource(
- "mojo/public/interfaces/bindings/tests/sample_interfaces.mojom"));
- if (!base::PathExists(test_file_path)) {
- LOG(WARNING) << "Mojom binding files don't exist. Skipping the test.";
+TEST_F(JsToCppTest, Echo) {
+ if (IsRunningOnIsolatedBot())
return;
- }
- FromJsProviderConnection provider;
- RunTest("mojo/apps/js/test/js_to_cpp_unittest", &provider);
- EXPECT_EQ("message", base::UTF16ToASCII(provider.echo_string()));
+ EchoCppSideConnection cpp_side_connection;
+ RunTest("mojo/apps/js/test/js_to_cpp_unittest", &cpp_side_connection);
+ EXPECT_TRUE(cpp_side_connection.DidSucceed());
}
} // namespace
« no previous file with comments | « mojo/apps/js/test/js_to_cpp.mojom ('k') | mojo/apps/js/test/js_to_cpp_unittest.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698