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

Unified Diff: third_party/mojo/src/mojo/public/cpp/bindings/tests/union_unittest.cc

Issue 1101303002: Update mojo sdk to rev e7270700d671fa8e458b4d8c9e47f7bcfb65da0b (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Actualy provide a default TaskTracker impl Created 5 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: third_party/mojo/src/mojo/public/cpp/bindings/tests/union_unittest.cc
diff --git a/third_party/mojo/src/mojo/public/cpp/bindings/tests/union_unittest.cc b/third_party/mojo/src/mojo/public/cpp/bindings/tests/union_unittest.cc
index 0803b9932111a33505b3883a8d82b6dc5d1e5acd..5017d979d2ddc907b530066b7225ba4843bdd940 100644
--- a/third_party/mojo/src/mojo/public/cpp/bindings/tests/union_unittest.cc
+++ b/third_party/mojo/src/mojo/public/cpp/bindings/tests/union_unittest.cc
@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include <vector>
#include "mojo/public/cpp/bindings/array.h"
#include "mojo/public/cpp/bindings/lib/array_internal.h"
#include "mojo/public/cpp/bindings/lib/array_serialization.h"
@@ -524,5 +525,300 @@ TEST(UnionTest, Validation_NullableUnion) {
free(raw_buf);
}
+// TODO(azani): Move back in map_unittest.cc when possible.
+// Map Tests
+TEST(UnionTest, PodUnionInMap) {
+ SmallStructPtr small_struct(SmallStruct::New());
+ small_struct->pod_union_map = Map<String, PodUnionPtr>();
+ small_struct->pod_union_map.insert("one", PodUnion::New());
+ small_struct->pod_union_map.insert("two", PodUnion::New());
+
+ small_struct->pod_union_map["one"]->set_f_int8(8);
+ small_struct->pod_union_map["two"]->set_f_int16(16);
+
+ EXPECT_EQ(8, small_struct->pod_union_map["one"]->get_f_int8());
+ EXPECT_EQ(16, small_struct->pod_union_map["two"]->get_f_int16());
+}
+
+TEST(UnionTest, PodUnionInMapSerialization) {
+ Environment environment;
+ Map<String, PodUnionPtr> map;
+ map.insert("one", PodUnion::New());
+ map.insert("two", PodUnion::New());
+
+ map["one"]->set_f_int8(8);
+ map["two"]->set_f_int16(16);
+
+ size_t size = GetSerializedSize_(map);
+ EXPECT_EQ(120U, size);
+
+ mojo::internal::FixedBuffer buf(size);
+ mojo::internal::Map_Data<mojo::internal::String_Data*,
+ internal::PodUnion_Data>* data;
+ mojo::internal::ArrayValidateParams validate_params(0, false, nullptr);
+ SerializeMap_(map.Pass(), &buf, &data, &validate_params);
+
+ Map<String, PodUnionPtr> map2;
+ Deserialize_(data, &map2);
+
+ EXPECT_EQ(8, map2["one"]->get_f_int8());
+ EXPECT_EQ(16, map2["two"]->get_f_int16());
+}
+
+TEST(UnionTest, PodUnionInMapSerializationWithNull) {
+ Environment environment;
+ Map<String, PodUnionPtr> map;
+ map.insert("one", PodUnion::New());
+ map.insert("two", nullptr);
+
+ map["one"]->set_f_int8(8);
+
+ size_t size = GetSerializedSize_(map);
+ EXPECT_EQ(120U, size);
+
+ mojo::internal::FixedBuffer buf(size);
+ mojo::internal::Map_Data<mojo::internal::String_Data*,
+ internal::PodUnion_Data>* data;
+ mojo::internal::ArrayValidateParams validate_params(0, true, nullptr);
+ SerializeMap_(map.Pass(), &buf, &data, &validate_params);
+
+ Map<String, PodUnionPtr> map2;
+ Deserialize_(data, &map2);
+
+ EXPECT_EQ(8, map2["one"]->get_f_int8());
+ EXPECT_TRUE(map2["two"].is_null());
+}
+
+TEST(UnionTest, StructInUnionGetterSetterPasser) {
+ DummyStructPtr dummy(DummyStruct::New());
+ dummy->f_int8 = 8;
+
+ ObjectUnionPtr obj(ObjectUnion::New());
+ obj->set_f_dummy(dummy.Pass());
+
+ EXPECT_EQ(8, obj->get_f_dummy()->f_int8);
+}
+
+TEST(UnionTest, StructInUnionSerialization) {
+ Environment environment;
+ DummyStructPtr dummy(DummyStruct::New());
+ dummy->f_int8 = 8;
+
+ ObjectUnionPtr obj(ObjectUnion::New());
+ obj->set_f_dummy(dummy.Pass());
+
+ size_t size = GetSerializedSize_(obj, false);
+ EXPECT_EQ(32U, size);
+
+ mojo::internal::FixedBuffer buf(size);
+ internal::ObjectUnion_Data* data = nullptr;
+ SerializeUnion_(obj.Pass(), &buf, &data, false);
+
+ ObjectUnionPtr obj2;
+ Deserialize_(data, &obj2);
+ EXPECT_EQ(8, obj2->get_f_dummy()->f_int8);
+}
+
+TEST(UnionTest, StructInUnionValidation) {
+ Environment environment;
+ DummyStructPtr dummy(DummyStruct::New());
+ dummy->f_int8 = 8;
+
+ ObjectUnionPtr obj(ObjectUnion::New());
+ obj->set_f_dummy(dummy.Pass());
+
+ size_t size = GetSerializedSize_(obj, false);
+
+ mojo::internal::FixedBuffer buf(size);
+ internal::ObjectUnion_Data* data = nullptr;
+ SerializeUnion_(obj.Pass(), &buf, &data, false);
+
+ void* raw_buf = buf.Leak();
+ mojo::internal::BoundsChecker bounds_checker(data,
+ static_cast<uint32_t>(size), 0);
+ EXPECT_TRUE(
+ internal::ObjectUnion_Data::Validate(raw_buf, &bounds_checker, false));
+ free(raw_buf);
+}
+
+TEST(UnionTest, StructInUnionValidationNonNullable) {
+ Environment environment;
+ DummyStructPtr dummy(nullptr);
+
+ ObjectUnionPtr obj(ObjectUnion::New());
+ obj->set_f_dummy(dummy.Pass());
+
+ size_t size = GetSerializedSize_(obj, false);
+
+ mojo::internal::FixedBuffer buf(size);
+ internal::ObjectUnion_Data* data = nullptr;
+ SerializeUnion_(obj.Pass(), &buf, &data, false);
+
+ void* raw_buf = buf.Leak();
+ mojo::internal::BoundsChecker bounds_checker(data,
+ static_cast<uint32_t>(size), 0);
+ EXPECT_FALSE(
+ internal::ObjectUnion_Data::Validate(raw_buf, &bounds_checker, false));
+ free(raw_buf);
+}
+
+TEST(UnionTest, StructInUnionValidationNullable) {
+ Environment environment;
+ DummyStructPtr dummy(nullptr);
+
+ ObjectUnionPtr obj(ObjectUnion::New());
+ obj->set_f_nullable(dummy.Pass());
+
+ size_t size = GetSerializedSize_(obj, false);
+
+ mojo::internal::FixedBuffer buf(size);
+ internal::ObjectUnion_Data* data = nullptr;
+ SerializeUnion_(obj.Pass(), &buf, &data, false);
+
+ void* raw_buf = buf.Leak();
+ mojo::internal::BoundsChecker bounds_checker(data,
+ static_cast<uint32_t>(size), 0);
+ EXPECT_TRUE(
+ internal::ObjectUnion_Data::Validate(raw_buf, &bounds_checker, false));
+ free(raw_buf);
+}
+
+TEST(UnionTest, ArrayInUnionGetterSetter) {
+ Environment environment;
+
+ Array<int8_t> array(2);
+ array[0] = 8;
+ array[1] = 9;
+
+ ObjectUnionPtr obj(ObjectUnion::New());
+ obj->set_f_array_int8(array.Pass());
+
+ EXPECT_EQ(8, obj->get_f_array_int8()[0]);
+ EXPECT_EQ(9, obj->get_f_array_int8()[1]);
+}
+
+TEST(UnionTest, ArrayInUnionSerialization) {
+ Environment environment;
+
+ Array<int8_t> array(2);
+ array[0] = 8;
+ array[1] = 9;
+
+ ObjectUnionPtr obj(ObjectUnion::New());
+ obj->set_f_array_int8(array.Pass());
+
+ size_t size = GetSerializedSize_(obj, false);
+ EXPECT_EQ(32U, size);
+
+ mojo::internal::FixedBuffer buf(size);
+ internal::ObjectUnion_Data* data = nullptr;
+ SerializeUnion_(obj.Pass(), &buf, &data, false);
+
+ std::vector<Handle> handles;
+ data->EncodePointersAndHandles(&handles);
+ data->DecodePointersAndHandles(&handles);
+
+ ObjectUnionPtr obj2;
+ Deserialize_(data, &obj2);
+
+ EXPECT_EQ(8, obj2->get_f_array_int8()[0]);
+ EXPECT_EQ(9, obj2->get_f_array_int8()[1]);
+}
+
+TEST(UnionTest, ArrayInUnionValidation) {
+ Environment environment;
+
+ Array<int8_t> array(2);
+ array[0] = 8;
+ array[1] = 9;
+
+ ObjectUnionPtr obj(ObjectUnion::New());
+ obj->set_f_array_int8(array.Pass());
+
+ size_t size = GetSerializedSize_(obj, false);
+ mojo::internal::FixedBuffer buf(size);
+ internal::ObjectUnion_Data* data = nullptr;
+ SerializeUnion_(obj.Pass(), &buf, &data, false);
+
+ std::vector<Handle> handles;
+ data->EncodePointersAndHandles(&handles);
+
+ void* raw_buf = buf.Leak();
+ mojo::internal::BoundsChecker bounds_checker(data,
+ static_cast<uint32_t>(size), 0);
+
+ EXPECT_TRUE(
+ internal::ObjectUnion_Data::Validate(raw_buf, &bounds_checker, false));
+ free(raw_buf);
+}
+
+TEST(UnionTest, MapInUnionGetterSetter) {
+ Environment environment;
+ Map<String, int8_t> map;
+ map.insert("one", 1);
+ map.insert("two", 2);
+
+ ObjectUnionPtr obj(ObjectUnion::New());
+ obj->set_f_map_int8(map.Pass());
+
+ EXPECT_EQ(1, obj->get_f_map_int8()["one"]);
+ EXPECT_EQ(2, obj->get_f_map_int8()["two"]);
+}
+
+TEST(UnionTest, MapInUnionSerialization) {
+ Environment environment;
+ Map<String, int8_t> map;
+ map.insert("one", 1);
+ map.insert("two", 2);
+
+ ObjectUnionPtr obj(ObjectUnion::New());
+ obj->set_f_map_int8(map.Pass());
+
+ size_t size = GetSerializedSize_(obj, false);
+ EXPECT_EQ(112U, size);
+
+ mojo::internal::FixedBuffer buf(size);
+ internal::ObjectUnion_Data* data = nullptr;
+ SerializeUnion_(obj.Pass(), &buf, &data, false);
+
+ std::vector<Handle> handles;
+ data->EncodePointersAndHandles(&handles);
+ data->DecodePointersAndHandles(&handles);
+
+ ObjectUnionPtr obj2;
+ Deserialize_(data, &obj2);
+
+ EXPECT_EQ(1, obj2->get_f_map_int8()["one"]);
+ EXPECT_EQ(2, obj2->get_f_map_int8()["two"]);
+}
+
+TEST(UnionTest, MapInUnionValidation) {
+ Environment environment;
+ Map<String, int8_t> map;
+ map.insert("one", 1);
+ map.insert("two", 2);
+
+ ObjectUnionPtr obj(ObjectUnion::New());
+ obj->set_f_map_int8(map.Pass());
+
+ size_t size = GetSerializedSize_(obj, false);
+ EXPECT_EQ(112U, size);
+
+ mojo::internal::FixedBuffer buf(size);
+ internal::ObjectUnion_Data* data = nullptr;
+ SerializeUnion_(obj.Pass(), &buf, &data, false);
+
+ std::vector<Handle> handles;
+ data->EncodePointersAndHandles(&handles);
+
+ void* raw_buf = buf.Leak();
+ mojo::internal::BoundsChecker bounds_checker(data,
+ static_cast<uint32_t>(size), 0);
+
+ EXPECT_TRUE(
+ internal::ObjectUnion_Data::Validate(raw_buf, &bounds_checker, false));
+ free(raw_buf);
+}
+
} // namespace test
} // namespace mojo

Powered by Google App Engine
This is Rietveld 408576698