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

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

Issue 1358353002: * Change C++ serialization/deserialization to not be move-only operations (with the except of |Ha… (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: (*it).get() to it->, and other formatting Created 5 years, 2 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
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 <string.h> 5 #include <string.h>
6 6
7 #include "mojo/public/cpp/bindings/lib/fixed_buffer.h" 7 #include "mojo/public/cpp/bindings/lib/fixed_buffer.h"
8 #include "mojo/public/cpp/environment/environment.h" 8 #include "mojo/public/cpp/environment/environment.h"
9 #include "mojo/public/cpp/system/message_pipe.h" 9 #include "mojo/public/cpp/system/message_pipe.h"
10 #include "mojo/public/interfaces/bindings/tests/test_structs.mojom.h" 10 #include "mojo/public/interfaces/bindings/tests/test_structs.mojom.h"
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 output->f_int16 = 42; 44 output->f_int16 = 42;
45 45
46 return output.Pass(); 46 return output.Pass();
47 } 47 }
48 48
49 template <typename U, typename T> 49 template <typename U, typename T>
50 U SerializeAndDeserialize(T input) { 50 U SerializeAndDeserialize(T input) {
51 typedef typename mojo::internal::WrapperTraits<T>::DataType InputDataType; 51 typedef typename mojo::internal::WrapperTraits<T>::DataType InputDataType;
52 typedef typename mojo::internal::WrapperTraits<U>::DataType OutputDataType; 52 typedef typename mojo::internal::WrapperTraits<U>::DataType OutputDataType;
53 53
54 size_t size = GetSerializedSize_(input); 54 size_t size = GetSerializedSize_(*input);
55 mojo::internal::FixedBufferForTesting buf(size + 32); 55 mojo::internal::FixedBufferForTesting buf(size + 32);
56 InputDataType data; 56 InputDataType data;
57 Serialize_(input.Pass(), &buf, &data); 57 Serialize_(input.get(), &buf, &data);
58 58
59 std::vector<Handle> handles; 59 std::vector<Handle> handles;
60 data->EncodePointersAndHandles(&handles); 60 data->EncodePointersAndHandles(&handles);
61 61
62 // Set the subsequent area to a special value, so that we can find out if we 62 // Set the subsequent area to a special value, so that we can find out if we
63 // mistakenly access the area. 63 // mistakenly access the area.
64 void* subsequent_area = buf.Allocate(32); 64 void* subsequent_area = buf.Allocate(32);
65 memset(subsequent_area, 0xAA, 32); 65 memset(subsequent_area, 0xAA, 32);
66 66
67 OutputDataType output_data = reinterpret_cast<OutputDataType>(data); 67 OutputDataType output_data = reinterpret_cast<OutputDataType>(data);
68 output_data->DecodePointersAndHandles(&handles); 68 output_data->DecodePointersAndHandles(&handles);
69 69
70 U output; 70 using RawUType = typename mojo::internal::RemoveStructPtr<U>::type;
71 Deserialize_(output_data, &output); 71 U output(RawUType::New());
72 Deserialize_(output_data, output.get());
72 return output.Pass(); 73 return output.Pass();
73 } 74 }
74 75
75 class StructTest : public testing::Test { 76 class StructTest : public testing::Test {
76 public: 77 public:
77 ~StructTest() override {} 78 ~StructTest() override {}
78 79
79 private: 80 private:
80 Environment env_; 81 Environment env_;
81 }; 82 };
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 // NoDefaultFieldValues contains handles, so Clone() is not available, but 132 // NoDefaultFieldValues contains handles, so Clone() is not available, but
132 // NoDefaultFieldValuesPtr should still compile. 133 // NoDefaultFieldValuesPtr should still compile.
133 NoDefaultFieldValuesPtr no_default_field_values(NoDefaultFieldValues::New()); 134 NoDefaultFieldValuesPtr no_default_field_values(NoDefaultFieldValues::New());
134 EXPECT_FALSE(no_default_field_values->f13.is_valid()); 135 EXPECT_FALSE(no_default_field_values->f13.is_valid());
135 } 136 }
136 137
137 // Serialization test of a struct with no pointer or handle members. 138 // Serialization test of a struct with no pointer or handle members.
138 TEST_F(StructTest, Serialization_Basic) { 139 TEST_F(StructTest, Serialization_Basic) {
139 RectPtr rect(MakeRect()); 140 RectPtr rect(MakeRect());
140 141
141 size_t size = GetSerializedSize_(rect); 142 size_t size = GetSerializedSize_(*rect);
142 EXPECT_EQ(8U + 16U, size); 143 EXPECT_EQ(8U + 16U, size);
143 144
144 mojo::internal::FixedBufferForTesting buf(size); 145 mojo::internal::FixedBufferForTesting buf(size);
145 internal::Rect_Data* data; 146 internal::Rect_Data* data;
146 Serialize_(rect.Pass(), &buf, &data); 147 Serialize_(rect.get(), &buf, &data);
147 148
148 RectPtr rect2; 149 RectPtr rect2(Rect::New());
149 Deserialize_(data, &rect2); 150 Deserialize_(data, rect2.get());
150 151
151 CheckRect(*rect2); 152 CheckRect(*rect2);
152 } 153 }
153 154
154 // Construction of a struct with struct pointers from null. 155 // Construction of a struct with struct pointers from null.
155 TEST_F(StructTest, Construction_StructPointers) { 156 TEST_F(StructTest, Construction_StructPointers) {
156 RectPairPtr pair; 157 RectPairPtr pair;
157 EXPECT_TRUE(pair.is_null()); 158 EXPECT_TRUE(pair.is_null());
158 159
159 pair = RectPair::New(); 160 pair = RectPair::New();
160 EXPECT_FALSE(pair.is_null()); 161 EXPECT_FALSE(pair.is_null());
161 EXPECT_TRUE(pair->first.is_null()); 162 EXPECT_TRUE(pair->first.is_null());
162 EXPECT_TRUE(pair->first.is_null()); 163 EXPECT_TRUE(pair->first.is_null());
163 164
164 pair = nullptr; 165 pair = nullptr;
165 EXPECT_TRUE(pair.is_null()); 166 EXPECT_TRUE(pair.is_null());
166 } 167 }
167 168
168 // Serialization test of a struct with struct pointers. 169 // Serialization test of a struct with struct pointers.
169 TEST_F(StructTest, Serialization_StructPointers) { 170 TEST_F(StructTest, Serialization_StructPointers) {
170 RectPairPtr pair(RectPair::New()); 171 RectPairPtr pair(RectPair::New());
171 pair->first = MakeRect(); 172 pair->first = MakeRect();
172 pair->second = MakeRect(); 173 pair->second = MakeRect();
173 174
174 size_t size = GetSerializedSize_(pair); 175 size_t size = GetSerializedSize_(*pair);
175 EXPECT_EQ(8U + 16U + 2 * (8U + 16U), size); 176 EXPECT_EQ(8U + 16U + 2 * (8U + 16U), size);
176 177
177 mojo::internal::FixedBufferForTesting buf(size); 178 mojo::internal::FixedBufferForTesting buf(size);
178 internal::RectPair_Data* data; 179 internal::RectPair_Data* data;
179 Serialize_(pair.Pass(), &buf, &data); 180 Serialize_(pair.get(), &buf, &data);
180 181
181 RectPairPtr pair2; 182 RectPairPtr pair2(RectPair::New());
182 Deserialize_(data, &pair2); 183 Deserialize_(data, pair2.get());
183 184
184 CheckRect(*pair2->first); 185 CheckRect(*pair2->first);
185 CheckRect(*pair2->second); 186 CheckRect(*pair2->second);
186 } 187 }
187 188
188 // Serialization test of a struct with an array member. 189 // Serialization test of a struct with an array member.
189 TEST_F(StructTest, Serialization_ArrayPointers) { 190 TEST_F(StructTest, Serialization_ArrayPointers) {
190 NamedRegionPtr region(NamedRegion::New()); 191 NamedRegionPtr region(NamedRegion::New());
191 region->name = "region"; 192 region->name = "region";
192 region->rects = Array<RectPtr>::New(4); 193 region->rects = Array<RectPtr>::New(4);
193 for (size_t i = 0; i < region->rects.size(); ++i) 194 for (size_t i = 0; i < region->rects.size(); ++i)
194 region->rects[i] = MakeRect(static_cast<int32_t>(i) + 1); 195 region->rects[i] = MakeRect(static_cast<int32_t>(i) + 1);
195 196
196 size_t size = GetSerializedSize_(region); 197 size_t size = GetSerializedSize_(*region);
197 EXPECT_EQ(8U + // header 198 EXPECT_EQ(8U + // header
198 8U + // name pointer 199 8U + // name pointer
199 8U + // rects pointer 200 8U + // rects pointer
200 8U + // name header 201 8U + // name header
201 8U + // name payload (rounded up) 202 8U + // name payload (rounded up)
202 8U + // rects header 203 8U + // rects header
203 4 * 8U + // rects payload (four pointers) 204 4 * 8U + // rects payload (four pointers)
204 4 * (8U + // rect header 205 4 * (8U + // rect header
205 16U), // rect payload (four ints) 206 16U), // rect payload (four ints)
206 size); 207 size);
207 208
208 mojo::internal::FixedBufferForTesting buf(size); 209 mojo::internal::FixedBufferForTesting buf(size);
209 internal::NamedRegion_Data* data; 210 internal::NamedRegion_Data* data;
210 Serialize_(region.Pass(), &buf, &data); 211 Serialize_(region.get(), &buf, &data);
211 212
212 NamedRegionPtr region2; 213 NamedRegionPtr region2(NamedRegion::New());
213 Deserialize_(data, &region2); 214 Deserialize_(data, region2.get());
214 215
215 EXPECT_EQ(String("region"), region2->name); 216 EXPECT_EQ(String("region"), region2->name);
216 217
217 EXPECT_EQ(4U, region2->rects.size()); 218 EXPECT_EQ(4U, region2->rects.size());
218 for (size_t i = 0; i < region2->rects.size(); ++i) 219 for (size_t i = 0; i < region2->rects.size(); ++i)
219 CheckRect(*region2->rects[i], static_cast<int32_t>(i) + 1); 220 CheckRect(*region2->rects[i], static_cast<int32_t>(i) + 1);
220 } 221 }
221 222
222 // Serialization test of a struct with null array pointers. 223 // Serialization test of a struct with null array pointers.
223 TEST_F(StructTest, Serialization_NullArrayPointers) { 224 TEST_F(StructTest, Serialization_NullArrayPointers) {
224 NamedRegionPtr region(NamedRegion::New()); 225 NamedRegionPtr region(NamedRegion::New());
225 EXPECT_TRUE(region->name.is_null()); 226 EXPECT_TRUE(region->name.is_null());
226 EXPECT_TRUE(region->rects.is_null()); 227 EXPECT_TRUE(region->rects.is_null());
227 228
228 size_t size = GetSerializedSize_(region); 229 size_t size = GetSerializedSize_(*region);
229 EXPECT_EQ(8U + // header 230 EXPECT_EQ(8U + // header
230 8U + // name pointer 231 8U + // name pointer
231 8U, // rects pointer 232 8U, // rects pointer
232 size); 233 size);
233 234
234 mojo::internal::FixedBufferForTesting buf(size); 235 mojo::internal::FixedBufferForTesting buf(size);
235 internal::NamedRegion_Data* data; 236 internal::NamedRegion_Data* data;
236 Serialize_(region.Pass(), &buf, &data); 237 Serialize_(region.get(), &buf, &data);
237 238
238 NamedRegionPtr region2; 239 NamedRegionPtr region2(NamedRegion::New());
239 Deserialize_(data, &region2); 240 Deserialize_(data, region2.get());
240 241
241 EXPECT_TRUE(region2->name.is_null()); 242 EXPECT_TRUE(region2->name.is_null());
242 EXPECT_TRUE(region2->rects.is_null()); 243 EXPECT_TRUE(region2->rects.is_null());
243 } 244 }
244 245
245 // Tests deserializing structs as a newer version. 246 // Tests deserializing structs as a newer version.
246 TEST_F(StructTest, Versioning_OldToNew) { 247 TEST_F(StructTest, Versioning_OldToNew) {
247 { 248 {
248 MultiVersionStructV0Ptr input(MultiVersionStructV0::New()); 249 MultiVersionStructV0Ptr input(MultiVersionStructV0::New());
249 input->f_int32 = 123; 250 input->f_int32 = 123;
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
413 expected_output->f_int32 = 123; 414 expected_output->f_int32 = 123;
414 415
415 MultiVersionStructV0Ptr output = 416 MultiVersionStructV0Ptr output =
416 SerializeAndDeserialize<MultiVersionStructV0Ptr>(input.Pass()); 417 SerializeAndDeserialize<MultiVersionStructV0Ptr>(input.Pass());
417 EXPECT_TRUE(output); 418 EXPECT_TRUE(output);
418 EXPECT_TRUE(output->Equals(*expected_output)); 419 EXPECT_TRUE(output->Equals(*expected_output));
419 } 420 }
420 } 421 }
421 } // namespace test 422 } // namespace test
422 } // namespace mojo 423 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/public/cpp/bindings/tests/serialization_warning_unittest.cc ('k') | mojo/public/cpp/bindings/tests/union_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698