| Index: mojo/public/bindings/sample/sample_test.cc
|
| diff --git a/mojo/public/bindings/sample/sample_test.cc b/mojo/public/bindings/sample/sample_test.cc
|
| index b2eaa2f197deca4700f737a83093659f3ff36d8c..e996237e21b456cbae31a96e8ca59bd59591f380 100644
|
| --- a/mojo/public/bindings/sample/sample_test.cc
|
| +++ b/mojo/public/bindings/sample/sample_test.cc
|
| @@ -3,13 +3,101 @@
|
| // found in the LICENSE file.
|
|
|
| #include <stdio.h>
|
| +#include <string.h>
|
|
|
| +#include <algorithm>
|
| #include <string>
|
|
|
| #include "mojo/public/bindings/sample/generated/sample_service.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
|
|
| namespace sample {
|
|
|
| +// Make a sample |Foo| in the given |ScratchBuffer|.
|
| +Foo* MakeFoo(mojo::ScratchBuffer* buf) {
|
| + const std::string kName("foopy");
|
| + mojo::String* name = mojo::String::NewCopyOf(buf, kName);
|
| +
|
| + Bar* bar = Bar::New(buf);
|
| + bar->set_alpha(20);
|
| + bar->set_beta(40);
|
| + bar->set_gamma(60);
|
| +
|
| + mojo::Array<Bar*>* extra_bars = mojo::Array<Bar*>::New(buf, 3);
|
| + for (size_t i = 0; i < extra_bars->size(); ++i) {
|
| + Bar* bar = Bar::New(buf);
|
| + uint8_t base = static_cast<uint8_t>(i * 100);
|
| + bar->set_alpha(base);
|
| + bar->set_beta(base + 20);
|
| + bar->set_gamma(base + 40);
|
| + (*extra_bars)[i] = bar;
|
| + }
|
| +
|
| + mojo::Array<uint8_t>* data = mojo::Array<uint8_t>::New(buf, 10);
|
| + for (size_t i = 0; i < data->size(); ++i)
|
| + (*data)[i] = static_cast<uint8_t>(data->size() - i);
|
| +
|
| + mojo::Array<mojo::Handle>* files = mojo::Array<mojo::Handle>::New(buf, 4);
|
| + for (size_t i = 0; i < files->size(); ++i)
|
| + (*files)[i].value = static_cast<MojoHandle>(0xFFFF - i);
|
| +
|
| + Foo* foo = Foo::New(buf);
|
| + foo->set_name(name);
|
| + foo->set_x(1);
|
| + foo->set_y(2);
|
| + foo->set_a(false);
|
| + foo->set_b(true);
|
| + foo->set_c(false);
|
| + foo->set_bar(bar);
|
| + foo->set_extra_bars(extra_bars);
|
| + foo->set_data(data);
|
| + foo->set_files(files);
|
| +
|
| + return foo;
|
| +}
|
| +
|
| +// Check that the given |Foo| is identical to the one made by |MakeFoo()|.
|
| +void CheckFoo(const Foo* foo) {
|
| + const std::string kName("foopy");
|
| + EXPECT_EQ(kName.size(), foo->name()->size());
|
| + for (size_t i = 0; i < std::min(kName.size(), foo->name()->size()); i++) {
|
| + // Test both |operator[]| and |at|.
|
| + EXPECT_EQ(kName[i], foo->name()->at(i)) << i;
|
| + EXPECT_EQ(kName[i], (*foo->name())[i]) << i;
|
| + }
|
| + EXPECT_EQ(kName, foo->name()->To<std::string>());
|
| +
|
| + EXPECT_EQ(1, foo->x());
|
| + EXPECT_EQ(2, foo->y());
|
| + EXPECT_FALSE(foo->a());
|
| + EXPECT_TRUE(foo->b());
|
| + EXPECT_FALSE(foo->c());
|
| +
|
| + EXPECT_EQ(20, foo->bar()->alpha());
|
| + EXPECT_EQ(40, foo->bar()->beta());
|
| + EXPECT_EQ(60, foo->bar()->gamma());
|
| +
|
| + EXPECT_EQ(3u, foo->extra_bars()->size());
|
| + for (size_t i = 0; i < foo->extra_bars()->size(); i++) {
|
| + uint8_t base = static_cast<uint8_t>(i * 100);
|
| + EXPECT_EQ(base, (*foo->extra_bars())[i]->alpha()) << i;
|
| + EXPECT_EQ(base + 20, (*foo->extra_bars())[i]->beta()) << i;
|
| + EXPECT_EQ(base + 40, (*foo->extra_bars())[i]->gamma()) << i;
|
| + }
|
| +
|
| + EXPECT_EQ(10u, foo->data()->size());
|
| + for (size_t i = 0; i < foo->data()->size(); ++i) {
|
| + EXPECT_EQ(static_cast<uint8_t>(foo->data()->size() - i),
|
| + foo->data()->at(i)) << i;
|
| + }
|
| +
|
| + EXPECT_EQ(4u, foo->files()->size());
|
| + for (size_t i = 0; i < foo->files()->size(); ++i)
|
| + EXPECT_EQ(static_cast<MojoHandle>(0xFFFF - i),
|
| + foo->files()->at(i).value) << i;
|
| +}
|
| +
|
| +
|
| static void PrintSpacer(int depth) {
|
| for (int i = 0; i < depth; ++i)
|
| printf(" ");
|
| @@ -91,10 +179,15 @@ class ServiceImpl : public ServiceStub {
|
| virtual void Frobinate(const Foo* foo, bool baz, mojo::Handle port)
|
| MOJO_OVERRIDE {
|
| // Users code goes here to handle the incoming Frobinate message.
|
| - // We'll just dump the Foo structure and all of its members.
|
|
|
| - printf("Frobinate:\n");
|
| + // We mainly check that we're given the expected arguments.
|
| + CheckFoo(foo);
|
| + EXPECT_TRUE(baz);
|
| + EXPECT_EQ(static_cast<MojoHandle>(10), port.value);
|
|
|
| + // Also dump the Foo structure and all of its members.
|
| + // TODO(vtl): Make it optional, so that the test spews less?
|
| + printf("Frobinate:\n");
|
| int depth = 1;
|
| Print(depth, "foo", foo);
|
| Print(depth, "baz", baz);
|
| @@ -116,7 +209,7 @@ class SimpleMessageReceiver : public mojo::MessageReceiver {
|
| }
|
| };
|
|
|
| -void Exercise() {
|
| +TEST(BindingsSampleTest, Basic) {
|
| SimpleMessageReceiver receiver;
|
|
|
| // User has a proxy to a Service somehow.
|
| @@ -129,44 +222,8 @@ void Exercise() {
|
| // allocated.
|
|
|
| mojo::ScratchBuffer buf;
|
| -
|
| - Bar* bar = Bar::New(&buf);
|
| - bar->set_alpha(20);
|
| - bar->set_beta(40);
|
| - bar->set_gamma(60);
|
| -
|
| - const char kName[] = "foopy";
|
| - mojo::String* name = mojo::String::NewCopyOf(&buf, std::string(kName));
|
| -
|
| - mojo::Array<Bar*>* extra_bars = mojo::Array<Bar*>::New(&buf, 3);
|
| - for (size_t i = 0; i < extra_bars->size(); ++i) {
|
| - Bar* bar = Bar::New(&buf);
|
| - uint8_t base = static_cast<uint8_t>(i * 100);
|
| - bar->set_alpha(base);
|
| - bar->set_beta(base + 20);
|
| - bar->set_gamma(base + 40);
|
| - (*extra_bars)[i] = bar;
|
| - }
|
| -
|
| - mojo::Array<uint8_t>* data = mojo::Array<uint8_t>::New(&buf, 10);
|
| - for (size_t i = 0; i < data->size(); ++i)
|
| - (*data)[i] = static_cast<uint8_t>(data->size() - i);
|
| -
|
| - mojo::Array<mojo::Handle>* files = mojo::Array<mojo::Handle>::New(&buf, 4);
|
| - for (size_t i = 0; i < files->size(); ++i)
|
| - (*files)[i].value = static_cast<MojoHandle>(0xFFFF - i);
|
| -
|
| - Foo* foo = Foo::New(&buf);
|
| - foo->set_name(name);
|
| - foo->set_x(1);
|
| - foo->set_y(2);
|
| - foo->set_a(false);
|
| - foo->set_b(true);
|
| - foo->set_c(false);
|
| - foo->set_bar(bar);
|
| - foo->set_extra_bars(extra_bars);
|
| - foo->set_data(data);
|
| - foo->set_files(files);
|
| + Foo* foo = MakeFoo(&buf);
|
| + CheckFoo(foo);
|
|
|
| mojo::Handle port = { 10 };
|
|
|
| @@ -174,9 +231,3 @@ void Exercise() {
|
| }
|
|
|
| } // namespace sample
|
| -
|
| -int main() {
|
| - // TODO(vtl): Convert this to a gtest and use mojo_run_all_unittests.
|
| - // sample::Exercise();
|
| - return 0;
|
| -}
|
|
|