| Index: mojo/public/cpp/bindings/tests/union_unittest.cc
|
| diff --git a/mojo/public/cpp/bindings/tests/union_unittest.cc b/mojo/public/cpp/bindings/tests/union_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a8d8a951283f97b73d31ef47e98912b59c60a830
|
| --- /dev/null
|
| +++ b/mojo/public/cpp/bindings/tests/union_unittest.cc
|
| @@ -0,0 +1,172 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "mojo/public/cpp/bindings/lib/fixed_buffer.h"
|
| +#include "mojo/public/cpp/bindings/string.h"
|
| +#include "mojo/public/cpp/environment/environment.h"
|
| +#include "mojo/public/interfaces/bindings/tests/test_unions.mojom.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace mojo {
|
| +namespace test {
|
| +
|
| +TEST(UnionTest, PlainOldDataGetterSetter) {
|
| + PodUnionPtr pod(PodUnion::New());
|
| +
|
| + pod->set_f_int8(10);
|
| + EXPECT_EQ(10, pod->get_f_int8());
|
| + EXPECT_TRUE(pod->is_f_int8());
|
| + EXPECT_FALSE(pod->is_f_int8_other());
|
| + EXPECT_EQ(pod->which(), PodUnion::Tag::F_INT8);
|
| +
|
| + pod->set_f_uint8(11);
|
| + EXPECT_EQ(11, pod->get_f_uint8());
|
| + EXPECT_TRUE(pod->is_f_uint8());
|
| + EXPECT_FALSE(pod->is_f_int8());
|
| + EXPECT_EQ(pod->which(), PodUnion::Tag::F_UINT8);
|
| +
|
| + pod->set_f_int16(12);
|
| + EXPECT_EQ(12, pod->get_f_int16());
|
| + EXPECT_TRUE(pod->is_f_int16());
|
| + EXPECT_EQ(pod->which(), PodUnion::Tag::F_INT16);
|
| +
|
| + pod->set_f_uint16(13);
|
| + EXPECT_EQ(13, pod->get_f_uint16());
|
| + EXPECT_TRUE(pod->is_f_uint16());
|
| + EXPECT_EQ(pod->which(), PodUnion::Tag::F_UINT16);
|
| +
|
| + pod->set_f_int32(14);
|
| + EXPECT_EQ(14, pod->get_f_int32());
|
| + EXPECT_TRUE(pod->is_f_int32());
|
| + EXPECT_EQ(pod->which(), PodUnion::Tag::F_INT32);
|
| +
|
| + pod->set_f_uint32(static_cast<uint32_t>(15));
|
| + EXPECT_EQ(static_cast<uint32_t>(15), pod->get_f_uint32());
|
| + EXPECT_TRUE(pod->is_f_uint32());
|
| + EXPECT_EQ(pod->which(), PodUnion::Tag::F_UINT32);
|
| +
|
| + pod->set_f_int64(16);
|
| + EXPECT_EQ(16, pod->get_f_int64());
|
| + EXPECT_TRUE(pod->is_f_int64());
|
| + EXPECT_EQ(pod->which(), PodUnion::Tag::F_INT64);
|
| +
|
| + pod->set_f_uint64(static_cast<uint64_t>(17));
|
| + EXPECT_EQ(static_cast<uint64_t>(17), pod->get_f_uint64());
|
| + EXPECT_TRUE(pod->is_f_uint64());
|
| + EXPECT_EQ(pod->which(), PodUnion::Tag::F_UINT64);
|
| +
|
| + pod->set_f_float(1.5);
|
| + EXPECT_EQ(1.5, pod->get_f_float());
|
| + EXPECT_TRUE(pod->is_f_float());
|
| + EXPECT_EQ(pod->which(), PodUnion::Tag::F_FLOAT);
|
| +
|
| + pod->set_f_double(1.9);
|
| + EXPECT_EQ(1.9, pod->get_f_double());
|
| + EXPECT_TRUE(pod->is_f_double());
|
| + EXPECT_EQ(pod->which(), PodUnion::Tag::F_DOUBLE);
|
| +
|
| + pod->set_f_bool(true);
|
| + EXPECT_TRUE(pod->get_f_bool());
|
| + pod->set_f_bool(false);
|
| + EXPECT_FALSE(pod->get_f_bool());
|
| + EXPECT_TRUE(pod->is_f_bool());
|
| + EXPECT_EQ(pod->which(), PodUnion::Tag::F_BOOL);
|
| +}
|
| +
|
| +TEST(UnionTest, PodEquals) {
|
| + PodUnionPtr pod1(PodUnion::New());
|
| + PodUnionPtr pod2(PodUnion::New());
|
| +
|
| + pod1->set_f_int8(10);
|
| + pod2->set_f_int8(10);
|
| + EXPECT_TRUE(pod1.Equals(pod2));
|
| +
|
| + pod2->set_f_int8(11);
|
| + EXPECT_FALSE(pod1.Equals(pod2));
|
| +
|
| + pod2->set_f_int8_other(10);
|
| + EXPECT_FALSE(pod1.Equals(pod2));
|
| +}
|
| +
|
| +TEST(UnionTest, PodClone) {
|
| + PodUnionPtr pod(PodUnion::New());
|
| + pod->set_f_int8(10);
|
| +
|
| + PodUnionPtr pod_clone = pod.Clone();
|
| + EXPECT_EQ(10, pod_clone->get_f_int8());
|
| + EXPECT_TRUE(pod_clone->is_f_int8());
|
| + EXPECT_EQ(pod_clone->which(), PodUnion::Tag::F_INT8);
|
| +}
|
| +
|
| +TEST(UnionTest, SerializationPod) {
|
| + PodUnionPtr pod1(PodUnion::New());
|
| + pod1->set_f_int8(10);
|
| +
|
| + size_t size = GetSerializedSize_(pod1);
|
| + EXPECT_EQ(16U, size);
|
| +
|
| + mojo::internal::FixedBuffer buf(size);
|
| + internal::PodUnion_Data* data;
|
| + Serialize_(pod1.Pass(), &buf, &data);
|
| +
|
| + PodUnionPtr pod2;
|
| + Deserialize_(data, &pod2);
|
| +
|
| + EXPECT_EQ(10, pod2->get_f_int8());
|
| + EXPECT_TRUE(pod2->is_f_int8());
|
| + EXPECT_EQ(pod2->which(), PodUnion::Tag::F_INT8);
|
| +}
|
| +
|
| +TEST(UnionTest, StringGetterSetter) {
|
| + PodUnionPtr pod(PodUnion::New());
|
| +
|
| + String hello("hello world");
|
| + pod->set_f_string(hello);
|
| + EXPECT_EQ(hello, pod->get_f_string());
|
| + EXPECT_TRUE(pod->is_f_string());
|
| + EXPECT_EQ(pod->which(), PodUnion::Tag::F_STRING);
|
| +}
|
| +
|
| +TEST(UnionTest, StringEquals) {
|
| + PodUnionPtr pod1(PodUnion::New());
|
| + PodUnionPtr pod2(PodUnion::New());
|
| +
|
| + pod1->set_f_string("hello world");
|
| + pod2->set_f_string("hello world");
|
| + EXPECT_TRUE(pod1.Equals(pod2));
|
| +
|
| + pod2->set_f_string("hello universe");
|
| + EXPECT_FALSE(pod1.Equals(pod2));
|
| +}
|
| +
|
| +TEST(UnionTest, StringClone) {
|
| + PodUnionPtr pod(PodUnion::New());
|
| +
|
| + String hello("hello world");
|
| + pod->set_f_string(hello);
|
| + PodUnionPtr pod_clone = pod.Clone();
|
| + EXPECT_EQ(hello, pod_clone->get_f_string());
|
| + EXPECT_TRUE(pod_clone->is_f_string());
|
| + EXPECT_EQ(pod_clone->which(), PodUnion::Tag::F_STRING);
|
| +}
|
| +
|
| +TEST(UnionTest, StringSerialization) {
|
| + PodUnionPtr pod1(PodUnion::New());
|
| +
|
| + String hello("hello world");
|
| + pod1->set_f_string(hello);
|
| +
|
| + size_t size = GetSerializedSize_(pod1);
|
| + mojo::internal::FixedBuffer buf(size);
|
| + internal::PodUnion_Data* data;
|
| + Serialize_(pod1.Pass(), &buf, &data);
|
| +
|
| + PodUnionPtr pod2;
|
| + Deserialize_(data, &pod2);
|
| + EXPECT_EQ(hello, pod2->get_f_string());
|
| + EXPECT_TRUE(pod2->is_f_string());
|
| + EXPECT_EQ(pod2->which(), PodUnion::Tag::F_STRING);
|
| +}
|
| +} // namespace test
|
| +} // namespace mojo
|
|
|