From 11d8275bdf32d5337769cf1f680e8a7280e713a5 Mon Sep 17 00:00:00 2001 From: Inkyun Kil Date: Fri, 10 Apr 2020 13:49:36 +0900 Subject: [PATCH] Adds unittest for watch-holder Change-Id: Idd9efe57096f33c637e858b6fdd5b3cfb2f290a0 Signed-off-by: Inkyun Kil --- unittest/CMakeLists.txt | 4 ++ unittest/mock/appsvc_mock.h | 32 +++++++++ unittest/mock/mock.cc | 7 +- unittest/mock/vconf_mock.h | 2 +- unittest/src/appsvc_mock.h | 32 +++++++++ unittest/src/test_watch_holder.cc | 144 ++++++++++++++++++++++++++++++++++++++ unittest/src/test_watch_mirror.cc | 90 ++++++++++++++++++++++++ 7 files changed, 309 insertions(+), 2 deletions(-) create mode 100644 unittest/mock/appsvc_mock.h create mode 100644 unittest/src/appsvc_mock.h create mode 100644 unittest/src/test_watch_holder.cc create mode 100644 unittest/src/test_watch_mirror.cc diff --git a/unittest/CMakeLists.txt b/unittest/CMakeLists.txt index 784421b..a35ffac 100644 --- a/unittest/CMakeLists.txt +++ b/unittest/CMakeLists.txt @@ -46,6 +46,7 @@ SET(CMAKE_C_FLAGS_RELEASE "-O2") INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../widget_viewer_evas/include) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../ambient-viewer/src) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../ambient-viewer/include) +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../watch-holder/src) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../unittest/mock) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../) @@ -53,11 +54,13 @@ AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/mock UNIT_TEST_SOURCES) AUX_SOURCE_DIRECTORY(src SOURCES) AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../widget_viewer_evas/src WIDGET_VIEWER_EVAS_SOURCES) AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../ambient-viewer/src AMBIENT_VIEWER_SOURCES) +AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../watch-holder/src WATCH_HOLDER_SOURCES) ADD_EXECUTABLE(${PROJECT_NAME} ${SOURCES} ${WIDGET_VIEWER_EVAS_SOURCES} ${UNIT_TEST_SOURCES} ${AMBIENT_VIEWER_SOURCES} + ${WATCH_HOLDER_SOURCES} ) TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${widget-viewer_unittests_LDFLAGS} @@ -66,6 +69,7 @@ TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${widget-viewer_unittests_LDFLAGS} gmock widget_viewer_evas ambient-viewer + watch-holder ) INSTALL(TARGETS ${PROJECT_NAME} DESTINATION /usr/bin/) diff --git a/unittest/mock/appsvc_mock.h b/unittest/mock/appsvc_mock.h new file mode 100644 index 0000000..b9b2bb6 --- /dev/null +++ b/unittest/mock/appsvc_mock.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2020 Samsung Electronics Co., Ltd. + * + * 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 MOCK_APPSVC_H_ +#define MOCK_APPSVC_H_ + +#include "mock.h" +#include "appsvc.h" + +#ifdef __cplusplus +extern "C" { +#endif + +DECLARE_FAKE_VALUE_FUNC(int, appsvc_run_service, bundle*, int, appsvc_res_fn, void*); + +#ifdef __cplusplus +} +#endif +#endif /* MOCK_APPSVC_H_ */ diff --git a/unittest/mock/mock.cc b/unittest/mock/mock.cc index d8fad63..186de22 100644 --- a/unittest/mock/mock.cc +++ b/unittest/mock/mock.cc @@ -9,6 +9,7 @@ #include "cynara_mock.h" #include "evas_mock.h" #include "aul_mock.h" +#include "appsvc_mock.h" #include "widget_service_mock.h" #include "screen_connector_mock.h" #include "vconf_mock.h" @@ -56,11 +57,15 @@ DEFINE_FAKE_VOID_FUNC(elm_object_signal_emit, Evas_Object *, const char *, /* aul */ DEFINE_FAKE_VALUE_FUNC(int, aul_app_get_appid_bypid, int, char *, int); DEFINE_FAKE_VALUE_FUNC_VARARG(int, aul_widget_write_log, const char *, const char *, ...); + DEFINE_FAKE_VALUE_FUNC(int, aul_app_com_create, const char *, aul_app_com_permission_h, app_com_cb, void *, aul_app_com_connection_h *); DEFINE_FAKE_VALUE_FUNC(int, aul_app_com_leave, aul_app_com_connection_h); DEFINE_FAKE_VALUE_FUNC(int, aul_app_com_send, const char *, bundle *); +/* appsvc */ +DEFINE_FAKE_VALUE_FUNC(int, appsvc_run_service, bundle*, int, appsvc_res_fn, void*); + /* widget_service */ DEFINE_FAKE_VALUE_FUNC(int, widget_service_get_widget_max_count, const char *); DEFINE_FAKE_VALUE_FUNC(int, widget_instance_create, const char *, char **); @@ -74,4 +79,4 @@ DEFINE_FAKE_VALUE_FUNC(char *, vconf_get_str, const char *); DEFINE_FAKE_VALUE_FUNC(int, vconf_notify_key_changed, const char *, vconf_callback_fn, void *); DEFINE_FAKE_VALUE_FUNC(int, vconf_ignore_key_changed, - const char *, vconf_callback_fn); + const char *, vconf_callback_fn); \ No newline at end of file diff --git a/unittest/mock/vconf_mock.h b/unittest/mock/vconf_mock.h index 5457653..3522571 100644 --- a/unittest/mock/vconf_mock.h +++ b/unittest/mock/vconf_mock.h @@ -1,4 +1,3 @@ - /* * Copyright (c) 2020 Samsung Electronics Co., Ltd. * @@ -25,6 +24,7 @@ extern "C" { #endif + DECLARE_FAKE_VALUE_FUNC(char *, vconf_get_str, const char *); DECLARE_FAKE_VALUE_FUNC(int, vconf_notify_key_changed, const char *, vconf_callback_fn, void *); diff --git a/unittest/src/appsvc_mock.h b/unittest/src/appsvc_mock.h new file mode 100644 index 0000000..b9b2bb6 --- /dev/null +++ b/unittest/src/appsvc_mock.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2020 Samsung Electronics Co., Ltd. + * + * 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 MOCK_APPSVC_H_ +#define MOCK_APPSVC_H_ + +#include "mock.h" +#include "appsvc.h" + +#ifdef __cplusplus +extern "C" { +#endif + +DECLARE_FAKE_VALUE_FUNC(int, appsvc_run_service, bundle*, int, appsvc_res_fn, void*); + +#ifdef __cplusplus +} +#endif +#endif /* MOCK_APPSVC_H_ */ diff --git a/unittest/src/test_watch_holder.cc b/unittest/src/test_watch_holder.cc new file mode 100644 index 0000000..aa6a863 --- /dev/null +++ b/unittest/src/test_watch_holder.cc @@ -0,0 +1,144 @@ +/* + * Copyright (c) 2020 Samsung Electronics Co., Ltd. + * + * 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 +#include +#include + +#include +#include +#include +#include +#include + +using namespace std; +using namespace tizen_base; +using namespace watch_holder; + +class WatchHolderStub : public WatchHolder { + public: + WatchHolderStub(Evas_Object* win) + : WatchHolder(win) { + } + + void OnAmbientChanged(bool enter, Bundle& extra) override {} + void OnAmbientEvent(EventType ev, string sender, + Bundle extra) override {} + void OnAdded(const Watch& watch) override {} + void OnUpdated(const Watch& watch) override {} + void OnRemoved(const Watch& watch) override {} + void OnLaunched(const Watch& watch) override {} + void OnDead(const Watch& watch) override {} + void OnBound(const Watch& watch) override {} +}; + +static int (*__app_com_cb)(const char *endpoint, aul_app_com_result_e result, bundle *envelope, void *user_data); +static Bundle b; +static string global_end; + +static int __aul_app_get_appid_bypid_fake(int pid, char* appid, int len) { + snprintf(appid, len, "%s", "org.tizen.test"); + return 0; +} + +static int __aul_app_com_create_fake(const char* end, aul_app_com_permission_h permission, + app_com_cb cb, void* user_data, aul_app_com_connection_h* conn) { + *conn = nullptr; + b = Bundle(); + b.Add("__AUL_APPID__", "appid"); + b.Add("__AUL_PID__", "111"); + b.Add("__AUL_IS_FAULT__", "is_fault"); + b.Add("__AUL_WIDGET_VIEWER__", "fake"); + b.Add("__AMBIENT_MODE__", "100"); + b.Add("__APP_AMBIENT_EVENT__", "0"); + b.Add("__APP_AMBIENT_SENDER__", "sender"); + + if(strcmp(end, global_end.c_str()) == 0) + __app_com_cb = cb; + return 0; +} + +static int __aul_app_com_leave_fake(aul_app_com_connection_h conn) { + return 0; +} + +static int __appsvc_run_service_fake(bundle* b, int r, appsvc_res_fn cb, void* data) { + return 0; +} + +class WatchHolderTest : public ::testing::Test { + public: + WatchHolderStub* stub; + + virtual void SetUp() { + aul_app_com_create_fake.custom_fake = __aul_app_com_create_fake; + aul_app_com_leave_fake.custom_fake = __aul_app_com_leave_fake; + aul_app_get_appid_bypid_fake.custom_fake = __aul_app_get_appid_bypid_fake; + + Evas_Object* win = elm_win_add(NULL, "Watch Holder", ELM_WIN_BASIC); + stub = new WatchHolderStub(win); + } + virtual void TearDown() { + delete stub; + } +}; + +TEST_F(WatchHolderTest, CreateInstance) { + EXPECT_NE(WatchHolderTest::stub, nullptr); +} + +TEST_F(WatchHolderTest, LaunchWatch) { + appsvc_run_service_fake.custom_fake = __appsvc_run_service_fake; + string appid("org.tizen.watch"); + int ret; + + ret = WatchHolderTest::stub->Launch(appid, false, nullptr); + EXPECT_NE(ret, -1); +} + +TEST_F(WatchHolderTest, GetStack) { + std::list> list; + list = WatchHolderTest::stub->GetStack(); + EXPECT_EQ(list.size(), 0); +} + +TEST_F(WatchHolderTest, GetCurrent_N) { + EXPECT_EQ(WatchHolderTest::stub->GetCurrent(), nullptr); + global_end = "watch.launch"; +} + +TEST_F(WatchHolderTest, OnLaunchSignal) { + EXPECT_NE(WatchHolderTest::stub, nullptr); + __app_com_cb("end", AUL_APP_COM_R_OK, b.GetHandle(), stub); + global_end = "watch.dead"; +} + +TEST_F(WatchHolderTest, OnDeadSignal) { + EXPECT_NE(WatchHolderTest::stub, nullptr); + __app_com_cb("end", AUL_APP_COM_R_OK, b.GetHandle(), stub); + global_end = "watch.ambientchange"; +} + +TEST_F(WatchHolderTest, OnAmbientChangedSignal) { + EXPECT_NE(WatchHolderTest::stub, nullptr); + __app_com_cb("end", AUL_APP_COM_R_OK, b.GetHandle(), stub); + global_end = "aod.ambientevent"; +} + +TEST_F(WatchHolderTest, OnReceiveSignal) { + EXPECT_NE(WatchHolderTest::stub, nullptr); + __app_com_cb("end", AUL_APP_COM_R_OK, b.GetHandle(), stub); +} \ No newline at end of file diff --git a/unittest/src/test_watch_mirror.cc b/unittest/src/test_watch_mirror.cc new file mode 100644 index 0000000..26f11c5 --- /dev/null +++ b/unittest/src/test_watch_mirror.cc @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2020 Samsung Electronics Co., Ltd. + * + * 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 +#include +#include + +#include +#include +#include + +using namespace std; +using namespace tizen_base; +using namespace watch_holder; + +class WatchMirrorStub : public WatchMirror { + public: + WatchMirrorStub(Evas_Object* win) + : WatchMirror(win) { + } + + void OnChanged(const ISharableWatch& watch) override {} + void OnAdded(const ISharableWatch& watch) override {} + void OnUpdated(const ISharableWatch& watch) override {} + void OnRemoved(const ISharableWatch& watch) override {} +}; + +static int __vconf_notify_key_changed_fake(const char* key, vconf_callback_fn cb, + void* data) { + return 0; +} + +static char* __vconf_get_str_fake(const char* key) { + bundle_raw* raw; + int len; + bundle* b = bundle_create(); + bundle_add_str(b, NOTIFY_CHANGED_EVENT_APPID_KEY, "appid"); + bundle_add_str(b, NOTIFY_CHANGED_EVENT_RID_KEY, "rid"); + + bundle_encode(b, &raw, &len); + bundle_free(b); + return (char*)raw; +} + + +class WatchMirrorTest : public ::testing::Test { + public: + WatchMirrorStub* mirrorstub; + + virtual void SetUp() { + Evas_Object* mirwin = elm_win_add(NULL, "Watch Mirror", ELM_WIN_BASIC); + mirrorstub = new WatchMirrorStub(mirwin); + } + virtual void TearDown() { + delete mirrorstub; + } +}; + + TEST_F(WatchMirrorTest, CreateMirrorInstance) { + EXPECT_NE(WatchMirrorTest::mirrorstub, nullptr); + } + +TEST_F(WatchMirrorTest, MirrorListen) { + int ret; + + vconf_notify_key_changed_fake.custom_fake = __vconf_notify_key_changed_fake; + vconf_get_str_fake.custom_fake = __vconf_get_str_fake; + + ret = WatchMirrorTest::mirrorstub->Listen(); + EXPECT_EQ(ret, 0); +} + +TEST_F(WatchMirrorTest, MirrorGetCurrent_N) { + shared_ptr sw; + sw = WatchMirrorTest::mirrorstub->GetCurrent(); + EXPECT_EQ(sw, nullptr); +} -- 2.7.4