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 <utility> | 7 #include <utility> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
11 #include "base/run_loop.h" | 11 #include "base/run_loop.h" |
12 #include "mojo/public/cpp/bindings/array.h" | |
13 #include "mojo/public/cpp/bindings/binding.h" | 12 #include "mojo/public/cpp/bindings/binding.h" |
14 #include "mojo/public/cpp/bindings/lib/array_internal.h" | 13 #include "mojo/public/cpp/bindings/lib/array_internal.h" |
15 #include "mojo/public/cpp/bindings/lib/fixed_buffer.h" | 14 #include "mojo/public/cpp/bindings/lib/fixed_buffer.h" |
16 #include "mojo/public/cpp/bindings/lib/serialization.h" | 15 #include "mojo/public/cpp/bindings/lib/serialization.h" |
17 #include "mojo/public/cpp/bindings/lib/validation_context.h" | 16 #include "mojo/public/cpp/bindings/lib/validation_context.h" |
18 #include "mojo/public/cpp/bindings/lib/validation_errors.h" | 17 #include "mojo/public/cpp/bindings/lib/validation_errors.h" |
19 #include "mojo/public/cpp/test_support/test_utils.h" | 18 #include "mojo/public/cpp/test_support/test_utils.h" |
20 #include "mojo/public/interfaces/bindings/tests/test_structs.mojom.h" | 19 #include "mojo/public/interfaces/bindings/tests/test_structs.mojom.h" |
21 #include "mojo/public/interfaces/bindings/tests/test_unions.mojom.h" | 20 #include "mojo/public/interfaces/bindings/tests/test_unions.mojom.h" |
22 #include "testing/gtest/include/gtest/gtest.h" | 21 #include "testing/gtest/include/gtest/gtest.h" |
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
420 small_struct->pod_union_array.value()[1] = PodUnion::New(); | 419 small_struct->pod_union_array.value()[1] = PodUnion::New(); |
421 | 420 |
422 small_struct->pod_union_array.value()[0]->set_f_int8(10); | 421 small_struct->pod_union_array.value()[0]->set_f_int8(10); |
423 small_struct->pod_union_array.value()[1]->set_f_int16(12); | 422 small_struct->pod_union_array.value()[1]->set_f_int16(12); |
424 | 423 |
425 EXPECT_EQ(10, small_struct->pod_union_array.value()[0]->get_f_int8()); | 424 EXPECT_EQ(10, small_struct->pod_union_array.value()[0]->get_f_int8()); |
426 EXPECT_EQ(12, small_struct->pod_union_array.value()[1]->get_f_int16()); | 425 EXPECT_EQ(12, small_struct->pod_union_array.value()[1]->get_f_int16()); |
427 } | 426 } |
428 | 427 |
429 TEST(UnionTest, PodUnionInArraySerialization) { | 428 TEST(UnionTest, PodUnionInArraySerialization) { |
430 Array<PodUnionPtr> array(2); | 429 std::vector<PodUnionPtr> array(2); |
431 array[0] = PodUnion::New(); | 430 array[0] = PodUnion::New(); |
432 array[1] = PodUnion::New(); | 431 array[1] = PodUnion::New(); |
433 | 432 |
434 array[0]->set_f_int8(10); | 433 array[0]->set_f_int8(10); |
435 array[1]->set_f_int16(12); | 434 array[1]->set_f_int16(12); |
436 EXPECT_EQ(2U, array.size()); | 435 EXPECT_EQ(2U, array.size()); |
437 | 436 |
438 size_t size = | 437 size_t size = |
439 mojo::internal::PrepareToSerialize<ArrayDataView<PodUnionDataView>>( | 438 mojo::internal::PrepareToSerialize<ArrayDataView<PodUnionDataView>>( |
440 array, nullptr); | 439 array, nullptr); |
441 EXPECT_EQ(40U, size); | 440 EXPECT_EQ(40U, size); |
442 | 441 |
443 mojo::internal::FixedBufferForTesting buf(size); | 442 mojo::internal::FixedBufferForTesting buf(size); |
444 mojo::internal::Array_Data<internal::PodUnion_Data>* data; | 443 mojo::internal::Array_Data<internal::PodUnion_Data>* data; |
445 mojo::internal::ContainerValidateParams validate_params(0, false, nullptr); | 444 mojo::internal::ContainerValidateParams validate_params(0, false, nullptr); |
446 mojo::internal::Serialize<ArrayDataView<PodUnionDataView>>( | 445 mojo::internal::Serialize<ArrayDataView<PodUnionDataView>>( |
447 array, &buf, &data, &validate_params, nullptr); | 446 array, &buf, &data, &validate_params, nullptr); |
448 | 447 |
449 Array<PodUnionPtr> array2; | 448 std::vector<PodUnionPtr> array2; |
450 mojo::internal::Deserialize<ArrayDataView<PodUnionDataView>>(data, &array2, | 449 mojo::internal::Deserialize<ArrayDataView<PodUnionDataView>>(data, &array2, |
451 nullptr); | 450 nullptr); |
452 | 451 |
453 EXPECT_EQ(2U, array2.size()); | 452 EXPECT_EQ(2U, array2.size()); |
454 | 453 |
455 EXPECT_EQ(10, array2[0]->get_f_int8()); | 454 EXPECT_EQ(10, array2[0]->get_f_int8()); |
456 EXPECT_EQ(12, array2[1]->get_f_int16()); | 455 EXPECT_EQ(12, array2[1]->get_f_int16()); |
457 } | 456 } |
458 | 457 |
459 TEST(UnionTest, PodUnionInArraySerializationWithNull) { | 458 TEST(UnionTest, PodUnionInArraySerializationWithNull) { |
460 Array<PodUnionPtr> array(2); | 459 std::vector<PodUnionPtr> array(2); |
461 array[0] = PodUnion::New(); | 460 array[0] = PodUnion::New(); |
462 | 461 |
463 array[0]->set_f_int8(10); | 462 array[0]->set_f_int8(10); |
464 EXPECT_EQ(2U, array.size()); | 463 EXPECT_EQ(2U, array.size()); |
465 | 464 |
466 size_t size = | 465 size_t size = |
467 mojo::internal::PrepareToSerialize<ArrayDataView<PodUnionDataView>>( | 466 mojo::internal::PrepareToSerialize<ArrayDataView<PodUnionDataView>>( |
468 array, nullptr); | 467 array, nullptr); |
469 EXPECT_EQ(40U, size); | 468 EXPECT_EQ(40U, size); |
470 | 469 |
471 mojo::internal::FixedBufferForTesting buf(size); | 470 mojo::internal::FixedBufferForTesting buf(size); |
472 mojo::internal::Array_Data<internal::PodUnion_Data>* data; | 471 mojo::internal::Array_Data<internal::PodUnion_Data>* data; |
473 mojo::internal::ContainerValidateParams validate_params(0, true, nullptr); | 472 mojo::internal::ContainerValidateParams validate_params(0, true, nullptr); |
474 mojo::internal::Serialize<ArrayDataView<PodUnionDataView>>( | 473 mojo::internal::Serialize<ArrayDataView<PodUnionDataView>>( |
475 array, &buf, &data, &validate_params, nullptr); | 474 array, &buf, &data, &validate_params, nullptr); |
476 | 475 |
477 Array<PodUnionPtr> array2; | 476 std::vector<PodUnionPtr> array2; |
478 mojo::internal::Deserialize<ArrayDataView<PodUnionDataView>>(data, &array2, | 477 mojo::internal::Deserialize<ArrayDataView<PodUnionDataView>>(data, &array2, |
479 nullptr); | 478 nullptr); |
480 | 479 |
481 EXPECT_EQ(2U, array2.size()); | 480 EXPECT_EQ(2U, array2.size()); |
482 | 481 |
483 EXPECT_EQ(10, array2[0]->get_f_int8()); | 482 EXPECT_EQ(10, array2[0]->get_f_int8()); |
484 EXPECT_TRUE(array2[1].is_null()); | 483 EXPECT_TRUE(array2[1].is_null()); |
485 } | 484 } |
486 | 485 |
487 TEST(UnionTest, ObjectUnionInArraySerialization) { | 486 TEST(UnionTest, ObjectUnionInArraySerialization) { |
488 Array<ObjectUnionPtr> array(2); | 487 std::vector<ObjectUnionPtr> array(2); |
489 array[0] = ObjectUnion::New(); | 488 array[0] = ObjectUnion::New(); |
490 array[1] = ObjectUnion::New(); | 489 array[1] = ObjectUnion::New(); |
491 | 490 |
492 array[0]->set_f_string("hello"); | 491 array[0]->set_f_string("hello"); |
493 array[1]->set_f_string("world"); | 492 array[1]->set_f_string("world"); |
494 EXPECT_EQ(2U, array.size()); | 493 EXPECT_EQ(2U, array.size()); |
495 | 494 |
496 size_t size = | 495 size_t size = |
497 mojo::internal::PrepareToSerialize<ArrayDataView<ObjectUnionDataView>>( | 496 mojo::internal::PrepareToSerialize<ArrayDataView<ObjectUnionDataView>>( |
498 array, nullptr); | 497 array, nullptr); |
(...skipping 14 matching lines...) Expand all Loading... |
513 free(raw_buf); | 512 free(raw_buf); |
514 | 513 |
515 data = | 514 data = |
516 reinterpret_cast<mojo::internal::Array_Data<internal::ObjectUnion_Data>*>( | 515 reinterpret_cast<mojo::internal::Array_Data<internal::ObjectUnion_Data>*>( |
517 new_buf.data()); | 516 new_buf.data()); |
518 mojo::internal::ValidationContext validation_context( | 517 mojo::internal::ValidationContext validation_context( |
519 data, static_cast<uint32_t>(size), 0); | 518 data, static_cast<uint32_t>(size), 0); |
520 ASSERT_TRUE(mojo::internal::Array_Data<internal::ObjectUnion_Data>::Validate( | 519 ASSERT_TRUE(mojo::internal::Array_Data<internal::ObjectUnion_Data>::Validate( |
521 data, &validation_context, &validate_params)); | 520 data, &validation_context, &validate_params)); |
522 | 521 |
523 Array<ObjectUnionPtr> array2; | 522 std::vector<ObjectUnionPtr> array2; |
524 mojo::internal::Deserialize<ArrayDataView<ObjectUnionDataView>>(data, &array2, | 523 mojo::internal::Deserialize<ArrayDataView<ObjectUnionDataView>>(data, &array2, |
525 nullptr); | 524 nullptr); |
526 | 525 |
527 EXPECT_EQ(2U, array2.size()); | 526 EXPECT_EQ(2U, array2.size()); |
528 | 527 |
529 EXPECT_EQ("hello", array2[0]->get_f_string()); | 528 EXPECT_EQ("hello", array2[0]->get_f_string()); |
530 EXPECT_EQ("world", array2[1]->get_f_string()); | 529 EXPECT_EQ("world", array2[1]->get_f_string()); |
531 } | 530 } |
532 | 531 |
533 // TODO(azani): Move back in struct_unittest.cc when possible. | 532 // TODO(azani): Move back in struct_unittest.cc when possible. |
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
841 | 840 |
842 void* raw_buf = buf.Leak(); | 841 void* raw_buf = buf.Leak(); |
843 mojo::internal::ValidationContext validation_context( | 842 mojo::internal::ValidationContext validation_context( |
844 data, static_cast<uint32_t>(size), 0); | 843 data, static_cast<uint32_t>(size), 0); |
845 EXPECT_TRUE(internal::ObjectUnion_Data::Validate( | 844 EXPECT_TRUE(internal::ObjectUnion_Data::Validate( |
846 raw_buf, &validation_context, false)); | 845 raw_buf, &validation_context, false)); |
847 free(raw_buf); | 846 free(raw_buf); |
848 } | 847 } |
849 | 848 |
850 TEST(UnionTest, ArrayInUnionGetterSetter) { | 849 TEST(UnionTest, ArrayInUnionGetterSetter) { |
851 Array<int8_t> array(2); | 850 std::vector<int8_t> array(2); |
852 array[0] = 8; | 851 array[0] = 8; |
853 array[1] = 9; | 852 array[1] = 9; |
854 | 853 |
855 ObjectUnionPtr obj(ObjectUnion::New()); | 854 ObjectUnionPtr obj(ObjectUnion::New()); |
856 obj->set_f_array_int8(std::move(array)); | 855 obj->set_f_array_int8(std::move(array)); |
857 | 856 |
858 EXPECT_EQ(8, obj->get_f_array_int8()[0]); | 857 EXPECT_EQ(8, obj->get_f_array_int8()[0]); |
859 EXPECT_EQ(9, obj->get_f_array_int8()[1]); | 858 EXPECT_EQ(9, obj->get_f_array_int8()[1]); |
860 } | 859 } |
861 | 860 |
862 TEST(UnionTest, ArrayInUnionSerialization) { | 861 TEST(UnionTest, ArrayInUnionSerialization) { |
863 Array<int8_t> array(2); | 862 std::vector<int8_t> array(2); |
864 array[0] = 8; | 863 array[0] = 8; |
865 array[1] = 9; | 864 array[1] = 9; |
866 | 865 |
867 ObjectUnionPtr obj(ObjectUnion::New()); | 866 ObjectUnionPtr obj(ObjectUnion::New()); |
868 obj->set_f_array_int8(std::move(array)); | 867 obj->set_f_array_int8(std::move(array)); |
869 | 868 |
870 size_t size = mojo::internal::PrepareToSerialize<ObjectUnionDataView>( | 869 size_t size = mojo::internal::PrepareToSerialize<ObjectUnionDataView>( |
871 obj, false, nullptr); | 870 obj, false, nullptr); |
872 EXPECT_EQ(32U, size); | 871 EXPECT_EQ(32U, size); |
873 | 872 |
874 mojo::internal::FixedBufferForTesting buf(size); | 873 mojo::internal::FixedBufferForTesting buf(size); |
875 internal::ObjectUnion_Data* data = nullptr; | 874 internal::ObjectUnion_Data* data = nullptr; |
876 mojo::internal::Serialize<ObjectUnionDataView>(obj, &buf, &data, false, | 875 mojo::internal::Serialize<ObjectUnionDataView>(obj, &buf, &data, false, |
877 nullptr); | 876 nullptr); |
878 | 877 |
879 ObjectUnionPtr obj2; | 878 ObjectUnionPtr obj2; |
880 mojo::internal::Deserialize<ObjectUnionDataView>(data, &obj2, nullptr); | 879 mojo::internal::Deserialize<ObjectUnionDataView>(data, &obj2, nullptr); |
881 | 880 |
882 EXPECT_EQ(8, obj2->get_f_array_int8()[0]); | 881 EXPECT_EQ(8, obj2->get_f_array_int8()[0]); |
883 EXPECT_EQ(9, obj2->get_f_array_int8()[1]); | 882 EXPECT_EQ(9, obj2->get_f_array_int8()[1]); |
884 } | 883 } |
885 | 884 |
886 TEST(UnionTest, ArrayInUnionValidation) { | 885 TEST(UnionTest, ArrayInUnionValidation) { |
887 Array<int8_t> array(2); | 886 std::vector<int8_t> array(2); |
888 array[0] = 8; | 887 array[0] = 8; |
889 array[1] = 9; | 888 array[1] = 9; |
890 | 889 |
891 ObjectUnionPtr obj(ObjectUnion::New()); | 890 ObjectUnionPtr obj(ObjectUnion::New()); |
892 obj->set_f_array_int8(std::move(array)); | 891 obj->set_f_array_int8(std::move(array)); |
893 | 892 |
894 size_t size = mojo::internal::PrepareToSerialize<ObjectUnionDataView>( | 893 size_t size = mojo::internal::PrepareToSerialize<ObjectUnionDataView>( |
895 obj, false, nullptr); | 894 obj, false, nullptr); |
896 mojo::internal::FixedBufferForTesting buf(size); | 895 mojo::internal::FixedBufferForTesting buf(size); |
897 internal::ObjectUnion_Data* data = nullptr; | 896 internal::ObjectUnion_Data* data = nullptr; |
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1238 | 1237 |
1239 PodUnionPtr pod(PodUnion::New()); | 1238 PodUnionPtr pod(PodUnion::New()); |
1240 pod->set_f_int16(16); | 1239 pod->set_f_int16(16); |
1241 | 1240 |
1242 ptr->Echo(std::move(pod), base::Bind(&ExpectInt16, 16)); | 1241 ptr->Echo(std::move(pod), base::Bind(&ExpectInt16, 16)); |
1243 base::RunLoop().RunUntilIdle(); | 1242 base::RunLoop().RunUntilIdle(); |
1244 } | 1243 } |
1245 | 1244 |
1246 } // namespace test | 1245 } // namespace test |
1247 } // namespace mojo | 1246 } // namespace mojo |
OLD | NEW |