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

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

Issue 63033010: Mojo's C++ and JavaScript bindings should produce identical messages (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase 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
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 #include <string.h>
7 7
8 #include <algorithm> 8 #include <algorithm>
9 #include <string> 9 #include <string>
10 10
11 #include "mojom/sample_service.h" 11 #include "mojom/sample_service.h"
12 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
13 13
14 namespace sample { 14 namespace sample {
15 15
16 // Set this variable to true to print the binary message in hex.
17 bool g_dump_message_as_hex = true;
18
16 // Make a sample |Foo| in the given |ScratchBuffer|. 19 // Make a sample |Foo| in the given |ScratchBuffer|.
17 Foo* MakeFoo(mojo::ScratchBuffer* buf) { 20 Foo* MakeFoo(mojo::ScratchBuffer* buf) {
18 const std::string kName("foopy"); 21 const std::string kName("foopy");
19 mojo::String* name = mojo::String::NewCopyOf(buf, kName); 22 mojo::String* name = mojo::String::NewCopyOf(buf, kName);
20 23
21 Bar* bar = Bar::New(buf); 24 Bar* bar = Bar::New(buf);
22 bar->set_alpha(20); 25 bar->set_alpha(20);
23 bar->set_beta(40); 26 bar->set_beta(40);
24 bar->set_gamma(60); 27 bar->set_gamma(60);
25 28
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 Print(depth, "b", foo->b()); 170 Print(depth, "b", foo->b());
168 Print(depth, "c", foo->c()); 171 Print(depth, "c", foo->c());
169 Print(depth, "bar", foo->bar()); 172 Print(depth, "bar", foo->bar());
170 Print(depth, "extra_bars", foo->extra_bars()); 173 Print(depth, "extra_bars", foo->extra_bars());
171 Print(depth, "data", foo->data()); 174 Print(depth, "data", foo->data());
172 Print(depth, "files", foo->files()); 175 Print(depth, "files", foo->files());
173 --depth; 176 --depth;
174 } 177 }
175 } 178 }
176 179
180 static void DumpHex(const uint8_t* bytes, uint32_t num_bytes) {
181 for (uint32_t i = 0; i < num_bytes; ++i) {
182 printf("%02x", bytes[i]);
183
184 if (i % 16 == 15) {
185 printf("\n");
186 continue;
187 }
188
189 if (i % 2 == 1)
190 printf(" ");
191 if (i % 8 == 7)
192 printf(" ");
193 }
194 }
195
177 class ServiceImpl : public ServiceStub { 196 class ServiceImpl : public ServiceStub {
178 public: 197 public:
179 virtual void Frobinate(const Foo* foo, bool baz, mojo::Handle port) 198 virtual void Frobinate(const Foo* foo, bool baz, mojo::Handle port)
180 MOJO_OVERRIDE { 199 MOJO_OVERRIDE {
181 // Users code goes here to handle the incoming Frobinate message. 200 // Users code goes here to handle the incoming Frobinate message.
182 201
183 // We mainly check that we're given the expected arguments. 202 // We mainly check that we're given the expected arguments.
184 CheckFoo(foo); 203 CheckFoo(foo);
185 EXPECT_TRUE(baz); 204 EXPECT_TRUE(baz);
186 EXPECT_EQ(static_cast<MojoHandle>(10), port.value); 205 EXPECT_EQ(static_cast<MojoHandle>(10), port.value);
187 206
188 // Also dump the Foo structure and all of its members. 207 // Also dump the Foo structure and all of its members.
189 // TODO(vtl): Make it optional, so that the test spews less? 208 // TODO(vtl): Make it optional, so that the test spews less?
190 printf("Frobinate:\n"); 209 printf("Frobinate:\n");
191 int depth = 1; 210 int depth = 1;
192 Print(depth, "foo", foo); 211 Print(depth, "foo", foo);
193 Print(depth, "baz", baz); 212 Print(depth, "baz", baz);
194 Print(depth, "port", port); 213 Print(depth, "port", port);
195 } 214 }
196 }; 215 };
197 216
198 class SimpleMessageReceiver : public mojo::MessageReceiver { 217 class SimpleMessageReceiver : public mojo::MessageReceiver {
199 public: 218 public:
200 virtual bool Accept(mojo::Message* message) MOJO_OVERRIDE { 219 virtual bool Accept(mojo::Message* message) MOJO_OVERRIDE {
201 // Imagine some IPC happened here. 220 // Imagine some IPC happened here.
202 221
222 if (g_dump_message_as_hex) {
223 DumpHex(reinterpret_cast<const uint8_t*>(message->data),
224 message->data->header.num_bytes);
225 }
226
203 // In the receiving process, an implementation of ServiceStub is known to 227 // In the receiving process, an implementation of ServiceStub is known to
204 // the system. It receives the incoming message. 228 // the system. It receives the incoming message.
205 ServiceImpl impl; 229 ServiceImpl impl;
206 230
207 ServiceStub* stub = &impl; 231 ServiceStub* stub = &impl;
208 return stub->Accept(message); 232 return stub->Accept(message);
209 } 233 }
210 }; 234 };
211 235
212 TEST(BindingsSampleTest, Basic) { 236 TEST(BindingsSampleTest, Basic) {
(...skipping 11 matching lines...) Expand all
224 mojo::ScratchBuffer buf; 248 mojo::ScratchBuffer buf;
225 Foo* foo = MakeFoo(&buf); 249 Foo* foo = MakeFoo(&buf);
226 CheckFoo(foo); 250 CheckFoo(foo);
227 251
228 mojo::Handle port = { 10 }; 252 mojo::Handle port = { 10 };
229 253
230 service->Frobinate(foo, true, port); 254 service->Frobinate(foo, true, port);
231 } 255 }
232 256
233 } // namespace sample 257 } // namespace sample
OLDNEW
« no previous file with comments | « mojo/public/bindings/sample/mojom/sample_service.js ('k') | mojo/public/bindings/sample/sample_test.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698