New structure allows better modularization of unit tests.
[Verification] webapi_common_tests are built successfully and pass.
Signed-off-by: Michal Michalski <m.michalski2@partner.samsung.com>
Change-Id: Icad5cca7739716bde7c09092f4d1d73fca1972a0
# tizen ut mobile
%if "%{?tizen_ut_build}" == "1"
mkdir -p %{buildroot}/usr/bin
-install -p -m 755 out/bin_mobile/bundle_ut %{buildroot}/usr/bin/
+install -p -m 755 out/bin_mobile/webapi_common_tests %{buildroot}/usr/bin/
%endif
install -p -m 644 out/bin_mobile/libtizen*.so %{buildroot}%{crosswalk_extensions_path}/mobile
# UT files
%if "%{?tizen_ut_build}" == "1"
%license GTEST.BSD-3-Clause
-/usr/bin/bundle_ut
+/usr/bin/webapi_common_tests
%endif
# mobile-extension-emulator
],
'targets': [
{
- 'target_name': 'bundle_ut',
+ 'target_name': 'webapi_common_tests',
'type': 'executable',
'dependencies': [
'common.gyp:tizen_common'
'../googletest/src/gtest-all.cc',
'../googlemock/src/gmock-all.cc',
'ut/common_ut_extension.cc',
- 'ut/bundle_ut.cc'
+ 'ut/json-utils.cc',
+ 'ut/main.cc'
],
'libraries': [
'-lbundle',
+++ /dev/null
-/*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include "tizen.h"
-
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-
-#include "bundle.h"
-#include "bundle_internal.h"
-#include "common/json-utils.h"
-
-#include <iostream>
-#include <string>
-#include <vector>
-
-using namespace std;
-using testing::_;
-using testing::StrEq;
-
-namespace {
-
-template <typename T, typename V>
-picojson::value vec2json(vector<V> vec) {
- picojson::array array;
- for (auto v : vec) {
- array.push_back(picojson::value(static_cast<T>(v)));
- }
- return picojson::value(array);
-}
-
-} // namespace
-
-MATCHER_P(KeyValStrEq, expected, "match keyval_t string value") {
- auto* kv = const_cast<bundle_keyval_t*>(static_cast<const bundle_keyval_t*>(arg));
-
- if (BUNDLE_TYPE_STR != bundle_keyval_get_type(kv)) {
- return false;
- }
-
- void* untyped = nullptr;
- size_t size = 0;
-
- int ret = bundle_keyval_get_basic_val(kv, &untyped, &size);
- if (BUNDLE_ERROR_NONE != ret) {
- return false;
- }
-
- string value = static_cast<char*>(untyped);
- return value == expected;
-}
-
-MATCHER_P(KeyValStrArrEq, expected, "match keyval_t string array value") {
- auto* kv = const_cast<bundle_keyval_t*>(static_cast<const bundle_keyval_t*>(arg));
-
- if (BUNDLE_TYPE_STR_ARRAY != bundle_keyval_get_type(kv)) {
- return false;
- }
-
- void** untyped = nullptr;
- size_t array_size = 0;
- size_t* elem_size = nullptr;
-
- int ret = bundle_keyval_get_array_val(kv, &untyped, &array_size, &elem_size);
- if (BUNDLE_ERROR_NONE != ret) {
- return false;
- }
-
- if (array_size != expected.size()) {
- return false;
- }
-
- char** value = reinterpret_cast<char**>(untyped);
- for (size_t i = 0; i < array_size; ++i) {
- if (string(value[i]) != expected[i]) {
- return false;
- }
- }
-
- return true;
-}
-
-MATCHER_P(KeyValBytesEq, expected, "match keyval_t bytes value") {
- auto* kv = const_cast<bundle_keyval_t*>(static_cast<const bundle_keyval_t*>(arg));
-
- if (BUNDLE_TYPE_BYTE != bundle_keyval_get_type(kv)) {
- return false;
- }
-
- void* untyped = nullptr;
- size_t size = 0;
-
- int ret = bundle_keyval_get_basic_val(kv, &untyped, &size);
- if (BUNDLE_ERROR_NONE != ret) {
- return false;
- }
-
- if (size != expected.size()) {
- return false;
- }
-
- auto bytes = static_cast<unsigned char*>(untyped);
- for (unsigned int i = 0; i < size; ++i) {
- if (bytes[i] != expected[i]) {
- return false;
- }
- }
-
- return true;
-}
-
-MATCHER_P(KeyValBytesArrEq, expected, "match keyval_t bytes array value") {
- auto* kv = const_cast<bundle_keyval_t*>(static_cast<const bundle_keyval_t*>(arg));
-
- if (BUNDLE_TYPE_BYTE_ARRAY != bundle_keyval_get_type(kv)) {
- return false;
- }
-
- void** untyped = nullptr;
- size_t array_size = 0;
- size_t* elem_size = nullptr;
-
- int ret = bundle_keyval_get_array_val(kv, &untyped, &array_size, &elem_size);
- if (BUNDLE_ERROR_NONE != ret) {
- return false;
- }
-
- if (array_size != expected.size()) {
- return false;
- }
-
- unsigned char** value = reinterpret_cast<unsigned char**>(untyped);
- for (size_t i = 0; i < array_size; ++i) {
- for (size_t j = 0; j < elem_size[i]; ++j) {
- if (expected[i][j] != value[i][j]) {
- return false;
- }
- }
- }
-
- return true;
-}
-
-class JsonToBundleTest : public testing::Test {
- public:
- virtual void SetUp() {
- bundleData = nullptr;
- }
-
- virtual void TearDown() {
- if (bundleData) {
- bundle_free(bundleData);
- }
- }
-
- // Replacing bundle_keyval_t with void and cast it in matcher is required because
- // bundle_keyval_t has only public declaration, not implementation.
- // This causes incomplete type error which I couldn't resolve in any other way.
- using BundleIterator = void(const char*, const int, const void*, void*);
- using BundleIteratorMock = testing::MockFunction<BundleIterator>;
-
- void CheckBundle(bundle* b, BundleIteratorMock& mock) {
- bundle_foreach(b,
- [](const char* key, const int type, const bundle_keyval_t* kv, void* ud) {
- auto* mock = static_cast<testing::MockFunction<BundleIterator>*>(ud);
- mock->Call(key, type, kv, nullptr);
- },
- &mock);
- }
-
- bundle* bundleData;
- BundleIteratorMock bundleIteratorMock;
-};
-
-TEST_F(JsonToBundleTest, BytesArrayConversion) {
- vector<vector<unsigned char>> value = {{0, 1, 2}, {100, 101, 102}, {200, 201, 202}};
-
- auto json_val = picojson::value(picojson::object());
- auto& json = json_val.get<picojson::object>();
-
- picojson::array array;
- array.push_back(vec2json<double>(value[0]));
- array.push_back(vec2json<double>(value[1]));
- array.push_back(vec2json<double>(value[2]));
-
- json["key"] = picojson::value(array);
-
- auto result = common::JsonToBundle(json_val, &bundleData);
- ASSERT_TRUE(result);
-
- EXPECT_CALL(bundleIteratorMock,
- Call(StrEq("key"), BUNDLE_TYPE_BYTE_ARRAY, KeyValBytesArrEq(value), nullptr));
-
- CheckBundle(bundleData, bundleIteratorMock);
-}
-
-TEST_F(JsonToBundleTest, BytesConversion) {
- vector<unsigned char> value = {0, 126, 255};
-
- auto json_val = picojson::value(picojson::object());
- auto& json = json_val.get<picojson::object>();
-
- json["key"] = vec2json<double>(value);
-
- auto result = common::JsonToBundle(json_val, &bundleData);
- ASSERT_TRUE(result);
-
- EXPECT_CALL(bundleIteratorMock,
- Call(StrEq("key"), BUNDLE_TYPE_BYTE, KeyValBytesEq(value), nullptr));
-
- CheckBundle(bundleData, bundleIteratorMock);
-}
-
-TEST_F(JsonToBundleTest, BytesConversionInvalidByteValue) {
- auto json_val = picojson::value(picojson::object());
- auto& json = json_val.get<picojson::object>();
- json["key"] = vec2json<double>(vector<double>({1.0, 256.0, 2.0}));
-
- auto result = common::JsonToBundle(json_val, &bundleData);
- ASSERT_FALSE(result);
-
- json["key"] = vec2json<double>(vector<double>({1.0, -1.0, 2.0}));
- result = common::JsonToBundle(json_val, &bundleData);
- ASSERT_FALSE(result);
-}
-
-TEST_F(JsonToBundleTest, StringConversion) {
- string value = "tizen";
-
- auto json_val = picojson::value(picojson::object());
- auto& json = json_val.get<picojson::object>();
-
- json["key"] = picojson::value(value);
-
- auto result = common::JsonToBundle(json_val, &bundleData);
- ASSERT_TRUE(result);
-
- EXPECT_CALL(bundleIteratorMock, Call(StrEq("key"), BUNDLE_TYPE_STR, KeyValStrEq(value), nullptr));
-
- CheckBundle(bundleData, bundleIteratorMock);
-}
-
-TEST_F(JsonToBundleTest, StringArrayConversion) {
- vector<string> value = {"str1", "str2", "str3"};
-
- auto json_val = picojson::value(picojson::object());
- auto& json = json_val.get<picojson::object>();
-
- json["key"] = picojson::value(picojson::array(
- {picojson::value(value[0]), picojson::value(value[1]), picojson::value(value[2])}));
-
- auto result = common::JsonToBundle(json_val, &bundleData);
- ASSERT_TRUE(result);
-
- EXPECT_CALL(bundleIteratorMock,
- Call(StrEq("key"), BUNDLE_TYPE_STR_ARRAY, KeyValStrArrEq(value), nullptr));
-
- CheckBundle(bundleData, bundleIteratorMock);
-}
-
-TEST_F(JsonToBundleTest, UnsupportedType) {
- auto json_val = picojson::value(picojson::object());
- auto& json = json_val.get<picojson::object>();
-
- json["key"] = picojson::value(true);
- auto result = common::JsonToBundle(json_val, &bundleData);
- ASSERT_FALSE(result);
-
- json["key"] = picojson::value(picojson::object());
- result = common::JsonToBundle(json_val, &bundleData);
- ASSERT_FALSE(result);
-}
-
-TEST_F(JsonToBundleTest, NullConversion) {
- picojson::value json_val;
- auto result = common::JsonToBundle(json_val, &bundleData);
- ASSERT_TRUE(result);
- ASSERT_EQ(nullptr, bundleData);
-}
-
-class BundleToJsonTest : public testing::Test {
- public:
- virtual void SetUp() {
- bundleData = bundle_create();
- }
-
- virtual void TearDown() {
- if (bundleData) {
- bundle_free(bundleData);
- }
- }
-
- bundle* bundleData;
-};
-
-TEST_F(BundleToJsonTest, NullConversion) {
- bundle* data = nullptr;
- picojson::value json;
- auto result = common::BundleToJson(data, &json);
- ASSERT_TRUE(result);
- ASSERT_TRUE(json.is<picojson::null>());
-}
-
-TEST_F(BundleToJsonTest, StringConversion) {
- string key = "key", value = "tizen";
- ASSERT_EQ(bundle_add_str(bundleData, key.c_str(), value.c_str()), BUNDLE_ERROR_NONE);
-
- picojson::value json;
- auto result = common::BundleToJson(bundleData, &json);
-
- ASSERT_TRUE(result);
- ASSERT_TRUE(json.is<picojson::object>());
- ASSERT_EQ(json.get<picojson::object>()[key].get<string>(), value);
-}
-
-TEST_F(BundleToJsonTest, StringArrayConversion) {
- string key = "key";
- vector<const char*> value = {"value1", "value2"};
-
- ASSERT_EQ(bundle_add_str_array(bundleData, key.c_str(), value.data(), value.size()),
- BUNDLE_ERROR_NONE);
-
- picojson::value json;
- auto result = common::BundleToJson(bundleData, &json);
- ASSERT_TRUE(result);
- ASSERT_TRUE(json.is<picojson::object>());
-
- const auto& array = json.get<picojson::object>()[key].get<picojson::array>();
- ASSERT_EQ(array.size(), value.size());
- EXPECT_EQ(array[0].get<std::string>(), std::string(value[0]));
- EXPECT_EQ(array[1].get<std::string>(), std::string(value[1]));
-}
-
-TEST_F(BundleToJsonTest, BytesConversion) {
- string key = "key";
- vector<unsigned char> bytes = {0, 126, 255};
-
- ASSERT_EQ(bundle_add_byte(bundleData, key.c_str(), bytes.data(), bytes.size()),
- BUNDLE_ERROR_NONE);
-
- picojson::value json;
- auto result = common::BundleToJson(bundleData, &json);
- ASSERT_TRUE(result);
- ASSERT_TRUE(json.is<picojson::object>());
-
- const auto& array = json.get<picojson::object>()[key].get<picojson::array>();
- ASSERT_EQ(array.size(), bytes.size());
- EXPECT_EQ(array[0].get<double>(), bytes[0]);
- EXPECT_EQ(array[1].get<double>(), bytes[1]);
- EXPECT_EQ(array[2].get<double>(), bytes[2]);
-}
-
-TEST_F(BundleToJsonTest, BytesArrayConversion) {
- string key = "key";
- vector<vector<unsigned char>> value = {{0, 126, 255}, {1, 127, 254}};
-
- ASSERT_EQ(bundle_add_byte_array(bundleData, key.c_str(), nullptr, value.size()),
- BUNDLE_ERROR_NONE);
- ASSERT_EQ(
- bundle_set_byte_array_element(bundleData, key.c_str(), 0, value[0].data(), value[0].size()),
- BUNDLE_ERROR_NONE);
- ASSERT_EQ(
- bundle_set_byte_array_element(bundleData, key.c_str(), 1, value[1].data(), value[1].size()),
- BUNDLE_ERROR_NONE);
-
- picojson::value json;
- auto result = common::BundleToJson(bundleData, &json);
- ASSERT_TRUE(result);
- ASSERT_TRUE(json.is<picojson::object>());
-
- auto& array = json.get<picojson::object>()[key].get<picojson::array>();
- ASSERT_EQ(array.size(), value.size());
-
- auto& bytes = array[0].get<picojson::array>();
- ASSERT_EQ(bytes.size(), value[0].size());
- EXPECT_EQ(bytes[0].get<double>(), value[0][0]);
- EXPECT_EQ(bytes[1].get<double>(), value[0][1]);
- EXPECT_EQ(bytes[2].get<double>(), value[0][2]);
-
- bytes = array[1].get<picojson::array>();
- ASSERT_EQ(bytes.size(), value[1].size());
- EXPECT_EQ(bytes[0].get<double>(), value[1][0]);
- EXPECT_EQ(bytes[1].get<double>(), value[1][1]);
- EXPECT_EQ(bytes[2].get<double>(), value[1][2]);
-}
-
-int main(int argc, char* argv[]) {
- ::testing::InitGoogleTest(&argc, argv);
- return RUN_ALL_TESTS();
-}
--- /dev/null
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
+
+#include "common/ut/json-utils.h"
+
+#include "bundle.h"
+#include "bundle_internal.h"
+#include "common/json-utils.h"
+
+#include <iostream>
+#include <string>
+#include <vector>
+
+using namespace std;
+using testing::_;
+using testing::StrEq;
+
+namespace {
+
+template <typename T, typename V>
+picojson::value vec2json(vector<V> vec) {
+ picojson::array array;
+ for (auto v : vec) {
+ array.push_back(picojson::value(static_cast<T>(v)));
+ }
+ return picojson::value(array);
+}
+
+} // namespace
+
+MATCHER_P(KeyValStrEq, expected, "match keyval_t string value") {
+ auto* kv = const_cast<bundle_keyval_t*>(static_cast<const bundle_keyval_t*>(arg));
+
+ if (BUNDLE_TYPE_STR != bundle_keyval_get_type(kv)) {
+ return false;
+ }
+
+ void* untyped = nullptr;
+ size_t size = 0;
+
+ int ret = bundle_keyval_get_basic_val(kv, &untyped, &size);
+ if (BUNDLE_ERROR_NONE != ret) {
+ return false;
+ }
+
+ string value = static_cast<char*>(untyped);
+ return value == expected;
+}
+
+MATCHER_P(KeyValStrArrEq, expected, "match keyval_t string array value") {
+ auto* kv = const_cast<bundle_keyval_t*>(static_cast<const bundle_keyval_t*>(arg));
+
+ if (BUNDLE_TYPE_STR_ARRAY != bundle_keyval_get_type(kv)) {
+ return false;
+ }
+
+ void** untyped = nullptr;
+ size_t array_size = 0;
+ size_t* elem_size = nullptr;
+
+ int ret = bundle_keyval_get_array_val(kv, &untyped, &array_size, &elem_size);
+ if (BUNDLE_ERROR_NONE != ret) {
+ return false;
+ }
+
+ if (array_size != expected.size()) {
+ return false;
+ }
+
+ char** value = reinterpret_cast<char**>(untyped);
+ for (size_t i = 0; i < array_size; ++i) {
+ if (string(value[i]) != expected[i]) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+MATCHER_P(KeyValBytesEq, expected, "match keyval_t bytes value") {
+ auto* kv = const_cast<bundle_keyval_t*>(static_cast<const bundle_keyval_t*>(arg));
+
+ if (BUNDLE_TYPE_BYTE != bundle_keyval_get_type(kv)) {
+ return false;
+ }
+
+ void* untyped = nullptr;
+ size_t size = 0;
+
+ int ret = bundle_keyval_get_basic_val(kv, &untyped, &size);
+ if (BUNDLE_ERROR_NONE != ret) {
+ return false;
+ }
+
+ if (size != expected.size()) {
+ return false;
+ }
+
+ auto bytes = static_cast<unsigned char*>(untyped);
+ for (unsigned int i = 0; i < size; ++i) {
+ if (bytes[i] != expected[i]) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+MATCHER_P(KeyValBytesArrEq, expected, "match keyval_t bytes array value") {
+ auto* kv = const_cast<bundle_keyval_t*>(static_cast<const bundle_keyval_t*>(arg));
+
+ if (BUNDLE_TYPE_BYTE_ARRAY != bundle_keyval_get_type(kv)) {
+ return false;
+ }
+
+ void** untyped = nullptr;
+ size_t array_size = 0;
+ size_t* elem_size = nullptr;
+
+ int ret = bundle_keyval_get_array_val(kv, &untyped, &array_size, &elem_size);
+ if (BUNDLE_ERROR_NONE != ret) {
+ return false;
+ }
+
+ if (array_size != expected.size()) {
+ return false;
+ }
+
+ unsigned char** value = reinterpret_cast<unsigned char**>(untyped);
+ for (size_t i = 0; i < array_size; ++i) {
+ for (size_t j = 0; j < elem_size[i]; ++j) {
+ if (expected[i][j] != value[i][j]) {
+ return false;
+ }
+ }
+ }
+
+ return true;
+}
+
+class JsonToBundleTest : public testing::Test {
+ public:
+ virtual void SetUp() {
+ bundleData = nullptr;
+ }
+
+ virtual void TearDown() {
+ if (bundleData) {
+ bundle_free(bundleData);
+ }
+ }
+
+ // Replacing bundle_keyval_t with void and cast it in matcher is required because
+ // bundle_keyval_t has only public declaration, not implementation.
+ // This causes incomplete type error which I couldn't resolve in any other way.
+ using BundleIterator = void(const char*, const int, const void*, void*);
+ using BundleIteratorMock = testing::MockFunction<BundleIterator>;
+
+ void CheckBundle(bundle* b, BundleIteratorMock& mock) {
+ bundle_foreach(b,
+ [](const char* key, const int type, const bundle_keyval_t* kv, void* ud) {
+ auto* mock = static_cast<testing::MockFunction<BundleIterator>*>(ud);
+ mock->Call(key, type, kv, nullptr);
+ },
+ &mock);
+ }
+
+ bundle* bundleData;
+ BundleIteratorMock bundleIteratorMock;
+};
+
+TEST_F(JsonToBundleTest, BytesArrayConversion) {
+ vector<vector<unsigned char>> value = {{0, 1, 2}, {100, 101, 102}, {200, 201, 202}};
+
+ auto json_val = picojson::value(picojson::object());
+ auto& json = json_val.get<picojson::object>();
+
+ picojson::array array;
+ array.push_back(vec2json<double>(value[0]));
+ array.push_back(vec2json<double>(value[1]));
+ array.push_back(vec2json<double>(value[2]));
+
+ json["key"] = picojson::value(array);
+
+ auto result = common::JsonToBundle(json_val, &bundleData);
+ ASSERT_TRUE(result);
+
+ EXPECT_CALL(bundleIteratorMock,
+ Call(StrEq("key"), BUNDLE_TYPE_BYTE_ARRAY, KeyValBytesArrEq(value), nullptr));
+
+ CheckBundle(bundleData, bundleIteratorMock);
+}
+
+TEST_F(JsonToBundleTest, BytesConversion) {
+ vector<unsigned char> value = {0, 126, 255};
+
+ auto json_val = picojson::value(picojson::object());
+ auto& json = json_val.get<picojson::object>();
+
+ json["key"] = vec2json<double>(value);
+
+ auto result = common::JsonToBundle(json_val, &bundleData);
+ ASSERT_TRUE(result);
+
+ EXPECT_CALL(bundleIteratorMock,
+ Call(StrEq("key"), BUNDLE_TYPE_BYTE, KeyValBytesEq(value), nullptr));
+
+ CheckBundle(bundleData, bundleIteratorMock);
+}
+
+TEST_F(JsonToBundleTest, BytesConversionInvalidByteValue) {
+ auto json_val = picojson::value(picojson::object());
+ auto& json = json_val.get<picojson::object>();
+ json["key"] = vec2json<double>(vector<double>({1.0, 256.0, 2.0}));
+
+ auto result = common::JsonToBundle(json_val, &bundleData);
+ ASSERT_FALSE(result);
+
+ json["key"] = vec2json<double>(vector<double>({1.0, -1.0, 2.0}));
+ result = common::JsonToBundle(json_val, &bundleData);
+ ASSERT_FALSE(result);
+}
+
+TEST_F(JsonToBundleTest, StringConversion) {
+ string value = "tizen";
+
+ auto json_val = picojson::value(picojson::object());
+ auto& json = json_val.get<picojson::object>();
+
+ json["key"] = picojson::value(value);
+
+ auto result = common::JsonToBundle(json_val, &bundleData);
+ ASSERT_TRUE(result);
+
+ EXPECT_CALL(bundleIteratorMock, Call(StrEq("key"), BUNDLE_TYPE_STR, KeyValStrEq(value), nullptr));
+
+ CheckBundle(bundleData, bundleIteratorMock);
+}
+
+TEST_F(JsonToBundleTest, StringArrayConversion) {
+ vector<string> value = {"str1", "str2", "str3"};
+
+ auto json_val = picojson::value(picojson::object());
+ auto& json = json_val.get<picojson::object>();
+
+ json["key"] = picojson::value(picojson::array(
+ {picojson::value(value[0]), picojson::value(value[1]), picojson::value(value[2])}));
+
+ auto result = common::JsonToBundle(json_val, &bundleData);
+ ASSERT_TRUE(result);
+
+ EXPECT_CALL(bundleIteratorMock,
+ Call(StrEq("key"), BUNDLE_TYPE_STR_ARRAY, KeyValStrArrEq(value), nullptr));
+
+ CheckBundle(bundleData, bundleIteratorMock);
+}
+
+TEST_F(JsonToBundleTest, UnsupportedType) {
+ auto json_val = picojson::value(picojson::object());
+ auto& json = json_val.get<picojson::object>();
+
+ json["key"] = picojson::value(true);
+ auto result = common::JsonToBundle(json_val, &bundleData);
+ ASSERT_FALSE(result);
+
+ json["key"] = picojson::value(picojson::object());
+ result = common::JsonToBundle(json_val, &bundleData);
+ ASSERT_FALSE(result);
+}
+
+TEST_F(JsonToBundleTest, NullConversion) {
+ picojson::value json_val;
+ auto result = common::JsonToBundle(json_val, &bundleData);
+ ASSERT_TRUE(result);
+ ASSERT_EQ(nullptr, bundleData);
+}
+
+class BundleToJsonTest : public testing::Test {
+ public:
+ virtual void SetUp() {
+ bundleData = bundle_create();
+ }
+
+ virtual void TearDown() {
+ if (bundleData) {
+ bundle_free(bundleData);
+ }
+ }
+
+ bundle* bundleData;
+};
+
+TEST_F(BundleToJsonTest, NullConversion) {
+ bundle* data = nullptr;
+ picojson::value json;
+ auto result = common::BundleToJson(data, &json);
+ ASSERT_TRUE(result);
+ ASSERT_TRUE(json.is<picojson::null>());
+}
+
+TEST_F(BundleToJsonTest, StringConversion) {
+ string key = "key", value = "tizen";
+ ASSERT_EQ(bundle_add_str(bundleData, key.c_str(), value.c_str()), BUNDLE_ERROR_NONE);
+
+ picojson::value json;
+ auto result = common::BundleToJson(bundleData, &json);
+
+ ASSERT_TRUE(result);
+ ASSERT_TRUE(json.is<picojson::object>());
+ ASSERT_EQ(json.get<picojson::object>()[key].get<string>(), value);
+}
+
+TEST_F(BundleToJsonTest, StringArrayConversion) {
+ string key = "key";
+ vector<const char*> value = {"value1", "value2"};
+
+ ASSERT_EQ(bundle_add_str_array(bundleData, key.c_str(), value.data(), value.size()),
+ BUNDLE_ERROR_NONE);
+
+ picojson::value json;
+ auto result = common::BundleToJson(bundleData, &json);
+ ASSERT_TRUE(result);
+ ASSERT_TRUE(json.is<picojson::object>());
+
+ const auto& array = json.get<picojson::object>()[key].get<picojson::array>();
+ ASSERT_EQ(array.size(), value.size());
+ EXPECT_EQ(array[0].get<std::string>(), std::string(value[0]));
+ EXPECT_EQ(array[1].get<std::string>(), std::string(value[1]));
+}
+
+TEST_F(BundleToJsonTest, BytesConversion) {
+ string key = "key";
+ vector<unsigned char> bytes = {0, 126, 255};
+
+ ASSERT_EQ(bundle_add_byte(bundleData, key.c_str(), bytes.data(), bytes.size()),
+ BUNDLE_ERROR_NONE);
+
+ picojson::value json;
+ auto result = common::BundleToJson(bundleData, &json);
+ ASSERT_TRUE(result);
+ ASSERT_TRUE(json.is<picojson::object>());
+
+ const auto& array = json.get<picojson::object>()[key].get<picojson::array>();
+ ASSERT_EQ(array.size(), bytes.size());
+ EXPECT_EQ(array[0].get<double>(), bytes[0]);
+ EXPECT_EQ(array[1].get<double>(), bytes[1]);
+ EXPECT_EQ(array[2].get<double>(), bytes[2]);
+}
+
+TEST_F(BundleToJsonTest, BytesArrayConversion) {
+ string key = "key";
+ vector<vector<unsigned char>> value = {{0, 126, 255}, {1, 127, 254}};
+
+ ASSERT_EQ(bundle_add_byte_array(bundleData, key.c_str(), nullptr, value.size()),
+ BUNDLE_ERROR_NONE);
+ ASSERT_EQ(
+ bundle_set_byte_array_element(bundleData, key.c_str(), 0, value[0].data(), value[0].size()),
+ BUNDLE_ERROR_NONE);
+ ASSERT_EQ(
+ bundle_set_byte_array_element(bundleData, key.c_str(), 1, value[1].data(), value[1].size()),
+ BUNDLE_ERROR_NONE);
+
+ picojson::value json;
+ auto result = common::BundleToJson(bundleData, &json);
+ ASSERT_TRUE(result);
+ ASSERT_TRUE(json.is<picojson::object>());
+
+ auto& array = json.get<picojson::object>()[key].get<picojson::array>();
+ ASSERT_EQ(array.size(), value.size());
+
+ auto& bytes = array[0].get<picojson::array>();
+ ASSERT_EQ(bytes.size(), value[0].size());
+ EXPECT_EQ(bytes[0].get<double>(), value[0][0]);
+ EXPECT_EQ(bytes[1].get<double>(), value[0][1]);
+ EXPECT_EQ(bytes[2].get<double>(), value[0][2]);
+
+ bytes = array[1].get<picojson::array>();
+ ASSERT_EQ(bytes.size(), value[1].size());
+ EXPECT_EQ(bytes[0].get<double>(), value[1][0]);
+ EXPECT_EQ(bytes[1].get<double>(), value[1][1]);
+ EXPECT_EQ(bytes[2].get<double>(), value[1][2]);
+}
+
--- /dev/null
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef COMMON_UT_JSON_UTILS_H
+#define COMMON_UT_JSON_UTILS_H
+
+class JsonToBundleTest;
+class BundleToJsonTest;
+
+#endif // COMMON_UT_JSON_UTILS_H
--- /dev/null
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "gtest/gtest.h"
+
+#include "common/ut/json-utils.h"
+
+#include "tizen.h"
+
+int main(int argc, char* argv[]) {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}
+