| OLD | NEW |
| 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 <stddef.h> | 5 #include <stddef.h> |
| 6 #include <stdint.h> | 6 #include <stdint.h> |
| 7 #include <string.h> | 7 #include <string.h> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "mojo/public/cpp/bindings/lib/fixed_buffer.h" | 10 #include "mojo/public/cpp/bindings/lib/fixed_buffer.h" |
| 11 #include "mojo/public/cpp/system/message_pipe.h" | 11 #include "mojo/public/cpp/system/message_pipe.h" |
| 12 #include "mojo/public/interfaces/bindings/tests/test_structs.mojom.h" | 12 #include "mojo/public/interfaces/bindings/tests/test_structs.mojom.h" |
| 13 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
| 14 | 14 |
| 15 namespace mojo { | 15 namespace mojo { |
| 16 namespace test { | 16 namespace test { |
| 17 namespace { | 17 namespace { |
| 18 | 18 |
| 19 RectPtr MakeRect(int32_t factor = 1) { | 19 RectPtr MakeRect(int32_t factor = 1) { |
| 20 RectPtr rect(Rect::New()); | 20 return Rect::New(1 * factor, 2 * factor, 10 * factor, 20 * factor); |
| 21 rect->x = 1 * factor; | |
| 22 rect->y = 2 * factor; | |
| 23 rect->width = 10 * factor; | |
| 24 rect->height = 20 * factor; | |
| 25 return rect; | |
| 26 } | 21 } |
| 27 | 22 |
| 28 void CheckRect(const Rect& rect, int32_t factor = 1) { | 23 void CheckRect(const Rect& rect, int32_t factor = 1) { |
| 29 EXPECT_EQ(1 * factor, rect.x); | 24 EXPECT_EQ(1 * factor, rect.x); |
| 30 EXPECT_EQ(2 * factor, rect.y); | 25 EXPECT_EQ(2 * factor, rect.y); |
| 31 EXPECT_EQ(10 * factor, rect.width); | 26 EXPECT_EQ(10 * factor, rect.width); |
| 32 EXPECT_EQ(20 * factor, rect.height); | 27 EXPECT_EQ(20 * factor, rect.height); |
| 33 } | 28 } |
| 34 | 29 |
| 35 MultiVersionStructPtr MakeMultiVersionStruct() { | 30 MultiVersionStructPtr MakeMultiVersionStruct() { |
| 36 MultiVersionStructPtr output(MultiVersionStruct::New()); | |
| 37 output->f_int32 = 123; | |
| 38 output->f_rect = MakeRect(5); | |
| 39 output->f_string.emplace("hello"); | |
| 40 output->f_array.emplace(3); | |
| 41 (*output->f_array)[0] = 10; | |
| 42 (*output->f_array)[1] = 9; | |
| 43 (*output->f_array)[2] = 8; | |
| 44 MessagePipe pipe; | 31 MessagePipe pipe; |
| 45 output->f_message_pipe = std::move(pipe.handle0); | 32 return MultiVersionStruct::New(123, MakeRect(5), std::string("hello"), |
| 46 output->f_int16 = 42; | 33 std::vector<int8_t>{10, 9, 8}, |
| 47 | 34 std::move(pipe.handle0), false, 42); |
| 48 return output; | |
| 49 } | 35 } |
| 50 | 36 |
| 51 template <typename U, typename T> | 37 template <typename U, typename T> |
| 52 U SerializeAndDeserialize(T input) { | 38 U SerializeAndDeserialize(T input) { |
| 53 using InputMojomType = typename T::Struct::DataView; | 39 using InputMojomType = typename T::Struct::DataView; |
| 54 using OutputMojomType = typename U::Struct::DataView; | 40 using OutputMojomType = typename U::Struct::DataView; |
| 55 | 41 |
| 56 using InputDataType = | 42 using InputDataType = |
| 57 typename mojo::internal::MojomTypeTraits<InputMojomType>::Data*; | 43 typename mojo::internal::MojomTypeTraits<InputMojomType>::Data*; |
| 58 using OutputDataType = | 44 using OutputDataType = |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 159 EXPECT_FALSE(pair.is_null()); | 145 EXPECT_FALSE(pair.is_null()); |
| 160 EXPECT_TRUE(pair->first.is_null()); | 146 EXPECT_TRUE(pair->first.is_null()); |
| 161 EXPECT_TRUE(pair->first.is_null()); | 147 EXPECT_TRUE(pair->first.is_null()); |
| 162 | 148 |
| 163 pair = nullptr; | 149 pair = nullptr; |
| 164 EXPECT_TRUE(pair.is_null()); | 150 EXPECT_TRUE(pair.is_null()); |
| 165 } | 151 } |
| 166 | 152 |
| 167 // Serialization test of a struct with struct pointers. | 153 // Serialization test of a struct with struct pointers. |
| 168 TEST_F(StructTest, Serialization_StructPointers) { | 154 TEST_F(StructTest, Serialization_StructPointers) { |
| 169 RectPairPtr pair(RectPair::New()); | 155 RectPairPtr pair(RectPair::New(MakeRect(), MakeRect())); |
| 170 pair->first = MakeRect(); | |
| 171 pair->second = MakeRect(); | |
| 172 | 156 |
| 173 size_t size = | 157 size_t size = |
| 174 mojo::internal::PrepareToSerialize<RectPairDataView>(pair, nullptr); | 158 mojo::internal::PrepareToSerialize<RectPairDataView>(pair, nullptr); |
| 175 EXPECT_EQ(8U + 16U + 2 * (8U + 16U), size); | 159 EXPECT_EQ(8U + 16U + 2 * (8U + 16U), size); |
| 176 | 160 |
| 177 mojo::internal::FixedBufferForTesting buf(size); | 161 mojo::internal::FixedBufferForTesting buf(size); |
| 178 internal::RectPair_Data* data; | 162 internal::RectPair_Data* data; |
| 179 mojo::internal::Serialize<RectPairDataView>(pair, &buf, &data, nullptr); | 163 mojo::internal::Serialize<RectPairDataView>(pair, &buf, &data, nullptr); |
| 180 | 164 |
| 181 RectPairPtr pair2; | 165 RectPairPtr pair2; |
| 182 mojo::internal::Deserialize<RectPairDataView>(data, &pair2, nullptr); | 166 mojo::internal::Deserialize<RectPairDataView>(data, &pair2, nullptr); |
| 183 | 167 |
| 184 CheckRect(*pair2->first); | 168 CheckRect(*pair2->first); |
| 185 CheckRect(*pair2->second); | 169 CheckRect(*pair2->second); |
| 186 } | 170 } |
| 187 | 171 |
| 188 // Serialization test of a struct with an array member. | 172 // Serialization test of a struct with an array member. |
| 189 TEST_F(StructTest, Serialization_ArrayPointers) { | 173 TEST_F(StructTest, Serialization_ArrayPointers) { |
| 190 NamedRegionPtr region(NamedRegion::New()); | 174 NamedRegionPtr region(NamedRegion::New(std::string("region"))); |
| 191 region->name.emplace("region"); | |
| 192 region->rects.emplace(4); | 175 region->rects.emplace(4); |
| 193 for (size_t i = 0; i < region->rects->size(); ++i) | 176 for (size_t i = 0; i < region->rects->size(); ++i) |
| 194 (*region->rects)[i] = MakeRect(static_cast<int32_t>(i) + 1); | 177 (*region->rects)[i] = MakeRect(static_cast<int32_t>(i) + 1); |
| 195 | 178 |
| 196 size_t size = | 179 size_t size = |
| 197 mojo::internal::PrepareToSerialize<NamedRegionDataView>(region, nullptr); | 180 mojo::internal::PrepareToSerialize<NamedRegionDataView>(region, nullptr); |
| 198 EXPECT_EQ(8U + // header | 181 EXPECT_EQ(8U + // header |
| 199 8U + // name pointer | 182 8U + // name pointer |
| 200 8U + // rects pointer | 183 8U + // rects pointer |
| 201 8U + // name header | 184 8U + // name header |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 240 NamedRegionPtr region2; | 223 NamedRegionPtr region2; |
| 241 mojo::internal::Deserialize<NamedRegionDataView>(data, ®ion2, nullptr); | 224 mojo::internal::Deserialize<NamedRegionDataView>(data, ®ion2, nullptr); |
| 242 | 225 |
| 243 EXPECT_FALSE(region2->name); | 226 EXPECT_FALSE(region2->name); |
| 244 EXPECT_FALSE(region2->rects); | 227 EXPECT_FALSE(region2->rects); |
| 245 } | 228 } |
| 246 | 229 |
| 247 // Tests deserializing structs as a newer version. | 230 // Tests deserializing structs as a newer version. |
| 248 TEST_F(StructTest, Versioning_OldToNew) { | 231 TEST_F(StructTest, Versioning_OldToNew) { |
| 249 { | 232 { |
| 250 MultiVersionStructV0Ptr input(MultiVersionStructV0::New()); | 233 MultiVersionStructV0Ptr input(MultiVersionStructV0::New(123)); |
| 251 input->f_int32 = 123; | 234 MultiVersionStructPtr expected_output(MultiVersionStruct::New(123)); |
| 252 MultiVersionStructPtr expected_output(MultiVersionStruct::New()); | |
| 253 expected_output->f_int32 = 123; | |
| 254 | 235 |
| 255 MultiVersionStructPtr output = | 236 MultiVersionStructPtr output = |
| 256 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); | 237 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); |
| 257 EXPECT_TRUE(output); | 238 EXPECT_TRUE(output); |
| 258 EXPECT_TRUE(output->Equals(*expected_output)); | 239 EXPECT_TRUE(output->Equals(*expected_output)); |
| 259 } | 240 } |
| 260 | 241 |
| 261 { | 242 { |
| 262 MultiVersionStructV1Ptr input(MultiVersionStructV1::New()); | 243 MultiVersionStructV1Ptr input(MultiVersionStructV1::New(123, MakeRect(5))); |
| 263 input->f_int32 = 123; | 244 MultiVersionStructPtr expected_output( |
| 264 input->f_rect = MakeRect(5); | 245 MultiVersionStruct::New(123, MakeRect(5))); |
| 265 MultiVersionStructPtr expected_output(MultiVersionStruct::New()); | |
| 266 expected_output->f_int32 = 123; | |
| 267 expected_output->f_rect = MakeRect(5); | |
| 268 | 246 |
| 269 MultiVersionStructPtr output = | 247 MultiVersionStructPtr output = |
| 270 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); | 248 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); |
| 271 EXPECT_TRUE(output); | 249 EXPECT_TRUE(output); |
| 272 EXPECT_TRUE(output->Equals(*expected_output)); | 250 EXPECT_TRUE(output->Equals(*expected_output)); |
| 273 } | 251 } |
| 274 | 252 |
| 275 { | 253 { |
| 276 MultiVersionStructV3Ptr input(MultiVersionStructV3::New()); | 254 MultiVersionStructV3Ptr input( |
| 277 input->f_int32 = 123; | 255 MultiVersionStructV3::New(123, MakeRect(5), std::string("hello"))); |
| 278 input->f_rect = MakeRect(5); | 256 MultiVersionStructPtr expected_output( |
| 279 input->f_string.emplace("hello"); | 257 MultiVersionStruct::New(123, MakeRect(5), std::string("hello"))); |
| 280 MultiVersionStructPtr expected_output(MultiVersionStruct::New()); | |
| 281 expected_output->f_int32 = 123; | |
| 282 expected_output->f_rect = MakeRect(5); | |
| 283 expected_output->f_string.emplace("hello"); | |
| 284 | 258 |
| 285 MultiVersionStructPtr output = | 259 MultiVersionStructPtr output = |
| 286 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); | 260 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); |
| 287 EXPECT_TRUE(output); | 261 EXPECT_TRUE(output); |
| 288 EXPECT_TRUE(output->Equals(*expected_output)); | 262 EXPECT_TRUE(output->Equals(*expected_output)); |
| 289 } | 263 } |
| 290 | 264 |
| 291 { | 265 { |
| 292 MultiVersionStructV5Ptr input(MultiVersionStructV5::New()); | 266 MultiVersionStructV5Ptr input(MultiVersionStructV5::New( |
| 293 input->f_int32 = 123; | 267 123, MakeRect(5), std::string("hello"), std::vector<int8_t>{10, 9, 8})); |
| 294 input->f_rect = MakeRect(5); | 268 MultiVersionStructPtr expected_output(MultiVersionStruct::New( |
| 295 input->f_string.emplace("hello"); | 269 123, MakeRect(5), std::string("hello"), std::vector<int8_t>{10, 9, 8})); |
| 296 input->f_array.emplace(3); | |
| 297 (*input->f_array)[0] = 10; | |
| 298 (*input->f_array)[1] = 9; | |
| 299 (*input->f_array)[2] = 8; | |
| 300 MultiVersionStructPtr expected_output(MultiVersionStruct::New()); | |
| 301 expected_output->f_int32 = 123; | |
| 302 expected_output->f_rect = MakeRect(5); | |
| 303 expected_output->f_string.emplace("hello"); | |
| 304 expected_output->f_array.emplace(3); | |
| 305 (*expected_output->f_array)[0] = 10; | |
| 306 (*expected_output->f_array)[1] = 9; | |
| 307 (*expected_output->f_array)[2] = 8; | |
| 308 | 270 |
| 309 MultiVersionStructPtr output = | 271 MultiVersionStructPtr output = |
| 310 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); | 272 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); |
| 311 EXPECT_TRUE(output); | 273 EXPECT_TRUE(output); |
| 312 EXPECT_TRUE(output->Equals(*expected_output)); | 274 EXPECT_TRUE(output->Equals(*expected_output)); |
| 313 } | 275 } |
| 314 | 276 |
| 315 { | 277 { |
| 316 MultiVersionStructV7Ptr input(MultiVersionStructV7::New()); | |
| 317 input->f_int32 = 123; | |
| 318 input->f_rect = MakeRect(5); | |
| 319 input->f_string.emplace("hello"); | |
| 320 input->f_array.emplace(3); | |
| 321 (*input->f_array)[0] = 10; | |
| 322 (*input->f_array)[1] = 9; | |
| 323 (*input->f_array)[2] = 8; | |
| 324 MessagePipe pipe; | 278 MessagePipe pipe; |
| 325 input->f_message_pipe = std::move(pipe.handle0); | 279 MultiVersionStructV7Ptr input(MultiVersionStructV7::New( |
| 280 123, MakeRect(5), std::string("hello"), std::vector<int8_t>{10, 9, 8}, |
| 281 std::move(pipe.handle0))); |
| 326 | 282 |
| 327 MultiVersionStructPtr expected_output(MultiVersionStruct::New()); | 283 MultiVersionStructPtr expected_output(MultiVersionStruct::New( |
| 328 expected_output->f_int32 = 123; | 284 123, MakeRect(5), std::string("hello"), std::vector<int8_t>{10, 9, 8})); |
| 329 expected_output->f_rect = MakeRect(5); | |
| 330 expected_output->f_string.emplace("hello"); | |
| 331 expected_output->f_array.emplace(3); | |
| 332 (*expected_output->f_array)[0] = 10; | |
| 333 (*expected_output->f_array)[1] = 9; | |
| 334 (*expected_output->f_array)[2] = 8; | |
| 335 // Save the raw handle value separately so that we can compare later. | 285 // Save the raw handle value separately so that we can compare later. |
| 336 MojoHandle expected_handle = input->f_message_pipe.get().value(); | 286 MojoHandle expected_handle = input->f_message_pipe.get().value(); |
| 337 | 287 |
| 338 MultiVersionStructPtr output = | 288 MultiVersionStructPtr output = |
| 339 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); | 289 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); |
| 340 EXPECT_TRUE(output); | 290 EXPECT_TRUE(output); |
| 341 EXPECT_EQ(expected_handle, output->f_message_pipe.get().value()); | 291 EXPECT_EQ(expected_handle, output->f_message_pipe.get().value()); |
| 342 output->f_message_pipe.reset(); | 292 output->f_message_pipe.reset(); |
| 343 EXPECT_TRUE(output->Equals(*expected_output)); | 293 EXPECT_TRUE(output->Equals(*expected_output)); |
| 344 } | 294 } |
| 345 } | 295 } |
| 346 | 296 |
| 347 // Tests deserializing structs as an older version. | 297 // Tests deserializing structs as an older version. |
| 348 TEST_F(StructTest, Versioning_NewToOld) { | 298 TEST_F(StructTest, Versioning_NewToOld) { |
| 349 { | 299 { |
| 350 MultiVersionStructPtr input = MakeMultiVersionStruct(); | 300 MultiVersionStructPtr input = MakeMultiVersionStruct(); |
| 351 MultiVersionStructV7Ptr expected_output(MultiVersionStructV7::New()); | 301 MultiVersionStructV7Ptr expected_output(MultiVersionStructV7::New( |
| 352 expected_output->f_int32 = 123; | 302 123, MakeRect(5), std::string("hello"), std::vector<int8_t>{10, 9, 8})); |
| 353 expected_output->f_rect = MakeRect(5); | |
| 354 expected_output->f_string.emplace("hello"); | |
| 355 expected_output->f_array.emplace(3); | |
| 356 (*expected_output->f_array)[0] = 10; | |
| 357 (*expected_output->f_array)[1] = 9; | |
| 358 (*expected_output->f_array)[2] = 8; | |
| 359 // Save the raw handle value separately so that we can compare later. | 303 // Save the raw handle value separately so that we can compare later. |
| 360 MojoHandle expected_handle = input->f_message_pipe.get().value(); | 304 MojoHandle expected_handle = input->f_message_pipe.get().value(); |
| 361 | 305 |
| 362 MultiVersionStructV7Ptr output = | 306 MultiVersionStructV7Ptr output = |
| 363 SerializeAndDeserialize<MultiVersionStructV7Ptr>(std::move(input)); | 307 SerializeAndDeserialize<MultiVersionStructV7Ptr>(std::move(input)); |
| 364 EXPECT_TRUE(output); | 308 EXPECT_TRUE(output); |
| 365 EXPECT_EQ(expected_handle, output->f_message_pipe.get().value()); | 309 EXPECT_EQ(expected_handle, output->f_message_pipe.get().value()); |
| 366 output->f_message_pipe.reset(); | 310 output->f_message_pipe.reset(); |
| 367 EXPECT_TRUE(output->Equals(*expected_output)); | 311 EXPECT_TRUE(output->Equals(*expected_output)); |
| 368 } | 312 } |
| 369 | 313 |
| 370 { | 314 { |
| 371 MultiVersionStructPtr input = MakeMultiVersionStruct(); | 315 MultiVersionStructPtr input = MakeMultiVersionStruct(); |
| 372 MultiVersionStructV5Ptr expected_output(MultiVersionStructV5::New()); | 316 MultiVersionStructV5Ptr expected_output(MultiVersionStructV5::New( |
| 373 expected_output->f_int32 = 123; | 317 123, MakeRect(5), std::string("hello"), std::vector<int8_t>{10, 9, 8})); |
| 374 expected_output->f_rect = MakeRect(5); | |
| 375 expected_output->f_string.emplace("hello"); | |
| 376 expected_output->f_array.emplace(3); | |
| 377 (*expected_output->f_array)[0] = 10; | |
| 378 (*expected_output->f_array)[1] = 9; | |
| 379 (*expected_output->f_array)[2] = 8; | |
| 380 | 318 |
| 381 MultiVersionStructV5Ptr output = | 319 MultiVersionStructV5Ptr output = |
| 382 SerializeAndDeserialize<MultiVersionStructV5Ptr>(std::move(input)); | 320 SerializeAndDeserialize<MultiVersionStructV5Ptr>(std::move(input)); |
| 383 EXPECT_TRUE(output); | 321 EXPECT_TRUE(output); |
| 384 EXPECT_TRUE(output->Equals(*expected_output)); | 322 EXPECT_TRUE(output->Equals(*expected_output)); |
| 385 } | 323 } |
| 386 | 324 |
| 387 { | 325 { |
| 388 MultiVersionStructPtr input = MakeMultiVersionStruct(); | 326 MultiVersionStructPtr input = MakeMultiVersionStruct(); |
| 389 MultiVersionStructV3Ptr expected_output(MultiVersionStructV3::New()); | 327 MultiVersionStructV3Ptr expected_output( |
| 390 expected_output->f_int32 = 123; | 328 MultiVersionStructV3::New(123, MakeRect(5), std::string("hello"))); |
| 391 expected_output->f_rect = MakeRect(5); | |
| 392 expected_output->f_string.emplace("hello"); | |
| 393 | 329 |
| 394 MultiVersionStructV3Ptr output = | 330 MultiVersionStructV3Ptr output = |
| 395 SerializeAndDeserialize<MultiVersionStructV3Ptr>(std::move(input)); | 331 SerializeAndDeserialize<MultiVersionStructV3Ptr>(std::move(input)); |
| 396 EXPECT_TRUE(output); | 332 EXPECT_TRUE(output); |
| 397 EXPECT_TRUE(output->Equals(*expected_output)); | 333 EXPECT_TRUE(output->Equals(*expected_output)); |
| 398 } | 334 } |
| 399 | 335 |
| 400 { | 336 { |
| 401 MultiVersionStructPtr input = MakeMultiVersionStruct(); | 337 MultiVersionStructPtr input = MakeMultiVersionStruct(); |
| 402 MultiVersionStructV1Ptr expected_output(MultiVersionStructV1::New()); | 338 MultiVersionStructV1Ptr expected_output( |
| 403 expected_output->f_int32 = 123; | 339 MultiVersionStructV1::New(123, MakeRect(5))); |
| 404 expected_output->f_rect = MakeRect(5); | |
| 405 | 340 |
| 406 MultiVersionStructV1Ptr output = | 341 MultiVersionStructV1Ptr output = |
| 407 SerializeAndDeserialize<MultiVersionStructV1Ptr>(std::move(input)); | 342 SerializeAndDeserialize<MultiVersionStructV1Ptr>(std::move(input)); |
| 408 EXPECT_TRUE(output); | 343 EXPECT_TRUE(output); |
| 409 EXPECT_TRUE(output->Equals(*expected_output)); | 344 EXPECT_TRUE(output->Equals(*expected_output)); |
| 410 } | 345 } |
| 411 | 346 |
| 412 { | 347 { |
| 413 MultiVersionStructPtr input = MakeMultiVersionStruct(); | 348 MultiVersionStructPtr input = MakeMultiVersionStruct(); |
| 414 MultiVersionStructV0Ptr expected_output(MultiVersionStructV0::New()); | 349 MultiVersionStructV0Ptr expected_output(MultiVersionStructV0::New(123)); |
| 415 expected_output->f_int32 = 123; | |
| 416 | 350 |
| 417 MultiVersionStructV0Ptr output = | 351 MultiVersionStructV0Ptr output = |
| 418 SerializeAndDeserialize<MultiVersionStructV0Ptr>(std::move(input)); | 352 SerializeAndDeserialize<MultiVersionStructV0Ptr>(std::move(input)); |
| 419 EXPECT_TRUE(output); | 353 EXPECT_TRUE(output); |
| 420 EXPECT_TRUE(output->Equals(*expected_output)); | 354 EXPECT_TRUE(output->Equals(*expected_output)); |
| 421 } | 355 } |
| 422 } | 356 } |
| 423 | 357 |
| 424 // Serialization test for native struct. | 358 // Serialization test for native struct. |
| 425 TEST_F(StructTest, Serialization_NativeStruct) { | 359 TEST_F(StructTest, Serialization_NativeStruct) { |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 520 RectPtr cloned_rect = rect.Clone(); | 454 RectPtr cloned_rect = rect.Clone(); |
| 521 auto data = Rect::Serialize(&rect); | 455 auto data = Rect::Serialize(&rect); |
| 522 | 456 |
| 523 RectPtr output; | 457 RectPtr output; |
| 524 ASSERT_TRUE(Rect::Deserialize(std::move(data), &output)); | 458 ASSERT_TRUE(Rect::Deserialize(std::move(data), &output)); |
| 525 EXPECT_TRUE(output.Equals(cloned_rect)); | 459 EXPECT_TRUE(output.Equals(cloned_rect)); |
| 526 } | 460 } |
| 527 | 461 |
| 528 { | 462 { |
| 529 // A struct containing other objects. | 463 // A struct containing other objects. |
| 530 NamedRegionPtr region(NamedRegion::New()); | 464 NamedRegionPtr region(NamedRegion::New(std::string("region"))); |
| 531 region->name.emplace("region"); | |
| 532 region->rects.emplace(3); | 465 region->rects.emplace(3); |
| 533 for (size_t i = 0; i < region->rects->size(); ++i) | 466 for (size_t i = 0; i < region->rects->size(); ++i) |
| 534 (*region->rects)[i] = MakeRect(static_cast<int32_t>(i) + 1); | 467 (*region->rects)[i] = MakeRect(static_cast<int32_t>(i) + 1); |
| 535 | 468 |
| 536 NamedRegionPtr cloned_region = region.Clone(); | 469 NamedRegionPtr cloned_region = region.Clone(); |
| 537 auto data = NamedRegion::Serialize(®ion); | 470 auto data = NamedRegion::Serialize(®ion); |
| 538 | 471 |
| 539 // Make sure that the serialized result gets pointers encoded properly. | 472 // Make sure that the serialized result gets pointers encoded properly. |
| 540 auto cloned_data = data; | 473 auto cloned_data = data; |
| 541 NamedRegionPtr output; | 474 NamedRegionPtr output; |
| 542 ASSERT_TRUE(NamedRegion::Deserialize(std::move(cloned_data), &output)); | 475 ASSERT_TRUE(NamedRegion::Deserialize(std::move(cloned_data), &output)); |
| 543 EXPECT_TRUE(output.Equals(cloned_region)); | 476 EXPECT_TRUE(output.Equals(cloned_region)); |
| 544 } | 477 } |
| 545 | 478 |
| 546 { | 479 { |
| 547 // Deserialization failure. | 480 // Deserialization failure. |
| 548 RectPtr rect = MakeRect(); | 481 RectPtr rect = MakeRect(); |
| 549 auto data = Rect::Serialize(&rect); | 482 auto data = Rect::Serialize(&rect); |
| 550 | 483 |
| 551 NamedRegionPtr output; | 484 NamedRegionPtr output; |
| 552 EXPECT_FALSE(NamedRegion::Deserialize(std::move(data), &output)); | 485 EXPECT_FALSE(NamedRegion::Deserialize(std::move(data), &output)); |
| 553 } | 486 } |
| 554 } | 487 } |
| 555 | 488 |
| 556 } // namespace test | 489 } // namespace test |
| 557 } // namespace mojo | 490 } // namespace mojo |
| OLD | NEW |