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

Side by Side Diff: mojo/public/bindings/sample/sample_test.cc

Issue 66103004: Mojo: Make sample_test.cc a gtest (and re-enable it). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 1 month 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « mojo/public/DEPS ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 <stdio.h> 5 #include <stdio.h>
6 #include <string.h>
6 7
8 #include <algorithm>
7 #include <string> 9 #include <string>
8 10
9 #include "mojo/public/bindings/sample/generated/sample_service.h" 11 #include "mojo/public/bindings/sample/generated/sample_service.h"
12 #include "testing/gtest/include/gtest/gtest.h"
10 13
11 namespace sample { 14 namespace sample {
12 15
16 // Make a sample |Foo| in the given |ScratchBuffer|.
17 Foo* MakeFoo(mojo::ScratchBuffer* buf) {
18 const std::string kName("foopy");
19 mojo::String* name = mojo::String::NewCopyOf(buf, kName);
20
21 Bar* bar = Bar::New(buf);
22 bar->set_alpha(20);
23 bar->set_beta(40);
24 bar->set_gamma(60);
25
26 mojo::Array<Bar*>* extra_bars = mojo::Array<Bar*>::New(buf, 3);
27 for (size_t i = 0; i < extra_bars->size(); ++i) {
28 Bar* bar = Bar::New(buf);
29 uint8_t base = static_cast<uint8_t>(i * 100);
30 bar->set_alpha(base);
31 bar->set_beta(base + 20);
32 bar->set_gamma(base + 40);
33 (*extra_bars)[i] = bar;
34 }
35
36 mojo::Array<uint8_t>* data = mojo::Array<uint8_t>::New(buf, 10);
37 for (size_t i = 0; i < data->size(); ++i)
38 (*data)[i] = static_cast<uint8_t>(data->size() - i);
39
40 mojo::Array<mojo::Handle>* files = mojo::Array<mojo::Handle>::New(buf, 4);
41 for (size_t i = 0; i < files->size(); ++i)
42 (*files)[i].value = static_cast<MojoHandle>(0xFFFF - i);
43
44 Foo* foo = Foo::New(buf);
45 foo->set_name(name);
46 foo->set_x(1);
47 foo->set_y(2);
48 foo->set_a(false);
49 foo->set_b(true);
50 foo->set_c(false);
51 foo->set_bar(bar);
52 foo->set_extra_bars(extra_bars);
53 foo->set_data(data);
54 foo->set_files(files);
55
56 return foo;
57 }
58
59 // Check that the given |Foo| is identical to the one made by |MakeFoo()|.
60 void CheckFoo(const Foo* foo) {
61 const std::string kName("foopy");
62 EXPECT_EQ(kName.size(), foo->name()->size());
63 for (size_t i = 0; i < std::min(kName.size(), foo->name()->size()); i++) {
64 // Test both |operator[]| and |at|.
65 EXPECT_EQ(kName[i], foo->name()->at(i)) << i;
66 EXPECT_EQ(kName[i], (*foo->name())[i]) << i;
67 }
68 EXPECT_EQ(kName, foo->name()->To<std::string>());
69
70 EXPECT_EQ(1, foo->x());
71 EXPECT_EQ(2, foo->y());
72 EXPECT_FALSE(foo->a());
73 EXPECT_TRUE(foo->b());
74 EXPECT_FALSE(foo->c());
75
76 EXPECT_EQ(20, foo->bar()->alpha());
77 EXPECT_EQ(40, foo->bar()->beta());
78 EXPECT_EQ(60, foo->bar()->gamma());
79
80 EXPECT_EQ(3u, foo->extra_bars()->size());
81 for (size_t i = 0; i < foo->extra_bars()->size(); i++) {
82 uint8_t base = static_cast<uint8_t>(i * 100);
83 EXPECT_EQ(base, (*foo->extra_bars())[i]->alpha()) << i;
84 EXPECT_EQ(base + 20, (*foo->extra_bars())[i]->beta()) << i;
85 EXPECT_EQ(base + 40, (*foo->extra_bars())[i]->gamma()) << i;
86 }
87
88 EXPECT_EQ(10u, foo->data()->size());
89 for (size_t i = 0; i < foo->data()->size(); ++i) {
90 EXPECT_EQ(static_cast<uint8_t>(foo->data()->size() - i),
91 foo->data()->at(i)) << i;
92 }
93
94 EXPECT_EQ(4u, foo->files()->size());
95 for (size_t i = 0; i < foo->files()->size(); ++i)
96 EXPECT_EQ(static_cast<MojoHandle>(0xFFFF - i),
97 foo->files()->at(i).value) << i;
98 }
99
100
13 static void PrintSpacer(int depth) { 101 static void PrintSpacer(int depth) {
14 for (int i = 0; i < depth; ++i) 102 for (int i = 0; i < depth; ++i)
15 printf(" "); 103 printf(" ");
16 } 104 }
17 105
18 static void Print(int depth, const char* name, bool value) { 106 static void Print(int depth, const char* name, bool value) {
19 PrintSpacer(depth); 107 PrintSpacer(depth);
20 printf("%s: %s\n", name, value ? "true" : "false"); 108 printf("%s: %s\n", name, value ? "true" : "false");
21 } 109 }
22 110
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 Print(depth, "files", foo->files()); 172 Print(depth, "files", foo->files());
85 --depth; 173 --depth;
86 } 174 }
87 } 175 }
88 176
89 class ServiceImpl : public ServiceStub { 177 class ServiceImpl : public ServiceStub {
90 public: 178 public:
91 virtual void Frobinate(const Foo* foo, bool baz, mojo::Handle port) 179 virtual void Frobinate(const Foo* foo, bool baz, mojo::Handle port)
92 MOJO_OVERRIDE { 180 MOJO_OVERRIDE {
93 // Users code goes here to handle the incoming Frobinate message. 181 // Users code goes here to handle the incoming Frobinate message.
94 // We'll just dump the Foo structure and all of its members.
95 182
183 // We mainly check that we're given the expected arguments.
184 CheckFoo(foo);
185 EXPECT_TRUE(baz);
186 EXPECT_EQ(static_cast<MojoHandle>(10), port.value);
187
188 // Also dump the Foo structure and all of its members.
189 // TODO(vtl): Remove this? Or make it optional, so that the test spews less?
darin (slow to review) 2013/11/11 21:59:40 This spewage has been useful for developing the bi
96 printf("Frobinate:\n"); 190 printf("Frobinate:\n");
97
98 int depth = 1; 191 int depth = 1;
99 Print(depth, "foo", foo); 192 Print(depth, "foo", foo);
100 Print(depth, "baz", baz); 193 Print(depth, "baz", baz);
101 Print(depth, "port", port); 194 Print(depth, "port", port);
102 } 195 }
103 }; 196 };
104 197
105 class SimpleMessageReceiver : public mojo::MessageReceiver { 198 class SimpleMessageReceiver : public mojo::MessageReceiver {
106 public: 199 public:
107 virtual bool Accept(mojo::Message* message) MOJO_OVERRIDE { 200 virtual bool Accept(mojo::Message* message) MOJO_OVERRIDE {
108 // Imagine some IPC happened here. 201 // Imagine some IPC happened here.
109 202
110 // In the receiving process, an implementation of ServiceStub is known to 203 // In the receiving process, an implementation of ServiceStub is known to
111 // the system. It receives the incoming message. 204 // the system. It receives the incoming message.
112 ServiceImpl impl; 205 ServiceImpl impl;
113 206
114 ServiceStub* stub = &impl; 207 ServiceStub* stub = &impl;
115 return stub->Accept(message); 208 return stub->Accept(message);
116 } 209 }
117 }; 210 };
118 211
119 void Exercise() { 212 TEST(BindingsSampleTest, Basic) {
120 SimpleMessageReceiver receiver; 213 SimpleMessageReceiver receiver;
121 214
122 // User has a proxy to a Service somehow. 215 // User has a proxy to a Service somehow.
123 Service* service = new ServiceProxy(&receiver); 216 Service* service = new ServiceProxy(&receiver);
124 217
125 // User constructs a message to send. 218 // User constructs a message to send.
126 219
127 // Notice that it doesn't matter in what order the structs / arrays are 220 // Notice that it doesn't matter in what order the structs / arrays are
128 // allocated. Here, the various members of Foo are allocated before Foo is 221 // allocated. Here, the various members of Foo are allocated before Foo is
129 // allocated. 222 // allocated.
130 223
131 mojo::ScratchBuffer buf; 224 mojo::ScratchBuffer buf;
132 225 Foo* foo = MakeFoo(&buf);
133 Bar* bar = Bar::New(&buf); 226 CheckFoo(foo);
134 bar->set_alpha(20);
135 bar->set_beta(40);
136 bar->set_gamma(60);
137
138 const char kName[] = "foopy";
139 mojo::String* name = mojo::String::NewCopyOf(&buf, std::string(kName));
140
141 mojo::Array<Bar*>* extra_bars = mojo::Array<Bar*>::New(&buf, 3);
142 for (size_t i = 0; i < extra_bars->size(); ++i) {
143 Bar* bar = Bar::New(&buf);
144 uint8_t base = static_cast<uint8_t>(i * 100);
145 bar->set_alpha(base);
146 bar->set_beta(base + 20);
147 bar->set_gamma(base + 40);
148 (*extra_bars)[i] = bar;
149 }
150
151 mojo::Array<uint8_t>* data = mojo::Array<uint8_t>::New(&buf, 10);
152 for (size_t i = 0; i < data->size(); ++i)
153 (*data)[i] = static_cast<uint8_t>(data->size() - i);
154
155 mojo::Array<mojo::Handle>* files = mojo::Array<mojo::Handle>::New(&buf, 4);
156 for (size_t i = 0; i < files->size(); ++i)
157 (*files)[i].value = static_cast<MojoHandle>(0xFFFF - i);
158
159 Foo* foo = Foo::New(&buf);
160 foo->set_name(name);
161 foo->set_x(1);
162 foo->set_y(2);
163 foo->set_a(false);
164 foo->set_b(true);
165 foo->set_c(false);
166 foo->set_bar(bar);
167 foo->set_extra_bars(extra_bars);
168 foo->set_data(data);
169 foo->set_files(files);
170 227
171 mojo::Handle port = { 10 }; 228 mojo::Handle port = { 10 };
172 229
173 service->Frobinate(foo, true, port); 230 service->Frobinate(foo, true, port);
174 } 231 }
175 232
176 } // namespace sample 233 } // namespace sample
177
178 int main() {
179 // TODO(vtl): Convert this to a gtest and use mojo_run_all_unittests.
180 // sample::Exercise();
181 return 0;
182 }
OLDNEW
« no previous file with comments | « mojo/public/DEPS ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698