Add unit tests for new API about service state 48/279848/5
authorSuyeon Hwang <stom.hwang@samsung.com>
Fri, 12 Aug 2022 02:52:09 +0000 (11:52 +0900)
committerSuyeon Hwang <stom.hwang@samsung.com>
Tue, 23 Aug 2022 08:21:51 +0000 (17:21 +0900)
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 <stom.hwang@samsung.com>
tests/src/tts_unittests.cpp

index b978751..f49e97e 100644 (file)
@@ -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;
@@ -1209,6 +1233,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
  * @description                test whether text is added properly.
@@ -2875,6 +3010,169 @@ TEST_F(TTSPreparedTest, utc_tts_unset_default_voice_changed_cb_n3)
 }
 
 /**
+ * @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
  * @description                Positive UTC for get error message