Add unittest skeleton 57/235757/4
authorJihoon Kim <jihoon48.kim@samsung.com>
Tue, 9 Jun 2020 10:15:37 +0000 (19:15 +0900)
committerJihoon Kim <jihoon48.kim@samsung.com>
Fri, 26 Jun 2020 07:31:54 +0000 (16:31 +0900)
Change-Id: Id4fde0fc3694b094e65795c2ba68c9173e32bfa7
Signed-off-by: Jihoon Kim <jihoon48.kim@samsung.com>
CMakeLists.txt
client/tts.c
packaging/tts.spec
tests/CMakeLists.txt [new file with mode: 0644]
tests/src/main.cpp [new file with mode: 0644]
tests/src/system_info_mock.cpp [new file with mode: 0644]
tests/src/system_info_mock.h [new file with mode: 0644]
tests/src/tts_unittests.cpp [new file with mode: 0644]

index b9537cf..1f428e9 100644 (file)
@@ -85,3 +85,13 @@ ENDIF()
 
 ## Sample application ##
 ADD_SUBDIRECTORY(test)
+
+## Test
+IF(NOT DEFINED MINIMUM_BUILD)
+ENABLE_TESTING()
+SET(UNITTEST_TTS tts_unittests)
+ADD_TEST(NAME ${UNITTEST_TTS} COMMAND ${UNITTEST_TTS}
+                        WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/tests)
+
+ADD_SUBDIRECTORY(tests)
+ENDIF(NOT DEFINED MINIMUM_BUILD)
index 4d7b549..513a63c 100644 (file)
@@ -62,7 +62,7 @@ static Eina_Bool __tts_notify_error(void *data);
 int __tts_cb_error(int uid, tts_error_e reason, int utt_id, char* err_msg);
 int __tts_recheck_screen_reader();
 
-const char* tts_tag()
+static const char* tts_tag()
 {
        return "ttsc";
 }
@@ -150,7 +150,7 @@ void __tts_config_voice_changed_cb(const char* before_lang, int before_voice_typ
                        data = iter->data;
                        if (NULL != data->default_voice_changed_cb) {
                                SLOG(LOG_DEBUG, TAG_TTSC, "Call default voice changed callback : uid(%d)", data->uid);
-                               data->default_voice_changed_cb(data->tts, before_lang, before_voice_type, 
+                               data->default_voice_changed_cb(data->tts, before_lang, before_voice_type,
                                        language, voice_type, data->default_voice_changed_user_data);
                        }
 
index 8618e19..0208d9c 100644 (file)
@@ -30,10 +30,16 @@ BuildRequires:  pkgconfig(pkgmgr-info)
 BuildRequires:  pkgconfig(pkgmgr-installer)
 BuildRequires:  pkgconfig(vconf)
 BuildRequires:  pkgconfig(bundle)
+BuildRequires:  pkgconfig(gmock)
 
 
 BuildRequires:  cmake
 
+%if 0%{?gcov:1}
+BuildRequires:  lcov
+BuildRequires:  zip
+%endif
+
 %description
 Text To Speech client library and daemon.
 
@@ -70,6 +76,14 @@ Group:               Graphics & UI Framework/Voice Framework
 Text To Speech gcov objects
 %endif
 
+%package unittests
+Summary:    TTS tests
+Group:      Development/Libraries
+Requires:   %{name} = %{version}-%{release}
+
+%description unittests
+GTest for TTS
+
 
 %prep
 %setup -q -n %{name}-%{version}
@@ -128,7 +142,14 @@ mkdir -p %{buildroot}%{_datadir}/gcov/obj
 install -m 0644 gcov-obj/* %{buildroot}%{_datadir}/gcov/obj
 %endif
 
-%post 
+%check
+ctest -V --output-on-failure %{?_smp_mflags}
+%if 0%{?gcov:1}
+lcov -c --ignore-errors graph --no-external -q -d . -o gcov.info
+genhtml gcov.info
+%endif
+
+%post
 /sbin/ldconfig
 
 mkdir -p %{_libdir}/voice
@@ -176,3 +197,6 @@ mkdir -p %{TZ_SYS_RO_SHARE}/voice/test
 %files gcov
 %{_datadir}/gcov/obj/*
 %endif
+
+%files unittests
+%{_bindir}/*
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
new file mode 100644 (file)
index 0000000..5c8eda9
--- /dev/null
@@ -0,0 +1,61 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(gtest-tts CXX)
+
+# Find Packages
+INCLUDE(FindPkgConfig)
+pkg_check_modules(pkgs REQUIRED
+       dlog
+       capi-base-common
+       gmock
+       aul
+       capi-media-audio-io
+       capi-appfw-app-manager
+       capi-system-info
+       dbus-1
+       dlog
+       ecore
+       glib-2.0
+       libgum
+       libtzplatform-config
+       libxml-2.0
+       libsystemd-login
+       vconf
+       bundle
+       buxton2
+       pkgmgr
+)
+
+FOREACH(flag ${pkgs_CFLAGS})
+       SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fvisibility=hidden -Wall -Werror")
+SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fPIE")
+SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -Werror")
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
+
+SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -std=c++11")
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CFLAGS}")
+
+SET(SOURCES "")
+
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../include)
+
+AUX_SOURCE_DIRECTORY(src SOURCES)
+AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../client TTS_CLIENT_SOURCES)
+AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../common TTS_COMMON_SOURCES)
+
+ADD_DEFINITIONS("-DFULLVER=\"${FULLVER}\"")
+
+ADD_EXECUTABLE(${UNITTEST_TTS}
+       ${TTS_COMMON_SOURCES}
+       ${TTS_CLIENT_SOURCES}
+       ${SOURCES}
+       )
+TARGET_LINK_LIBRARIES(${UNITTEST_TTS} ${GTEST_LIBRARIES} ${pkgs_LDFLAGS} ${EXTRA_LDFLAGS})
+SET_TARGET_PROPERTIES(${UNITTEST_TTS} PROPERTIES
+       COMPILE_FLAGS "-fPIE"
+       #Never add any space for LINKFLAGS
+       LINK_FLAGS "-Wl,\
+--wrap=system_info_get_platform_bool")
+INSTALL(TARGETS ${UNITTEST_TTS} DESTINATION /usr/bin)
diff --git a/tests/src/main.cpp b/tests/src/main.cpp
new file mode 100644 (file)
index 0000000..a37d671
--- /dev/null
@@ -0,0 +1,7 @@
+#include <gtest/gtest.h>
+#include <gmock/gmock.h>
+
+int main(int argc, char** argv) {
+    testing::InitGoogleTest(&argc, argv);
+    return RUN_ALL_TESTS();
+}
diff --git a/tests/src/system_info_mock.cpp b/tests/src/system_info_mock.cpp
new file mode 100644 (file)
index 0000000..e9000f3
--- /dev/null
@@ -0,0 +1,11 @@
+#include "system_info_mock.h"
+#include <stdio.h>
+#include <tizen.h>
+
+EXPORT_API int __wrap_system_info_get_platform_bool (const char *key, bool *value)
+{
+    if (value)
+        *value = true;
+
+    return 0;
+}
diff --git a/tests/src/system_info_mock.h b/tests/src/system_info_mock.h
new file mode 100644 (file)
index 0000000..2ab4518
--- /dev/null
@@ -0,0 +1,16 @@
+#ifndef MOCK_SYSTEM_INFO_H_
+#define MOCK_SYSTEM_INFO_H_
+
+#include <sys/types.h>
+#include <unistd.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int __wrap_system_info_get_platform_bool (const char *key, bool *value);
+
+#ifdef __cplusplus
+}
+#endif
+#endif  /* MOCK_SYSTEM_INFO_H_ */
diff --git a/tests/src/tts_unittests.cpp b/tests/src/tts_unittests.cpp
new file mode 100644 (file)
index 0000000..5534bd2
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ * 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 <gtest/gtest.h>
+
+#include <tts.h>
+#include "system_info_mock.h"
+
+namespace {
+
+class TTSTest : public testing::Test {
+    public:
+        virtual void SetUp() {
+        }
+        virtual void TearDown() {
+        }
+};
+
+TEST_F(TTSTest, utc_tts_create_n)
+{
+    int ret = tts_create(NULL);
+    EXPECT_EQ(ret, TTS_ERROR_INVALID_PARAMETER);
+}
+
+TEST_F(TTSTest, utc_tts_destroy_n)
+{
+    int ret = tts_destroy(NULL);
+    EXPECT_EQ(ret, TTS_ERROR_INVALID_PARAMETER);
+}
+
+TEST_F(TTSTest, utc_tts_set_mode_n)
+{
+    int ret = tts_set_mode(NULL, TTS_MODE_DEFAULT);
+    EXPECT_EQ(ret, TTS_ERROR_INVALID_PARAMETER);
+}
+
+TEST_F(TTSTest, utc_tts_get_mode_n)
+{
+    tts_mode_e mode;
+    int ret = tts_get_mode(NULL, &mode);
+    EXPECT_EQ(ret, TTS_ERROR_INVALID_PARAMETER);
+}
+
+TEST_F(TTSTest, utc_tts_set_credential_n)
+{
+    int ret = tts_set_credential(NULL, "credential");
+    EXPECT_EQ(ret, TTS_ERROR_INVALID_PARAMETER);
+}
+
+TEST_F(TTSTest, utc_tts_prepare_n)
+{
+    int ret = tts_prepare(NULL);
+    EXPECT_EQ(ret, TTS_ERROR_INVALID_PARAMETER);
+}
+
+TEST_F(TTSTest, utc_tts_unprepare_n)
+{
+    int ret = tts_unprepare(NULL);
+    EXPECT_EQ(ret, TTS_ERROR_INVALID_PARAMETER);
+}
+
+} // namespace