From: Suyeon Hwang Date: Fri, 12 Aug 2022 02:52:09 +0000 (+0900) Subject: Add unit tests for new API about service state X-Git-Tag: submit/tizen/20220823.092009~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c6db6cac524871076879df74f2699daf1e40a009;p=platform%2Fcore%2Fuifw%2Ftts.git Add unit tests for new API about service state This patch adds new unit tests based on gTest. Through this patch, you can tests the behavior of new APIs. Change-Id: I587f1d4a47ca467f6b7258e8729c34c22dcebbef Signed-off-by: Suyeon Hwang --- diff --git a/tests/src/tts_unittests.cpp b/tests/src/tts_unittests.cpp index b9787511..f49e97e5 100644 --- a/tests/src/tts_unittests.cpp +++ b/tests/src/tts_unittests.cpp @@ -30,6 +30,7 @@ static int g_voice_type; static int is_created_hndl = -1; static bool g_supported = false; static tts_state_e g_current_state; +static tts_service_state_e g_current_service_state = TTS_SERVICE_STATE_READY; static bool g_utterance_started_cb = false; static bool g_utterance_completed_cb = false; static bool g_screen_reader_changed_cb = false; @@ -55,6 +56,7 @@ static const char *g_text = "Speech Synthesis is the artificial production of hu static const int g_sample_rate = 24000; static const char* ENGINE_VCONF_KEY = "db/voice/tts/engine/default"; +static const int STATE_CHECK_WAITING_TIME = 5; static bool __tts_supported_voice_cb(tts_h tts, const char* language, int voice_type, void* user_data) { @@ -102,6 +104,11 @@ static void __tts_engine_changed_cb(tts_h tts, const char* engine_id, const char { } +static void __tts_service_state_changed_cb(tts_h tts, tts_service_state_e previous, tts_service_state_e current, void* user_data) +{ + g_current_service_state = current; +} + static bool __is_state_changed(tts_state_e state, int wait_delay) { int max_count = wait_delay * 10; @@ -119,6 +126,23 @@ static bool __is_state_changed(tts_state_e state, int wait_delay) return true; } +static bool __is_service_state_changed(tts_service_state_e service_state, int wait_delay) +{ + int max_count = wait_delay * 10; + int count = 0; + while (max_count > count && service_state != g_current_service_state) { + ecore_main_loop_iterate(); + usleep(100000); + count++; + } + + if (service_state != g_current_service_state) { + return false; + } + + return true; +} + static bool __is_screen_reader_changed(int wait_delay) { int max_count = wait_delay * 10; @@ -1208,6 +1232,117 @@ TEST_F(TTSTest, utc_tts_get_state_n2) } +/** + * @testcase utc_tts_get_service_state_p + * @since_tizen 7.0 + * @description test whether state is gotten properly in service state ready + */ +TEST_F(TTSPreparedTest, utc_tts_get_service_state_p) +{ + tts_service_state_e state; + if (g_supported == false) { + EXPECT_EQ(tts_get_service_state(g_tts, &state), TTS_ERROR_NOT_SUPPORTED); + return; + } + + EXPECT_EQ(is_created_hndl, TTS_ERROR_NONE); + + EXPECT_EQ(tts_get_service_state(g_tts, &state), TTS_ERROR_NONE); + EXPECT_EQ(state, TTS_SERVICE_STATE_READY); +} + +/** + * @testcase utc_tts_get_service_state_p2 + * @since_tizen 7.0 + * @description test whether state is gotten properly when client requests to play. + */ +TEST_F(TTSTest, utc_tts_get_service_state_p2) +{ + tts_service_state_e state; + if (g_supported == false) { + EXPECT_EQ(tts_get_service_state(g_tts, &state), TTS_ERROR_NOT_SUPPORTED); + return; + } + EXPECT_EQ(is_created_hndl, TTS_ERROR_NONE); + + g_current_service_state = TTS_SERVICE_STATE_READY; + EXPECT_EQ(tts_set_service_state_changed_cb(g_tts, __tts_service_state_changed_cb, nullptr), TTS_ERROR_NONE); + EXPECT_EQ(tts_prepare(g_tts), TTS_ERROR_NONE); + EXPECT_EQ(__is_state_changed(TTS_STATE_READY, STATE_CHECK_WAITING_TIME), true); + + EXPECT_EQ(tts_get_service_state(g_tts, &state), TTS_ERROR_NONE); + EXPECT_EQ(state, TTS_SERVICE_STATE_READY); + + int utt_id = 0; + EXPECT_EQ(tts_add_text(g_tts, "1 2 3 4 5", g_language, g_voice_type, TTS_SPEED_AUTO, &utt_id), TTS_ERROR_NONE); + EXPECT_EQ(tts_play(g_tts), TTS_ERROR_NONE); + + EXPECT_EQ(tts_get_service_state(g_tts, &state), TTS_ERROR_NONE); + EXPECT_EQ(state, TTS_SERVICE_STATE_SYNTHESIZING); + + EXPECT_EQ(__is_service_state_changed(TTS_SERVICE_STATE_PLAYING, STATE_CHECK_WAITING_TIME), true); + EXPECT_EQ(tts_get_service_state(g_tts, &state), TTS_ERROR_NONE); + EXPECT_EQ(state, TTS_SERVICE_STATE_PLAYING); + + EXPECT_EQ(tts_stop(g_tts), TTS_ERROR_NONE); + + EXPECT_EQ(tts_unprepare(g_tts), TTS_ERROR_NONE); +} + +/** + * @testcase utc_tts_get_service_state_n + * @since_tizen 7.0 + * @description test whether function returns error with NULL parameter. + */ +TEST_F(TTSPreparedTest, utc_tts_get_service_state_n) +{ + tts_service_state_e state; + if (g_supported == false) { + EXPECT_EQ(tts_get_service_state(nullptr, &state), TTS_ERROR_NOT_SUPPORTED); + return; + } + EXPECT_EQ(is_created_hndl, TTS_ERROR_NONE); + + EXPECT_EQ(tts_get_service_state(nullptr, &state), TTS_ERROR_INVALID_PARAMETER); +} + +/** + * @testcase utc_tts_get_service_state_n2 + * @since_tizen 7.0 + * @description test whether function returns error when tts handle is already destroyed. + */ +TEST_F(TTSTest, utc_tts_get_service_state_n2) +{ + tts_service_state_e state; + if (g_supported == false) { + EXPECT_EQ(tts_get_service_state(g_tts, &state), TTS_ERROR_NOT_SUPPORTED); + return; + } + EXPECT_EQ(is_created_hndl, TTS_ERROR_NONE); + + EXPECT_EQ(tts_destroy(g_tts), TTS_ERROR_NONE); + EXPECT_EQ(tts_get_service_state(g_tts, &state), TTS_ERROR_INVALID_PARAMETER); + EXPECT_EQ(tts_create(&g_tts), TTS_ERROR_NONE); +} + +/** + * @testcase utc_tts_get_service_state_n3 + * @since_tizen 7.0 + * @description test whether function returns error when tts is in create state. + */ +TEST_F(TTSTest, utc_tts_get_service_state_n3) +{ + tts_service_state_e state; + if (g_supported == false) { + EXPECT_EQ(tts_get_service_state(g_tts, &state), TTS_ERROR_NOT_SUPPORTED); + return; + } + EXPECT_EQ(is_created_hndl, TTS_ERROR_NONE); + + EXPECT_EQ(tts_get_service_state(g_tts, &state), TTS_ERROR_INVALID_STATE); +} + + /** * @testcase utc_tts_add_text_p * @since_tizen 2.3 @@ -2874,6 +3009,169 @@ TEST_F(TTSPreparedTest, utc_tts_unset_default_voice_changed_cb_n3) ASSERT_NE(ret, TTS_ERROR_NONE); } +/** + * @testcase utc_tts_set_service_state_changed_cb_p + * @since_tizen 7.0 + * @description test whether service_state_changed callback function is set properly. + */ +TEST_F(TTSTest, utc_tts_set_service_state_changed_cb_p) +{ + if (g_supported == false) { + EXPECT_EQ(tts_set_service_state_changed_cb(g_tts, __tts_service_state_changed_cb, nullptr), TTS_ERROR_NOT_SUPPORTED); + return; + } + + EXPECT_EQ(is_created_hndl, TTS_ERROR_NONE); + + EXPECT_EQ(tts_set_service_state_changed_cb(g_tts, __tts_service_state_changed_cb, nullptr), TTS_ERROR_NONE); +} + +/** + * @testcase utc_tts_set_service_state_changed_cb_p2 + * @since_tizen 7.0 + * @description test whether service_state_changed callback function is invoked when server state is changed. + */ +TEST_F(TTSTest, utc_tts_set_service_state_changed_cb_p2) +{ + if (g_supported == false) { + EXPECT_EQ(tts_set_service_state_changed_cb(g_tts, __tts_service_state_changed_cb, nullptr), TTS_ERROR_NOT_SUPPORTED); + return; + } + + EXPECT_EQ(is_created_hndl, TTS_ERROR_NONE); + + g_current_service_state = TTS_SERVICE_STATE_READY; + EXPECT_EQ(tts_set_service_state_changed_cb(g_tts, __tts_service_state_changed_cb, nullptr), TTS_ERROR_NONE); + EXPECT_EQ(tts_prepare(g_tts), TTS_ERROR_NONE); + EXPECT_EQ(__is_state_changed(TTS_STATE_READY, STATE_CHECK_WAITING_TIME), true); + + int utt_id = 0; + EXPECT_EQ(tts_add_text(g_tts, "1 2 3 4 5", g_language, g_voice_type, TTS_SPEED_AUTO, &utt_id), TTS_ERROR_NONE); + EXPECT_EQ(tts_play(g_tts), TTS_ERROR_NONE); + + EXPECT_EQ(__is_service_state_changed(TTS_SERVICE_STATE_SYNTHESIZING, STATE_CHECK_WAITING_TIME), true); + EXPECT_EQ(tts_stop(g_tts), TTS_ERROR_NONE); + + EXPECT_EQ(tts_unprepare(g_tts), TTS_ERROR_NONE); +} + +/** + * @testcase utc_tts_set_service_state_changed_cb_n + * @since_tizen 7.0 + * @description test whether function returns error with NULL parameter. + */ +TEST_F(TTSTest, utc_tts_set_service_state_changed_cb_n) +{ + if (g_supported == false) { + EXPECT_EQ(tts_set_service_state_changed_cb(nullptr, __tts_service_state_changed_cb, nullptr), TTS_ERROR_NOT_SUPPORTED); + return; + } + EXPECT_EQ(is_created_hndl, TTS_ERROR_NONE); + + EXPECT_EQ(tts_set_service_state_changed_cb(nullptr, __tts_service_state_changed_cb, nullptr), TTS_ERROR_INVALID_PARAMETER); +} + +/** + * @testcase utc_tts_set_service_state_changed_cb_n2 + * @since_tizen 7.0 + * @description test whether function returns error when tts handle is already destroyed. + */ +TEST_F(TTSTest, utc_tts_set_service_state_changed_cb_n2) +{ + if (g_supported == false) { + EXPECT_EQ(tts_set_service_state_changed_cb(g_tts, __tts_service_state_changed_cb, nullptr), TTS_ERROR_NOT_SUPPORTED); + return; + } + EXPECT_EQ(is_created_hndl, TTS_ERROR_NONE); + + EXPECT_EQ(tts_destroy(g_tts), TTS_ERROR_NONE); + EXPECT_EQ(tts_set_service_state_changed_cb(g_tts, __tts_service_state_changed_cb, nullptr), TTS_ERROR_INVALID_PARAMETER); + EXPECT_EQ(tts_create(&g_tts), TTS_ERROR_NONE); +} + +/** + * @testcase utc_tts_set_service_state_changed_cb_n3 + * @since_tizen 7.0 + * @description test whether function returns error when tts is not in ready state. + */ +TEST_F(TTSPreparedTest, utc_tts_set_service_state_changed_cb_n3) +{ + if (g_supported == false) { + EXPECT_EQ(tts_set_service_state_changed_cb(g_tts, __tts_service_state_changed_cb, nullptr), TTS_ERROR_NOT_SUPPORTED); + return; + } + EXPECT_EQ(is_created_hndl, TTS_ERROR_NONE); + + EXPECT_EQ(tts_set_service_state_changed_cb(g_tts, __tts_service_state_changed_cb, nullptr), TTS_ERROR_INVALID_STATE); +} + +/** + * @testcase utc_tts_unset_service_state_changed_cb_p + * @since_tizen 7.0 + * @description test whether service_state_changed callback function is unset properly. + */ +TEST_F(TTSTest, utc_tts_unset_service_state_changed_cb_p) +{ + if (g_supported == false) { + EXPECT_EQ(tts_unset_service_state_changed_cb(g_tts), TTS_ERROR_NOT_SUPPORTED); + return; + } + + EXPECT_EQ(is_created_hndl, TTS_ERROR_NONE); + + EXPECT_EQ(tts_unset_service_state_changed_cb(g_tts), TTS_ERROR_NONE); +} + +/** + * @testcase utc_tts_unset_service_state_changed_cb_n + * @since_tizen 7.0 + * @description test whether function returns error with NULL parameter. + */ +TEST_F(TTSTest, utc_tts_unset_service_state_changed_cb_n) +{ + if (g_supported == false) { + EXPECT_EQ(tts_unset_service_state_changed_cb(NULL), TTS_ERROR_NOT_SUPPORTED); + return; + } + + EXPECT_EQ(tts_unset_service_state_changed_cb(nullptr), TTS_ERROR_INVALID_PARAMETER); +} + +/** + * @testcase utc_tts_unset_service_state_changed_cb_n2 + * @since_tizen 7.0 + * @description test whether function returns error when tts handle is already destroyed. + */ +TEST_F(TTSTest, utc_tts_unset_service_state_changed_cb_n2) +{ + if (g_supported == false) { + EXPECT_EQ(tts_unset_service_state_changed_cb(g_tts), TTS_ERROR_NOT_SUPPORTED); + return; + } + EXPECT_EQ(is_created_hndl, TTS_ERROR_NONE); + + EXPECT_EQ(tts_destroy(g_tts), TTS_ERROR_NONE); + EXPECT_EQ(tts_unset_service_state_changed_cb(g_tts), TTS_ERROR_INVALID_PARAMETER); + EXPECT_EQ(tts_create(&g_tts), TTS_ERROR_NONE); +} + +/** + * @testcase utc_tts_unset_service_state_changed_cb_n3 + * @since_tizen 7.0 + * @description test whether function returns error when tts is not in ready state. + */ +TEST_F(TTSPreparedTest, utc_tts_unset_service_state_changed_cb_n3) +{ + if (g_supported == false) { + EXPECT_EQ(tts_unset_service_state_changed_cb(g_tts), TTS_ERROR_NOT_SUPPORTED); + return; + } + EXPECT_EQ(is_created_hndl, TTS_ERROR_NONE); + + EXPECT_EQ(tts_unset_service_state_changed_cb(g_tts), TTS_ERROR_INVALID_STATE); +} + + /** * @testcase utc_tts_get_error_message_p * @since_tizen 3.0