From: Michal Michalski Date: Tue, 30 Jul 2019 09:30:12 +0000 (+0200) Subject: [tests][common][webapi-plugins.spec] Changed common unit tests files structure. X-Git-Tag: submit/tizen/20190805.070446~2^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a335b0373d72054ebcd3f3d989b406bdd4d0ddf9;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [tests][common][webapi-plugins.spec] Changed common unit tests files structure. New structure allows better modularization of unit tests. [Verification] webapi_common_tests are built successfully and pass. Signed-off-by: Michal Michalski Change-Id: Icad5cca7739716bde7c09092f4d1d73fca1972a0 --- diff --git a/packaging/webapi-plugins.spec b/packaging/webapi-plugins.spec index 6733b912..8af04596 100644 --- a/packaging/webapi-plugins.spec +++ b/packaging/webapi-plugins.spec @@ -1201,7 +1201,7 @@ mkdir -p %{buildroot}%{crosswalk_extensions_path}/mobile # 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 @@ -1339,7 +1339,7 @@ fi # 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 diff --git a/src/common/common_ut.gyp b/src/common/common_ut.gyp index 1ceb42f5..61db8ad3 100644 --- a/src/common/common_ut.gyp +++ b/src/common/common_ut.gyp @@ -4,7 +4,7 @@ ], 'targets': [ { - 'target_name': 'bundle_ut', + 'target_name': 'webapi_common_tests', 'type': 'executable', 'dependencies': [ 'common.gyp:tizen_common' @@ -19,7 +19,8 @@ '../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', diff --git a/src/common/ut/bundle_ut.cc b/src/common/ut/bundle_ut.cc deleted file mode 100644 index 0155d4d1..00000000 --- a/src/common/ut/bundle_ut.cc +++ /dev/null @@ -1,402 +0,0 @@ -/* - * 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 -#include -#include - -using namespace std; -using testing::_; -using testing::StrEq; - -namespace { - -template -picojson::value vec2json(vector vec) { - picojson::array array; - for (auto v : vec) { - array.push_back(picojson::value(static_cast(v))); - } - return picojson::value(array); -} - -} // namespace - -MATCHER_P(KeyValStrEq, expected, "match keyval_t string value") { - auto* kv = const_cast(static_cast(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(untyped); - return value == expected; -} - -MATCHER_P(KeyValStrArrEq, expected, "match keyval_t string array value") { - auto* kv = const_cast(static_cast(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(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(static_cast(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(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(static_cast(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(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; - - 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*>(ud); - mock->Call(key, type, kv, nullptr); - }, - &mock); - } - - bundle* bundleData; - BundleIteratorMock bundleIteratorMock; -}; - -TEST_F(JsonToBundleTest, BytesArrayConversion) { - vector> value = {{0, 1, 2}, {100, 101, 102}, {200, 201, 202}}; - - auto json_val = picojson::value(picojson::object()); - auto& json = json_val.get(); - - picojson::array array; - array.push_back(vec2json(value[0])); - array.push_back(vec2json(value[1])); - array.push_back(vec2json(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 value = {0, 126, 255}; - - auto json_val = picojson::value(picojson::object()); - auto& json = json_val.get(); - - json["key"] = vec2json(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(); - json["key"] = vec2json(vector({1.0, 256.0, 2.0})); - - auto result = common::JsonToBundle(json_val, &bundleData); - ASSERT_FALSE(result); - - json["key"] = vec2json(vector({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(); - - 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 value = {"str1", "str2", "str3"}; - - auto json_val = picojson::value(picojson::object()); - auto& json = json_val.get(); - - 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(); - - 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()); -} - -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()); - ASSERT_EQ(json.get()[key].get(), value); -} - -TEST_F(BundleToJsonTest, StringArrayConversion) { - string key = "key"; - vector 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()); - - const auto& array = json.get()[key].get(); - ASSERT_EQ(array.size(), value.size()); - EXPECT_EQ(array[0].get(), std::string(value[0])); - EXPECT_EQ(array[1].get(), std::string(value[1])); -} - -TEST_F(BundleToJsonTest, BytesConversion) { - string key = "key"; - vector 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()); - - const auto& array = json.get()[key].get(); - ASSERT_EQ(array.size(), bytes.size()); - EXPECT_EQ(array[0].get(), bytes[0]); - EXPECT_EQ(array[1].get(), bytes[1]); - EXPECT_EQ(array[2].get(), bytes[2]); -} - -TEST_F(BundleToJsonTest, BytesArrayConversion) { - string key = "key"; - vector> 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()); - - auto& array = json.get()[key].get(); - ASSERT_EQ(array.size(), value.size()); - - auto& bytes = array[0].get(); - ASSERT_EQ(bytes.size(), value[0].size()); - EXPECT_EQ(bytes[0].get(), value[0][0]); - EXPECT_EQ(bytes[1].get(), value[0][1]); - EXPECT_EQ(bytes[2].get(), value[0][2]); - - bytes = array[1].get(); - ASSERT_EQ(bytes.size(), value[1].size()); - EXPECT_EQ(bytes[0].get(), value[1][0]); - EXPECT_EQ(bytes[1].get(), value[1][1]); - EXPECT_EQ(bytes[2].get(), value[1][2]); -} - -int main(int argc, char* argv[]) { - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/src/common/ut/json-utils.cc b/src/common/ut/json-utils.cc new file mode 100644 index 00000000..935b7765 --- /dev/null +++ b/src/common/ut/json-utils.cc @@ -0,0 +1,398 @@ +/* + * 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 +#include +#include + +using namespace std; +using testing::_; +using testing::StrEq; + +namespace { + +template +picojson::value vec2json(vector vec) { + picojson::array array; + for (auto v : vec) { + array.push_back(picojson::value(static_cast(v))); + } + return picojson::value(array); +} + +} // namespace + +MATCHER_P(KeyValStrEq, expected, "match keyval_t string value") { + auto* kv = const_cast(static_cast(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(untyped); + return value == expected; +} + +MATCHER_P(KeyValStrArrEq, expected, "match keyval_t string array value") { + auto* kv = const_cast(static_cast(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(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(static_cast(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(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(static_cast(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(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; + + 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*>(ud); + mock->Call(key, type, kv, nullptr); + }, + &mock); + } + + bundle* bundleData; + BundleIteratorMock bundleIteratorMock; +}; + +TEST_F(JsonToBundleTest, BytesArrayConversion) { + vector> value = {{0, 1, 2}, {100, 101, 102}, {200, 201, 202}}; + + auto json_val = picojson::value(picojson::object()); + auto& json = json_val.get(); + + picojson::array array; + array.push_back(vec2json(value[0])); + array.push_back(vec2json(value[1])); + array.push_back(vec2json(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 value = {0, 126, 255}; + + auto json_val = picojson::value(picojson::object()); + auto& json = json_val.get(); + + json["key"] = vec2json(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(); + json["key"] = vec2json(vector({1.0, 256.0, 2.0})); + + auto result = common::JsonToBundle(json_val, &bundleData); + ASSERT_FALSE(result); + + json["key"] = vec2json(vector({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(); + + 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 value = {"str1", "str2", "str3"}; + + auto json_val = picojson::value(picojson::object()); + auto& json = json_val.get(); + + 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(); + + 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()); +} + +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()); + ASSERT_EQ(json.get()[key].get(), value); +} + +TEST_F(BundleToJsonTest, StringArrayConversion) { + string key = "key"; + vector 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()); + + const auto& array = json.get()[key].get(); + ASSERT_EQ(array.size(), value.size()); + EXPECT_EQ(array[0].get(), std::string(value[0])); + EXPECT_EQ(array[1].get(), std::string(value[1])); +} + +TEST_F(BundleToJsonTest, BytesConversion) { + string key = "key"; + vector 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()); + + const auto& array = json.get()[key].get(); + ASSERT_EQ(array.size(), bytes.size()); + EXPECT_EQ(array[0].get(), bytes[0]); + EXPECT_EQ(array[1].get(), bytes[1]); + EXPECT_EQ(array[2].get(), bytes[2]); +} + +TEST_F(BundleToJsonTest, BytesArrayConversion) { + string key = "key"; + vector> 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()); + + auto& array = json.get()[key].get(); + ASSERT_EQ(array.size(), value.size()); + + auto& bytes = array[0].get(); + ASSERT_EQ(bytes.size(), value[0].size()); + EXPECT_EQ(bytes[0].get(), value[0][0]); + EXPECT_EQ(bytes[1].get(), value[0][1]); + EXPECT_EQ(bytes[2].get(), value[0][2]); + + bytes = array[1].get(); + ASSERT_EQ(bytes.size(), value[1].size()); + EXPECT_EQ(bytes[0].get(), value[1][0]); + EXPECT_EQ(bytes[1].get(), value[1][1]); + EXPECT_EQ(bytes[2].get(), value[1][2]); +} + diff --git a/src/common/ut/json-utils.h b/src/common/ut/json-utils.h new file mode 100644 index 00000000..653a8210 --- /dev/null +++ b/src/common/ut/json-utils.h @@ -0,0 +1,22 @@ +/* + * 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 diff --git a/src/common/ut/main.cc b/src/common/ut/main.cc new file mode 100644 index 00000000..044ac9f5 --- /dev/null +++ b/src/common/ut/main.cc @@ -0,0 +1,27 @@ +/* + * 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(); +} +