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

Side by Side Diff: mojo/public/cpp/bindings/tests/array_unittest.cc

Issue 294833002: Mojo: more idiomatic C++ bindings (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: more Created 6 years, 7 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "mojo/public/cpp/bindings/allocation_scope.h"
6 #include "mojo/public/cpp/bindings/array.h" 5 #include "mojo/public/cpp/bindings/array.h"
7 #include "mojo/public/cpp/bindings/lib/fixed_buffer.h" 6 #include "mojo/public/cpp/bindings/lib/fixed_buffer.h"
8 #include "mojo/public/cpp/bindings/lib/scratch_buffer.h" 7 #include "mojo/public/cpp/bindings/lib/scratch_buffer.h"
9 #include "mojo/public/cpp/environment/environment.h" 8 #include "mojo/public/cpp/environment/environment.h"
10 #include "mojo/public/interfaces/bindings/tests/sample_service.mojom.h" 9 #include "mojo/public/interfaces/bindings/tests/sample_service.mojom.h"
11 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
12 11
13 namespace mojo { 12 namespace mojo {
14 namespace test { 13 namespace test {
15 namespace { 14 namespace {
16 15
17 // Tests that basic Array operations work. 16 // Tests that basic Array operations work.
18 TEST(ArrayTest, Basic) { 17 TEST(ArrayTest, Basic) {
19 Environment env; 18 Array<char> array(8);
20 19 for (size_t i = 0; i < array.size(); ++i) {
21 // 8 bytes for the array, with 8 bytes left over for elements.
22 internal::FixedBuffer buf(8 + 8*sizeof(char));
23 EXPECT_EQ(16u, buf.size());
24
25 Array<char>::Builder builder(8);
26 EXPECT_EQ(8u, builder.size());
27 for (size_t i = 0; i < builder.size(); ++i) {
28 char val = static_cast<char>(i*2); 20 char val = static_cast<char>(i*2);
29 builder[i] = val; 21 array[i] = val;
30 EXPECT_EQ(val, builder.at(i)); 22 EXPECT_EQ(val, array.at(i));
31 }
32 Array<char> array = builder.Finish();
33 for (size_t i = 0; i < array.size(); ++i) {
34 char val = static_cast<char>(i) * 2;
35 EXPECT_EQ(val, array[i]);
36 } 23 }
37 } 24 }
38 25
39 // Tests that basic Array<bool> operations work, and that it's packed into 1 26 // Tests that basic Array<bool> operations work.
40 // bit per element.
41 TEST(ArrayTest, Bool) { 27 TEST(ArrayTest, Bool) {
42 Environment env; 28 Array<bool> array(64);
43
44 // 8 bytes for the array header, with 8 bytes left over for elements.
45 internal::FixedBuffer buf(8 + 3);
46 EXPECT_EQ(16u, buf.size());
47
48 // An array of 64 bools can fit into 8 bytes.
49 Array<bool>::Builder builder(64);
50 EXPECT_EQ(64u, builder.size());
51 for (size_t i = 0; i < builder.size(); ++i) {
52 bool val = i % 3 == 0;
53 builder[i] = val;
54 EXPECT_EQ(val, builder.at(i));
55 }
56 Array<bool> array = builder.Finish();
57 for (size_t i = 0; i < array.size(); ++i) { 29 for (size_t i = 0; i < array.size(); ++i) {
58 bool val = i % 3 == 0; 30 bool val = i % 3 == 0;
59 EXPECT_EQ(val, array[i]); 31 array[i] = val;
32 EXPECT_EQ(val, array.at(i));
60 } 33 }
61 } 34 }
62 35
63 // Tests that Array<Handle> supports transferring handles. 36 // Tests that Array<ScopedMessagePipeHandle> supports transferring handles.
64 TEST(ArrayTest, Handle) { 37 TEST(ArrayTest, Handle) {
65 Environment env;
66
67 AllocationScope scope;
68
69 ScopedMessagePipeHandle pipe0, pipe1; 38 ScopedMessagePipeHandle pipe0, pipe1;
70 CreateMessagePipe(&pipe0, &pipe1); 39 CreateMessagePipe(&pipe0, &pipe1);
71 40
72 Array<MessagePipeHandle>::Builder handles_builder(2); 41 Array<ScopedMessagePipeHandle> handles(2);
73 handles_builder[0] = pipe0.Pass(); 42 handles[0] = pipe0.Pass();
74 handles_builder[1].reset(pipe1.release()); 43 handles[1].reset(pipe1.release());
75 44
76 EXPECT_FALSE(pipe0.is_valid()); 45 EXPECT_FALSE(pipe0.is_valid());
77 EXPECT_FALSE(pipe1.is_valid()); 46 EXPECT_FALSE(pipe1.is_valid());
78 47
79 Array<MessagePipeHandle> handles = handles_builder.Finish(); 48 Array<ScopedMessagePipeHandle> handles2 = handles.Pass();
80 EXPECT_TRUE(handles[0].is_valid()); 49 EXPECT_TRUE(handles2[0].is_valid());
81 EXPECT_TRUE(handles[1].is_valid()); 50 EXPECT_TRUE(handles2[1].is_valid());
82 51
83 pipe0 = handles[0].Pass(); 52 pipe0 = handles2[0].Pass();
84 EXPECT_TRUE(pipe0.is_valid()); 53 EXPECT_TRUE(pipe0.is_valid());
85 EXPECT_FALSE(handles[0].is_valid()); 54 EXPECT_FALSE(handles2[0].is_valid());
86 } 55 }
87 56
88 // Tests that Array<Handle> supports closing handles. 57 // Tests that Array<ScopedMessagePipeHandle> supports closing handles.
89 TEST(ArrayTest, HandlesAreClosed) { 58 TEST(ArrayTest, HandlesAreClosed) {
90 Environment env;
91
92 ScopedMessagePipeHandle msg_pipe0, msg_pipe1;
93 CreateMessagePipe(&msg_pipe0, &msg_pipe1);
94
95 ScopedHandle pipe0 = ScopedHandle::From(msg_pipe0.Pass());
96 ScopedHandle pipe1 = ScopedHandle::From(msg_pipe1.Pass());
97
98 MojoHandle pipe0_value = pipe0.get().value();
99 MojoHandle pipe1_value = pipe1.get().value();
100
101 {
102 AllocationScope scope;
103
104 Array<Handle>::Builder handles_builder(2);
105 handles_builder[0] = pipe0.Pass();
106 handles_builder[1].reset(pipe1.release());
107
108 MOJO_ALLOW_UNUSED Array<Handle> handles =
109 handles_builder.Finish();
110 }
111
112 // We expect the pipes to have been closed.
113 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(pipe0_value));
114 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(pipe1_value));
115 }
116
117 // Tests that Array<MessagePipeHandle> supports closing handles.
118 TEST(ArrayTest, MessagePipeHandlesAreClosed) {
119 Environment env;
120
121 ScopedMessagePipeHandle pipe0, pipe1; 59 ScopedMessagePipeHandle pipe0, pipe1;
122 CreateMessagePipe(&pipe0, &pipe1); 60 CreateMessagePipe(&pipe0, &pipe1);
123 61
124 MojoHandle pipe0_value = pipe0.get().value(); 62 MojoHandle pipe0_value = pipe0.get().value();
125 MojoHandle pipe1_value = pipe1.get().value(); 63 MojoHandle pipe1_value = pipe1.get().value();
126 64
127 { 65 {
128 AllocationScope scope; 66 Array<ScopedMessagePipeHandle> handles(2);
129 67 handles[0] = pipe0.Pass();
130 Array<MessagePipeHandle>::Builder handles_builder(2); 68 handles[1].reset(pipe1.release());
131 handles_builder[0] = pipe0.Pass();
132 handles_builder[1].reset(pipe1.release());
133
134 MOJO_ALLOW_UNUSED Array<MessagePipeHandle> handles =
135 handles_builder.Finish();
136 } 69 }
137 70
138 // We expect the pipes to have been closed. 71 // We expect the pipes to have been closed.
139 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(pipe0_value)); 72 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(pipe0_value));
140 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(pipe1_value)); 73 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(pipe1_value));
141 } 74 }
142 75
143 } // namespace 76 } // namespace
144 } // namespace test 77 } // namespace test
145 } // namespace mojo 78 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698