| 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 std::vector<RectPtr> rects; |
| 191 region->name.emplace("region"); | 175 for (size_t i = 0; i < 4; ++i) |
| 192 region->rects.emplace(4); | 176 rects.push_back(MakeRect(static_cast<int32_t>(i) + 1)); |
| 193 for (size_t i = 0; i < region->rects->size(); ++i) | 177 |
| 194 (*region->rects)[i] = MakeRect(static_cast<int32_t>(i) + 1); | 178 NamedRegionPtr region( |
| 179 NamedRegion::New(std::string("region"), std::move(rects))); |
| 195 | 180 |
| 196 size_t size = | 181 size_t size = |
| 197 mojo::internal::PrepareToSerialize<NamedRegionDataView>(region, nullptr); | 182 mojo::internal::PrepareToSerialize<NamedRegionDataView>(region, nullptr); |
| 198 EXPECT_EQ(8U + // header | 183 EXPECT_EQ(8U + // header |
| 199 8U + // name pointer | 184 8U + // name pointer |
| 200 8U + // rects pointer | 185 8U + // rects pointer |
| 201 8U + // name header | 186 8U + // name header |
| 202 8U + // name payload (rounded up) | 187 8U + // name payload (rounded up) |
| 203 8U + // rects header | 188 8U + // rects header |
| 204 4 * 8U + // rects payload (four pointers) | 189 4 * 8U + // rects payload (four pointers) |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 240 NamedRegionPtr region2; | 225 NamedRegionPtr region2; |
| 241 mojo::internal::Deserialize<NamedRegionDataView>(data, ®ion2, nullptr); | 226 mojo::internal::Deserialize<NamedRegionDataView>(data, ®ion2, nullptr); |
| 242 | 227 |
| 243 EXPECT_FALSE(region2->name); | 228 EXPECT_FALSE(region2->name); |
| 244 EXPECT_FALSE(region2->rects); | 229 EXPECT_FALSE(region2->rects); |
| 245 } | 230 } |
| 246 | 231 |
| 247 // Tests deserializing structs as a newer version. | 232 // Tests deserializing structs as a newer version. |
| 248 TEST_F(StructTest, Versioning_OldToNew) { | 233 TEST_F(StructTest, Versioning_OldToNew) { |
| 249 { | 234 { |
| 250 MultiVersionStructV0Ptr input(MultiVersionStructV0::New()); | 235 MultiVersionStructV0Ptr input(MultiVersionStructV0::New(123)); |
| 251 input->f_int32 = 123; | 236 MultiVersionStructPtr expected_output(MultiVersionStruct::New(123)); |
| 252 MultiVersionStructPtr expected_output(MultiVersionStruct::New()); | |
| 253 expected_output->f_int32 = 123; | |
| 254 | 237 |
| 255 MultiVersionStructPtr output = | 238 MultiVersionStructPtr output = |
| 256 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); | 239 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); |
| 257 EXPECT_TRUE(output); | 240 EXPECT_TRUE(output); |
| 258 EXPECT_TRUE(output->Equals(*expected_output)); | 241 EXPECT_TRUE(output->Equals(*expected_output)); |
| 259 } | 242 } |
| 260 | 243 |
| 261 { | 244 { |
| 262 MultiVersionStructV1Ptr input(MultiVersionStructV1::New()); | 245 MultiVersionStructV1Ptr input(MultiVersionStructV1::New(123, MakeRect(5))); |
| 263 input->f_int32 = 123; | 246 MultiVersionStructPtr expected_output( |
| 264 input->f_rect = MakeRect(5); | 247 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 | 248 |
| 269 MultiVersionStructPtr output = | 249 MultiVersionStructPtr output = |
| 270 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); | 250 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); |
| 271 EXPECT_TRUE(output); | 251 EXPECT_TRUE(output); |
| 272 EXPECT_TRUE(output->Equals(*expected_output)); | 252 EXPECT_TRUE(output->Equals(*expected_output)); |
| 273 } | 253 } |
| 274 | 254 |
| 275 { | 255 { |
| 276 MultiVersionStructV3Ptr input(MultiVersionStructV3::New()); | 256 MultiVersionStructV3Ptr input( |
| 277 input->f_int32 = 123; | 257 MultiVersionStructV3::New(123, MakeRect(5), std::string("hello"))); |
| 278 input->f_rect = MakeRect(5); | 258 MultiVersionStructPtr expected_output( |
| 279 input->f_string.emplace("hello"); | 259 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 | 260 |
| 285 MultiVersionStructPtr output = | 261 MultiVersionStructPtr output = |
| 286 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); | 262 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); |
| 287 EXPECT_TRUE(output); | 263 EXPECT_TRUE(output); |
| 288 EXPECT_TRUE(output->Equals(*expected_output)); | 264 EXPECT_TRUE(output->Equals(*expected_output)); |
| 289 } | 265 } |
| 290 | 266 |
| 291 { | 267 { |
| 292 MultiVersionStructV5Ptr input(MultiVersionStructV5::New()); | 268 MultiVersionStructV5Ptr input(MultiVersionStructV5::New( |
| 293 input->f_int32 = 123; | 269 123, MakeRect(5), std::string("hello"), std::vector<int8_t>{10, 9, 8})); |
| 294 input->f_rect = MakeRect(5); | 270 MultiVersionStructPtr expected_output(MultiVersionStruct::New( |
| 295 input->f_string.emplace("hello"); | 271 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 | 272 |
| 309 MultiVersionStructPtr output = | 273 MultiVersionStructPtr output = |
| 310 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); | 274 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); |
| 311 EXPECT_TRUE(output); | 275 EXPECT_TRUE(output); |
| 312 EXPECT_TRUE(output->Equals(*expected_output)); | 276 EXPECT_TRUE(output->Equals(*expected_output)); |
| 313 } | 277 } |
| 314 | 278 |
| 315 { | 279 { |
| 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; | 280 MessagePipe pipe; |
| 325 input->f_message_pipe = std::move(pipe.handle0); | 281 MultiVersionStructV7Ptr input(MultiVersionStructV7::New( |
| 282 123, MakeRect(5), std::string("hello"), std::vector<int8_t>{10, 9, 8}, |
| 283 std::move(pipe.handle0), false)); |
| 326 | 284 |
| 327 MultiVersionStructPtr expected_output(MultiVersionStruct::New()); | 285 MultiVersionStructPtr expected_output(MultiVersionStruct::New( |
| 328 expected_output->f_int32 = 123; | 286 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. | 287 // Save the raw handle value separately so that we can compare later. |
| 336 MojoHandle expected_handle = input->f_message_pipe.get().value(); | 288 MojoHandle expected_handle = input->f_message_pipe.get().value(); |
| 337 | 289 |
| 338 MultiVersionStructPtr output = | 290 MultiVersionStructPtr output = |
| 339 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); | 291 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); |
| 340 EXPECT_TRUE(output); | 292 EXPECT_TRUE(output); |
| 341 EXPECT_EQ(expected_handle, output->f_message_pipe.get().value()); | 293 EXPECT_EQ(expected_handle, output->f_message_pipe.get().value()); |
| 342 output->f_message_pipe.reset(); | 294 output->f_message_pipe.reset(); |
| 343 EXPECT_TRUE(output->Equals(*expected_output)); | 295 EXPECT_TRUE(output->Equals(*expected_output)); |
| 344 } | 296 } |
| 345 } | 297 } |
| 346 | 298 |
| 347 // Tests deserializing structs as an older version. | 299 // Tests deserializing structs as an older version. |
| 348 TEST_F(StructTest, Versioning_NewToOld) { | 300 TEST_F(StructTest, Versioning_NewToOld) { |
| 349 { | 301 { |
| 350 MultiVersionStructPtr input = MakeMultiVersionStruct(); | 302 MultiVersionStructPtr input = MakeMultiVersionStruct(); |
| 351 MultiVersionStructV7Ptr expected_output(MultiVersionStructV7::New()); | 303 MultiVersionStructV7Ptr expected_output(MultiVersionStructV7::New( |
| 352 expected_output->f_int32 = 123; | 304 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. | 305 // Save the raw handle value separately so that we can compare later. |
| 360 MojoHandle expected_handle = input->f_message_pipe.get().value(); | 306 MojoHandle expected_handle = input->f_message_pipe.get().value(); |
| 361 | 307 |
| 362 MultiVersionStructV7Ptr output = | 308 MultiVersionStructV7Ptr output = |
| 363 SerializeAndDeserialize<MultiVersionStructV7Ptr>(std::move(input)); | 309 SerializeAndDeserialize<MultiVersionStructV7Ptr>(std::move(input)); |
| 364 EXPECT_TRUE(output); | 310 EXPECT_TRUE(output); |
| 365 EXPECT_EQ(expected_handle, output->f_message_pipe.get().value()); | 311 EXPECT_EQ(expected_handle, output->f_message_pipe.get().value()); |
| 366 output->f_message_pipe.reset(); | 312 output->f_message_pipe.reset(); |
| 367 EXPECT_TRUE(output->Equals(*expected_output)); | 313 EXPECT_TRUE(output->Equals(*expected_output)); |
| 368 } | 314 } |
| 369 | 315 |
| 370 { | 316 { |
| 371 MultiVersionStructPtr input = MakeMultiVersionStruct(); | 317 MultiVersionStructPtr input = MakeMultiVersionStruct(); |
| 372 MultiVersionStructV5Ptr expected_output(MultiVersionStructV5::New()); | 318 MultiVersionStructV5Ptr expected_output(MultiVersionStructV5::New( |
| 373 expected_output->f_int32 = 123; | 319 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 | 320 |
| 381 MultiVersionStructV5Ptr output = | 321 MultiVersionStructV5Ptr output = |
| 382 SerializeAndDeserialize<MultiVersionStructV5Ptr>(std::move(input)); | 322 SerializeAndDeserialize<MultiVersionStructV5Ptr>(std::move(input)); |
| 383 EXPECT_TRUE(output); | 323 EXPECT_TRUE(output); |
| 384 EXPECT_TRUE(output->Equals(*expected_output)); | 324 EXPECT_TRUE(output->Equals(*expected_output)); |
| 385 } | 325 } |
| 386 | 326 |
| 387 { | 327 { |
| 388 MultiVersionStructPtr input = MakeMultiVersionStruct(); | 328 MultiVersionStructPtr input = MakeMultiVersionStruct(); |
| 389 MultiVersionStructV3Ptr expected_output(MultiVersionStructV3::New()); | 329 MultiVersionStructV3Ptr expected_output( |
| 390 expected_output->f_int32 = 123; | 330 MultiVersionStructV3::New(123, MakeRect(5), std::string("hello"))); |
| 391 expected_output->f_rect = MakeRect(5); | |
| 392 expected_output->f_string.emplace("hello"); | |
| 393 | 331 |
| 394 MultiVersionStructV3Ptr output = | 332 MultiVersionStructV3Ptr output = |
| 395 SerializeAndDeserialize<MultiVersionStructV3Ptr>(std::move(input)); | 333 SerializeAndDeserialize<MultiVersionStructV3Ptr>(std::move(input)); |
| 396 EXPECT_TRUE(output); | 334 EXPECT_TRUE(output); |
| 397 EXPECT_TRUE(output->Equals(*expected_output)); | 335 EXPECT_TRUE(output->Equals(*expected_output)); |
| 398 } | 336 } |
| 399 | 337 |
| 400 { | 338 { |
| 401 MultiVersionStructPtr input = MakeMultiVersionStruct(); | 339 MultiVersionStructPtr input = MakeMultiVersionStruct(); |
| 402 MultiVersionStructV1Ptr expected_output(MultiVersionStructV1::New()); | 340 MultiVersionStructV1Ptr expected_output( |
| 403 expected_output->f_int32 = 123; | 341 MultiVersionStructV1::New(123, MakeRect(5))); |
| 404 expected_output->f_rect = MakeRect(5); | |
| 405 | 342 |
| 406 MultiVersionStructV1Ptr output = | 343 MultiVersionStructV1Ptr output = |
| 407 SerializeAndDeserialize<MultiVersionStructV1Ptr>(std::move(input)); | 344 SerializeAndDeserialize<MultiVersionStructV1Ptr>(std::move(input)); |
| 408 EXPECT_TRUE(output); | 345 EXPECT_TRUE(output); |
| 409 EXPECT_TRUE(output->Equals(*expected_output)); | 346 EXPECT_TRUE(output->Equals(*expected_output)); |
| 410 } | 347 } |
| 411 | 348 |
| 412 { | 349 { |
| 413 MultiVersionStructPtr input = MakeMultiVersionStruct(); | 350 MultiVersionStructPtr input = MakeMultiVersionStruct(); |
| 414 MultiVersionStructV0Ptr expected_output(MultiVersionStructV0::New()); | 351 MultiVersionStructV0Ptr expected_output(MultiVersionStructV0::New(123)); |
| 415 expected_output->f_int32 = 123; | |
| 416 | 352 |
| 417 MultiVersionStructV0Ptr output = | 353 MultiVersionStructV0Ptr output = |
| 418 SerializeAndDeserialize<MultiVersionStructV0Ptr>(std::move(input)); | 354 SerializeAndDeserialize<MultiVersionStructV0Ptr>(std::move(input)); |
| 419 EXPECT_TRUE(output); | 355 EXPECT_TRUE(output); |
| 420 EXPECT_TRUE(output->Equals(*expected_output)); | 356 EXPECT_TRUE(output->Equals(*expected_output)); |
| 421 } | 357 } |
| 422 } | 358 } |
| 423 | 359 |
| 424 // Serialization test for native struct. | 360 // Serialization test for native struct. |
| 425 TEST_F(StructTest, Serialization_NativeStruct) { | 361 TEST_F(StructTest, Serialization_NativeStruct) { |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 520 RectPtr cloned_rect = rect.Clone(); | 456 RectPtr cloned_rect = rect.Clone(); |
| 521 auto data = Rect::Serialize(&rect); | 457 auto data = Rect::Serialize(&rect); |
| 522 | 458 |
| 523 RectPtr output; | 459 RectPtr output; |
| 524 ASSERT_TRUE(Rect::Deserialize(std::move(data), &output)); | 460 ASSERT_TRUE(Rect::Deserialize(std::move(data), &output)); |
| 525 EXPECT_TRUE(output.Equals(cloned_rect)); | 461 EXPECT_TRUE(output.Equals(cloned_rect)); |
| 526 } | 462 } |
| 527 | 463 |
| 528 { | 464 { |
| 529 // A struct containing other objects. | 465 // A struct containing other objects. |
| 530 NamedRegionPtr region(NamedRegion::New()); | 466 std::vector<RectPtr> rects; |
| 531 region->name.emplace("region"); | 467 for (size_t i = 0; i < 3; ++i) |
| 532 region->rects.emplace(3); | 468 rects.push_back(MakeRect(static_cast<int32_t>(i) + 1)); |
| 533 for (size_t i = 0; i < region->rects->size(); ++i) | 469 NamedRegionPtr region( |
| 534 (*region->rects)[i] = MakeRect(static_cast<int32_t>(i) + 1); | 470 NamedRegion::New(std::string("region"), std::move(rects))); |
| 535 | 471 |
| 536 NamedRegionPtr cloned_region = region.Clone(); | 472 NamedRegionPtr cloned_region = region.Clone(); |
| 537 auto data = NamedRegion::Serialize(®ion); | 473 auto data = NamedRegion::Serialize(®ion); |
| 538 | 474 |
| 539 // Make sure that the serialized result gets pointers encoded properly. | 475 // Make sure that the serialized result gets pointers encoded properly. |
| 540 auto cloned_data = data; | 476 auto cloned_data = data; |
| 541 NamedRegionPtr output; | 477 NamedRegionPtr output; |
| 542 ASSERT_TRUE(NamedRegion::Deserialize(std::move(cloned_data), &output)); | 478 ASSERT_TRUE(NamedRegion::Deserialize(std::move(cloned_data), &output)); |
| 543 EXPECT_TRUE(output.Equals(cloned_region)); | 479 EXPECT_TRUE(output.Equals(cloned_region)); |
| 544 } | 480 } |
| 545 | 481 |
| 546 { | 482 { |
| 547 // Deserialization failure. | 483 // Deserialization failure. |
| 548 RectPtr rect = MakeRect(); | 484 RectPtr rect = MakeRect(); |
| 549 auto data = Rect::Serialize(&rect); | 485 auto data = Rect::Serialize(&rect); |
| 550 | 486 |
| 551 NamedRegionPtr output; | 487 NamedRegionPtr output; |
| 552 EXPECT_FALSE(NamedRegion::Deserialize(std::move(data), &output)); | 488 EXPECT_FALSE(NamedRegion::Deserialize(std::move(data), &output)); |
| 553 } | 489 } |
| 554 } | 490 } |
| 555 | 491 |
| 492 TEST_F(StructTest, VersionedStructConstructor) { |
| 493 auto reordered = ReorderedStruct::New(123, 456, 789); |
| 494 EXPECT_EQ(123, reordered->a); |
| 495 EXPECT_EQ(456, reordered->b); |
| 496 EXPECT_EQ(789, reordered->c); |
| 497 |
| 498 reordered = ReorderedStruct::New(123, 456); |
| 499 EXPECT_EQ(123, reordered->a); |
| 500 EXPECT_EQ(6, reordered->b); |
| 501 EXPECT_EQ(456, reordered->c); |
| 502 |
| 503 reordered = ReorderedStruct::New(123); |
| 504 EXPECT_EQ(3, reordered->a); |
| 505 EXPECT_EQ(6, reordered->b); |
| 506 EXPECT_EQ(123, reordered->c); |
| 507 |
| 508 reordered = ReorderedStruct::New(); |
| 509 EXPECT_EQ(3, reordered->a); |
| 510 EXPECT_EQ(6, reordered->b); |
| 511 EXPECT_EQ(1, reordered->c); |
| 512 } |
| 513 |
| 556 } // namespace test | 514 } // namespace test |
| 557 } // namespace mojo | 515 } // namespace mojo |
| OLD | NEW |