Chromium Code Reviews| 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 <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" |
| 11 #include "mojo/public/interfaces/bindings/tests/test_unions.mojom.h" | |
| 11 #include "testing/gtest/include/gtest/gtest.h" | 12 #include "testing/gtest/include/gtest/gtest.h" |
| 12 | 13 |
| 13 namespace mojo { | 14 namespace mojo { |
| 14 namespace test { | 15 namespace test { |
| 15 namespace { | 16 namespace { |
| 16 | 17 |
| 17 RectPtr MakeRect(int32_t factor = 1) { | 18 RectPtr MakeRect(int32_t factor = 1) { |
| 18 RectPtr rect(Rect::New()); | 19 RectPtr rect(Rect::New()); |
| 19 rect->x = 1 * factor; | 20 rect->x = 1 * factor; |
| 20 rect->y = 2 * factor; | 21 rect->y = 2 * factor; |
| (...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 412 MultiVersionStructV0Ptr expected_output(MultiVersionStructV0::New()); | 413 MultiVersionStructV0Ptr expected_output(MultiVersionStructV0::New()); |
| 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 | 422 |
| 423 TEST_F(StructTest, PodUnionInStructClone) { | |
| 424 SmallStructPtr small_struct(SmallStruct::New()); | |
| 425 small_struct->pod_union = PodUnion::New(); | |
| 426 small_struct->pod_union->set_f_int8(10); | |
| 427 | |
| 428 SmallStructPtr clone = small_struct.Clone(); | |
| 429 EXPECT_EQ(10, clone->pod_union->get_f_int8()); | |
| 430 } | |
| 431 | |
| 432 TEST_F(StructTest, PodUnionInStructSerialization) { | |
|
yzshen1
2015/03/26 07:30:14
nit: the naming is not very consistent within this
azani
2015/03/26 22:27:39
Done.
| |
| 433 SmallStructPtr small_struct(SmallStruct::New()); | |
| 434 small_struct->pod_union = PodUnion::New(); | |
| 435 small_struct->pod_union->set_f_int32(10); | |
| 436 | |
| 437 size_t size = GetSerializedSize_(small_struct); | |
| 438 | |
| 439 mojo::internal::FixedBuffer buf(size); | |
| 440 internal::SmallStruct_Data* data = nullptr; | |
| 441 Serialize_(small_struct.Pass(), &buf, &data); | |
| 442 | |
| 443 SmallStructPtr deserialized; | |
| 444 Deserialize_(data, &deserialized); | |
| 445 | |
| 446 EXPECT_EQ(10, deserialized->pod_union->get_f_int32()); | |
| 447 } | |
| 448 | |
| 449 TEST_F(StructTest, ObjectUnionInStructSerialization) { | |
| 450 SmallObjStructPtr obj_struct(SmallObjStruct::New()); | |
| 451 obj_struct->obj_union = ObjectUnion::New(); | |
| 452 String hello("hello world"); | |
| 453 obj_struct->obj_union->set_f_string(hello); | |
| 454 | |
| 455 size_t size = GetSerializedSize_(obj_struct); | |
| 456 | |
| 457 mojo::internal::FixedBuffer buf(size); | |
| 458 internal::SmallObjStruct_Data* data = nullptr; | |
| 459 Serialize_(obj_struct.Pass(), &buf, &data); | |
| 460 | |
| 461 SmallObjStructPtr deserialized; | |
| 462 Deserialize_(data, &deserialized); | |
| 463 | |
| 464 EXPECT_EQ(hello, deserialized->obj_union->get_f_string()); | |
| 465 } | |
| 466 | |
| 467 TEST_F(StructTest, UnionsInStructsValidation) { | |
| 468 SmallStructPtr small_struct(SmallStruct::New()); | |
| 469 small_struct->pod_union = PodUnion::New(); | |
| 470 small_struct->pod_union->set_f_int32(10); | |
| 471 | |
| 472 size_t size = GetSerializedSize_(small_struct); | |
| 473 | |
| 474 mojo::internal::FixedBuffer buf(size); | |
| 475 internal::SmallStruct_Data* data = nullptr; | |
| 476 Serialize_(small_struct.Pass(), &buf, &data); | |
| 477 | |
| 478 void* raw_buf = buf.Leak(); | |
| 479 mojo::internal::BoundsChecker bounds_checker(data, size, 0); | |
| 480 EXPECT_TRUE(internal::SmallStruct_Data::Validate(raw_buf, &bounds_checker)); | |
| 481 free(raw_buf); | |
| 482 } | |
| 483 | |
| 484 TEST_F(StructTest, PodUnionInStructValidationFailure) { | |
| 485 SmallStructPtr small_struct(SmallStruct::New()); | |
| 486 small_struct->pod_union = PodUnion::New(); | |
| 487 small_struct->pod_union->set_f_int32(10); | |
| 488 | |
| 489 size_t size = GetSerializedSize_(small_struct); | |
| 490 | |
| 491 mojo::internal::FixedBuffer buf(size); | |
| 492 internal::SmallStruct_Data* data = nullptr; | |
| 493 Serialize_(small_struct.Pass(), &buf, &data); | |
| 494 data->pod_union.tag = static_cast<internal::PodUnion_Data::PodUnion_Tag>(100); | |
| 495 | |
| 496 void* raw_buf = buf.Leak(); | |
| 497 mojo::internal::BoundsChecker bounds_checker(data, size, 0); | |
| 498 EXPECT_FALSE(internal::SmallStruct_Data::Validate(raw_buf, &bounds_checker)); | |
| 499 free(raw_buf); | |
| 500 } | |
| 501 | |
| 502 TEST_F(StructTest, NullUnionValidationFailure) { | |
| 503 SmallStructNonNullableUnionPtr small_struct( | |
| 504 SmallStructNonNullableUnion::New()); | |
| 505 | |
| 506 size_t size = GetSerializedSize_(small_struct); | |
| 507 | |
| 508 mojo::internal::FixedBuffer buf(size); | |
| 509 internal::SmallStructNonNullableUnion_Data* data = | |
| 510 internal::SmallStructNonNullableUnion_Data::New(&buf); | |
| 511 | |
| 512 void* raw_buf = buf.Leak(); | |
| 513 mojo::internal::BoundsChecker bounds_checker(data, size, 0); | |
| 514 EXPECT_FALSE(internal::SmallStructNonNullableUnion_Data::Validate( | |
| 515 raw_buf, &bounds_checker)); | |
| 516 free(raw_buf); | |
| 517 } | |
| 518 | |
| 519 TEST_F(StructTest, NullableUnionValidation) { | |
| 520 SmallStructPtr small_struct(SmallStruct::New()); | |
| 521 | |
| 522 size_t size = GetSerializedSize_(small_struct); | |
| 523 | |
| 524 mojo::internal::FixedBuffer buf(size); | |
| 525 internal::SmallStruct_Data* data = nullptr; | |
| 526 Serialize_(small_struct.Pass(), &buf, &data); | |
| 527 | |
| 528 void* raw_buf = buf.Leak(); | |
| 529 mojo::internal::BoundsChecker bounds_checker(data, size, 0); | |
| 530 EXPECT_TRUE(internal::SmallStruct_Data::Validate(raw_buf, &bounds_checker)); | |
| 531 free(raw_buf); | |
| 532 } | |
| 533 | |
| 422 } // namespace test | 534 } // namespace test |
| 423 } // namespace mojo | 535 } // namespace mojo |
| OLD | NEW |