From: Suyeon Hwang Date: Tue, 1 Aug 2023 07:17:23 +0000 (+0900) Subject: [UTC][stt][ACR-1782] Add new TCs for testing audio streaming functions X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b5d28e660eb7ba51e863ba8ac231a153c91bd185;p=test%2Ftct%2Fnative%2Fapi.git [UTC][stt][ACR-1782] Add new TCs for testing audio streaming functions Change-Id: I305e57d6e93c3c86559c6750f80dfedfcd6185ef Signed-off-by: Suyeon Hwang --- diff --git a/src/utc/stt/public.list b/src/utc/stt/public.list index f8f7bb3c1..ee708f89a 100755 --- a/src/utc/stt/public.list +++ b/src/utc/stt/public.list @@ -43,3 +43,7 @@ stte_set_private_data_set_cb stte_set_private_data_requested_cb stte_set_audio_type_set_cb stte_unset_audio_type_set_cb +stt_get_audio_format +stt_start_audio_streaming +stt_send_audio_streaming +stt_stop_audio_streaming diff --git a/src/utc/stt/res/test_pcm.dat b/src/utc/stt/res/test_pcm.dat new file mode 100644 index 000000000..edde2e643 Binary files /dev/null and b/src/utc/stt/res/test_pcm.dat differ diff --git a/src/utc/stt/tct-stt-core_mobile.h b/src/utc/stt/tct-stt-core_mobile.h index 88632aea6..22cbcf4dc 100755 --- a/src/utc/stt/tct-stt-core_mobile.h +++ b/src/utc/stt/tct-stt-core_mobile.h @@ -138,6 +138,20 @@ extern int utc_stt_set_speech_status_cb_p(void); extern int utc_stt_set_speech_status_cb_n(void); extern int utc_stt_unset_speech_status_cb_p(void); extern int utc_stt_unset_speech_status_cb_n(void); +extern int utc_stt_get_audio_format_p1(void); +extern int utc_stt_get_audio_format_n1(void); +extern int utc_stt_get_audio_format_n2(void); +extern int utc_stt_start_audio_streaming_p1(void); +extern int utc_stt_start_audio_streaming_n1(void); +extern int utc_stt_start_audio_streaming_n2(void); +extern int utc_stt_send_audio_streaming_p1(void); +extern int utc_stt_send_audio_streaming_n1(void); +extern int utc_stt_send_audio_streaming_n2(void); +extern int utc_stt_send_audio_streaming_n3(void); +extern int utc_stt_stop_audio_streaming_p1(void); +extern int utc_stt_stop_audio_streaming_n1(void); +extern int utc_stt_stop_audio_streaming_n2(void); +extern int utc_stt_stop_audio_streaming_n3(void); extern int utc_stte_main_p(void); extern int utc_stte_main_n(void); extern int utc_stte_send_result_n(void); @@ -266,6 +280,20 @@ testcase tc_array[] = { {"utc_stt_set_speech_status_cb_n",utc_stt_set_speech_status_cb_n,utc_stt_startup,utc_stt_cleanup}, {"utc_stt_unset_speech_status_cb_p",utc_stt_unset_speech_status_cb_p,utc_stt_startup,utc_stt_cleanup}, {"utc_stt_unset_speech_status_cb_n",utc_stt_unset_speech_status_cb_n,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_get_audio_format_p1",utc_stt_get_audio_format_p1,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_get_audio_format_n1",utc_stt_get_audio_format_n1,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_get_audio_format_n2",utc_stt_get_audio_format_n2,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_start_audio_streaming_p1",utc_stt_start_audio_streaming_p1,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_start_audio_streaming_n1",utc_stt_start_audio_streaming_n1,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_start_audio_streaming_n2",utc_stt_start_audio_streaming_n2,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_send_audio_streaming_p1",utc_stt_send_audio_streaming_p1,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_send_audio_streaming_n1",utc_stt_send_audio_streaming_n1,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_send_audio_streaming_n2",utc_stt_send_audio_streaming_n2,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_send_audio_streaming_n3",utc_stt_send_audio_streaming_n3,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_stop_audio_streaming_p1",utc_stt_stop_audio_streaming_p1,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_stop_audio_streaming_n1",utc_stt_stop_audio_streaming_n1,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_stop_audio_streaming_n2",utc_stt_stop_audio_streaming_n2,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_stop_audio_streaming_n3",utc_stt_stop_audio_streaming_n3,utc_stt_startup,utc_stt_cleanup}, {"utc_stte_main_p",utc_stte_main_p,utc_stte_startup,utc_stte_cleanup}, {"utc_stte_main_n",utc_stte_main_n,utc_stte_startup,utc_stte_cleanup}, {"utc_stte_send_result_n",utc_stte_send_result_n,utc_stte_startup,utc_stte_cleanup}, diff --git a/src/utc/stt/tct-stt-core_tizeniot.h b/src/utc/stt/tct-stt-core_tizeniot.h index 88632aea6..22cbcf4dc 100755 --- a/src/utc/stt/tct-stt-core_tizeniot.h +++ b/src/utc/stt/tct-stt-core_tizeniot.h @@ -138,6 +138,20 @@ extern int utc_stt_set_speech_status_cb_p(void); extern int utc_stt_set_speech_status_cb_n(void); extern int utc_stt_unset_speech_status_cb_p(void); extern int utc_stt_unset_speech_status_cb_n(void); +extern int utc_stt_get_audio_format_p1(void); +extern int utc_stt_get_audio_format_n1(void); +extern int utc_stt_get_audio_format_n2(void); +extern int utc_stt_start_audio_streaming_p1(void); +extern int utc_stt_start_audio_streaming_n1(void); +extern int utc_stt_start_audio_streaming_n2(void); +extern int utc_stt_send_audio_streaming_p1(void); +extern int utc_stt_send_audio_streaming_n1(void); +extern int utc_stt_send_audio_streaming_n2(void); +extern int utc_stt_send_audio_streaming_n3(void); +extern int utc_stt_stop_audio_streaming_p1(void); +extern int utc_stt_stop_audio_streaming_n1(void); +extern int utc_stt_stop_audio_streaming_n2(void); +extern int utc_stt_stop_audio_streaming_n3(void); extern int utc_stte_main_p(void); extern int utc_stte_main_n(void); extern int utc_stte_send_result_n(void); @@ -266,6 +280,20 @@ testcase tc_array[] = { {"utc_stt_set_speech_status_cb_n",utc_stt_set_speech_status_cb_n,utc_stt_startup,utc_stt_cleanup}, {"utc_stt_unset_speech_status_cb_p",utc_stt_unset_speech_status_cb_p,utc_stt_startup,utc_stt_cleanup}, {"utc_stt_unset_speech_status_cb_n",utc_stt_unset_speech_status_cb_n,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_get_audio_format_p1",utc_stt_get_audio_format_p1,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_get_audio_format_n1",utc_stt_get_audio_format_n1,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_get_audio_format_n2",utc_stt_get_audio_format_n2,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_start_audio_streaming_p1",utc_stt_start_audio_streaming_p1,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_start_audio_streaming_n1",utc_stt_start_audio_streaming_n1,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_start_audio_streaming_n2",utc_stt_start_audio_streaming_n2,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_send_audio_streaming_p1",utc_stt_send_audio_streaming_p1,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_send_audio_streaming_n1",utc_stt_send_audio_streaming_n1,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_send_audio_streaming_n2",utc_stt_send_audio_streaming_n2,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_send_audio_streaming_n3",utc_stt_send_audio_streaming_n3,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_stop_audio_streaming_p1",utc_stt_stop_audio_streaming_p1,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_stop_audio_streaming_n1",utc_stt_stop_audio_streaming_n1,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_stop_audio_streaming_n2",utc_stt_stop_audio_streaming_n2,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_stop_audio_streaming_n3",utc_stt_stop_audio_streaming_n3,utc_stt_startup,utc_stt_cleanup}, {"utc_stte_main_p",utc_stte_main_p,utc_stte_startup,utc_stte_cleanup}, {"utc_stte_main_n",utc_stte_main_n,utc_stte_startup,utc_stte_cleanup}, {"utc_stte_send_result_n",utc_stte_send_result_n,utc_stte_startup,utc_stte_cleanup}, diff --git a/src/utc/stt/tct-stt-core_tv.h b/src/utc/stt/tct-stt-core_tv.h index 88632aea6..22cbcf4dc 100755 --- a/src/utc/stt/tct-stt-core_tv.h +++ b/src/utc/stt/tct-stt-core_tv.h @@ -138,6 +138,20 @@ extern int utc_stt_set_speech_status_cb_p(void); extern int utc_stt_set_speech_status_cb_n(void); extern int utc_stt_unset_speech_status_cb_p(void); extern int utc_stt_unset_speech_status_cb_n(void); +extern int utc_stt_get_audio_format_p1(void); +extern int utc_stt_get_audio_format_n1(void); +extern int utc_stt_get_audio_format_n2(void); +extern int utc_stt_start_audio_streaming_p1(void); +extern int utc_stt_start_audio_streaming_n1(void); +extern int utc_stt_start_audio_streaming_n2(void); +extern int utc_stt_send_audio_streaming_p1(void); +extern int utc_stt_send_audio_streaming_n1(void); +extern int utc_stt_send_audio_streaming_n2(void); +extern int utc_stt_send_audio_streaming_n3(void); +extern int utc_stt_stop_audio_streaming_p1(void); +extern int utc_stt_stop_audio_streaming_n1(void); +extern int utc_stt_stop_audio_streaming_n2(void); +extern int utc_stt_stop_audio_streaming_n3(void); extern int utc_stte_main_p(void); extern int utc_stte_main_n(void); extern int utc_stte_send_result_n(void); @@ -266,6 +280,20 @@ testcase tc_array[] = { {"utc_stt_set_speech_status_cb_n",utc_stt_set_speech_status_cb_n,utc_stt_startup,utc_stt_cleanup}, {"utc_stt_unset_speech_status_cb_p",utc_stt_unset_speech_status_cb_p,utc_stt_startup,utc_stt_cleanup}, {"utc_stt_unset_speech_status_cb_n",utc_stt_unset_speech_status_cb_n,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_get_audio_format_p1",utc_stt_get_audio_format_p1,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_get_audio_format_n1",utc_stt_get_audio_format_n1,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_get_audio_format_n2",utc_stt_get_audio_format_n2,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_start_audio_streaming_p1",utc_stt_start_audio_streaming_p1,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_start_audio_streaming_n1",utc_stt_start_audio_streaming_n1,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_start_audio_streaming_n2",utc_stt_start_audio_streaming_n2,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_send_audio_streaming_p1",utc_stt_send_audio_streaming_p1,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_send_audio_streaming_n1",utc_stt_send_audio_streaming_n1,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_send_audio_streaming_n2",utc_stt_send_audio_streaming_n2,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_send_audio_streaming_n3",utc_stt_send_audio_streaming_n3,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_stop_audio_streaming_p1",utc_stt_stop_audio_streaming_p1,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_stop_audio_streaming_n1",utc_stt_stop_audio_streaming_n1,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_stop_audio_streaming_n2",utc_stt_stop_audio_streaming_n2,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_stop_audio_streaming_n3",utc_stt_stop_audio_streaming_n3,utc_stt_startup,utc_stt_cleanup}, {"utc_stte_main_p",utc_stte_main_p,utc_stte_startup,utc_stte_cleanup}, {"utc_stte_main_n",utc_stte_main_n,utc_stte_startup,utc_stte_cleanup}, {"utc_stte_send_result_n",utc_stte_send_result_n,utc_stte_startup,utc_stte_cleanup}, diff --git a/src/utc/stt/tct-stt-core_wearable.h b/src/utc/stt/tct-stt-core_wearable.h index 88632aea6..18b53b20d 100755 --- a/src/utc/stt/tct-stt-core_wearable.h +++ b/src/utc/stt/tct-stt-core_wearable.h @@ -138,6 +138,20 @@ extern int utc_stt_set_speech_status_cb_p(void); extern int utc_stt_set_speech_status_cb_n(void); extern int utc_stt_unset_speech_status_cb_p(void); extern int utc_stt_unset_speech_status_cb_n(void); +extern int utc_stt_get_audio_format_p1(void); +extern int utc_stt_get_audio_format_n1(void); +extern int utc_stt_get_audio_format_n2(void); +extern int utc_stt_start_audio_streaming_p1(void); +extern int utc_stt_start_audio_streaming_n1(void); +extern int utc_stt_start_audio_streaming_n2(void); +extern int utc_stt_send_audio_streaming_p1(void); +extern int utc_stt_send_audio_streaming_n1(void); +extern int utc_stt_send_audio_streaming_n2(void); +extern int utc_stt_send_audio_streaming_n3(void); +extern int utc_stt_stop_audio_streaming_p1(void); +extern int utc_stt_stop_audio_streaming_n1(void); +extern int utc_stt_stop_audio_streaming_n2(void); +extern int utc_stt_stop_audio_streaming_n3(void); extern int utc_stte_main_p(void); extern int utc_stte_main_n(void); extern int utc_stte_send_result_n(void); @@ -151,6 +165,7 @@ extern int utc_stte_set_audio_type_set_cb_p(void); extern int utc_stte_set_audio_type_set_cb_n(void); extern int utc_stte_unset_audio_type_set_cb_p(void); + testcase tc_array[] = { {"utc_stt_create_p",utc_stt_create_p,utc_stt_startup,utc_stt_cleanup}, {"utc_stt_create_n",utc_stt_create_n,utc_stt_startup,utc_stt_cleanup}, @@ -266,6 +281,20 @@ testcase tc_array[] = { {"utc_stt_set_speech_status_cb_n",utc_stt_set_speech_status_cb_n,utc_stt_startup,utc_stt_cleanup}, {"utc_stt_unset_speech_status_cb_p",utc_stt_unset_speech_status_cb_p,utc_stt_startup,utc_stt_cleanup}, {"utc_stt_unset_speech_status_cb_n",utc_stt_unset_speech_status_cb_n,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_get_audio_format_p1",utc_stt_get_audio_format_p1,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_get_audio_format_n1",utc_stt_get_audio_format_n1,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_get_audio_format_n2",utc_stt_get_audio_format_n2,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_start_audio_streaming_p1",utc_stt_start_audio_streaming_p1,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_start_audio_streaming_n1",utc_stt_start_audio_streaming_n1,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_start_audio_streaming_n2",utc_stt_start_audio_streaming_n2,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_send_audio_streaming_p1",utc_stt_send_audio_streaming_p1,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_send_audio_streaming_n1",utc_stt_send_audio_streaming_n1,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_send_audio_streaming_n2",utc_stt_send_audio_streaming_n2,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_send_audio_streaming_n3",utc_stt_send_audio_streaming_n3,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_stop_audio_streaming_p1",utc_stt_stop_audio_streaming_p1,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_stop_audio_streaming_n1",utc_stt_stop_audio_streaming_n1,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_stop_audio_streaming_n2",utc_stt_stop_audio_streaming_n2,utc_stt_startup,utc_stt_cleanup}, + {"utc_stt_stop_audio_streaming_n3",utc_stt_stop_audio_streaming_n3,utc_stt_startup,utc_stt_cleanup}, {"utc_stte_main_p",utc_stte_main_p,utc_stte_startup,utc_stte_cleanup}, {"utc_stte_main_n",utc_stte_main_n,utc_stte_startup,utc_stte_cleanup}, {"utc_stte_send_result_n",utc_stte_send_result_n,utc_stte_startup,utc_stte_cleanup}, diff --git a/src/utc/stt/utc-stt.c b/src/utc/stt/utc-stt.c index 0a9e03ea2..c9bebe4f7 100755 --- a/src/utc/stt/utc-stt.c +++ b/src/utc/stt/utc-stt.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -36,6 +37,9 @@ } \ } while (0) +static const char *TEST_LANGUAGE = "en_US"; +static const char *TEST_RECOG_TYPE = STT_RECOGNITION_TYPE_FREE_PARTIAL; + stt_h g_stt = NULL; static char *g_engine_id = NULL; static char *g_language = NULL; @@ -44,44 +48,220 @@ static stt_state_e g_temp_current_state; static bool g_stt_supported = false; static stt_error_e g_error; +static char g_test_ringtone_path[256]; +static char g_test_pcm_path[256]; +static char* g_pcm_data = NULL; +static size_t g_pcm_size = 0; + static void __stt_state_changed_cb(stt_h stt, stt_state_e previous, stt_state_e current, void* user_data); static void __stt_error_cb(stt_h stt, stt_error_e reason, void *user_data); +static void set_test_mode(void) +{ + stt_state_e state = STT_STATE_CREATED; + stt_get_state(g_stt, &state); + if (STT_STATE_READY != state) { + return false; + } + + stt_set_private_data(g_stt, "stt_verification", "true"); +} + +static void unset_test_mode(void) +{ + stt_state_e state = STT_STATE_CREATED; + stt_get_state(g_stt, &state); + if (STT_STATE_READY != state) { + return false; + } + + stt_set_private_data(g_stt, "stt_verification", "false"); +} + +static Eina_Bool quit_main_loop_for_checking(void *data) +{ + ecore_main_loop_quit(); + return EINA_FALSE; +} + +static Eina_Bool check_current_state(void *data) +{ + const stt_state_e target_state = *((stt_state_e *)data); + if (g_current_state != target_state) { + return EINA_TRUE; + } + + ecore_main_loop_quit(); + return EINA_FALSE; +} + +static bool is_state_changed(stt_state_e state, int duration) +{ + Ecore_Timer *main_loop_quit_timer = ecore_timer_add((double)duration, quit_main_loop_for_checking, NULL); + Ecore_Timer *checker_timer = ecore_timer_add(0.0, check_current_state, &state); + + if (NULL == main_loop_quit_timer || NULL == checker_timer) { + return false; + } + + ecore_main_loop_begin(); + + ecore_timer_del(main_loop_quit_timer); + ecore_timer_del(checker_timer); + + return (g_current_state == state); +} + +static void create_handle(void) +{ + g_current_state = STT_STATE_CREATED; + g_error = TIZEN_ERROR_NONE; + g_stt = NULL; + + package_info_h info = NULL; + package_info_create("org.tizen.stt-native-utc", &info); + + char *root_path = NULL; + package_info_get_root_path(info, &root_path); + + if (NULL != root_path) { + snprintf(g_test_ringtone_path, 256, "%s/res/ringtone.wav", root_path); + snprintf(g_test_pcm_path, 256, "%s/res/test_pcm.dat", root_path); + free(root_path); + } + + package_info_destroy(info); + + assert_eq(stt_create(&g_stt), STT_ERROR_NONE); + + assert_eq(stt_set_state_changed_cb(g_stt, __stt_state_changed_cb, NULL), STT_ERROR_NONE); + assert_eq(stt_set_error_cb(g_stt, __stt_error_cb, NULL), STT_ERROR_NONE); +} + +static bool prepare_handle(void) +{ + stt_state_e state = STT_STATE_CREATED; + stt_get_state(g_stt, &state); + if (STT_STATE_CREATED != state) { + return false; + } + + stt_prepare(g_stt); + return is_state_changed(STT_STATE_READY, 5); +} + +static bool unprepare_handle(void) +{ + stt_state_e state = STT_STATE_CREATED; + stt_get_state(g_stt, &state); + if (STT_STATE_READY != state) { + return false; + } + + stt_prepare(g_stt); + return is_state_changed(STT_STATE_CREATED, 5); +} + +static bool start_recording(const char* language, const char* type) +{ + assert_eq(stt_start(g_stt, language, type), STT_ERROR_NONE); + return is_state_changed(STT_STATE_RECORDING, 5); +} + +static bool stop_recording(void) +{ + assert_eq(stt_stop(g_stt), STT_ERROR_NONE); + return is_state_changed(STT_STATE_PROCESSING, 5); +} + +static bool start_audio_streaming(const char* language, const char* type) +{ + assert_eq(stt_start_audio_streaming(g_stt, language, type), STT_ERROR_NONE); + return is_state_changed(STT_STATE_RECORDING, 5); +} + +static bool stop_audio_streaming(void) +{ + assert_eq(stt_stop_audio_streaming(g_stt), STT_ERROR_NONE); + return is_state_changed(STT_STATE_PROCESSING, 5); +} + +static void cancel_recognition(void) +{ + stt_state_e state = STT_STATE_CREATED; + stt_get_state(g_stt, &state); + if (STT_STATE_CREATED == state || STT_STATE_READY == state) { + return; + } + + stt_cancel(g_stt); + is_state_changed(STT_STATE_READY, 5); +} + +static void get_test_pcm_data() +{ + FILE* fp_in = fopen(g_test_pcm_path, "rb"); + if (fp_in == NULL) { + return; + } + + fseek(fp_in, 0, SEEK_END); + long size = ftell(fp_in); + fseek(fp_in, 0, SEEK_SET); + if (size <= 0) { + fclose(fp_in); + return; + } + + char* data = (char *)calloc(sizeof(char), size); + if (NULL == data) { + fclose(fp_in); + return; + } + + size_t read_size = fread(data, sizeof(char), size, fp_in); + fclose(fp_in); + + if (read_size <= 0) { + free(data); + return; + } + + g_pcm_size = size; + g_pcm_data = data; +} + + void utc_stt_startup(void) { /* start of TC */ - int ret = -1; g_stt_supported = TCTCheckSystemInfoFeatureSupported(MICROPHONE_FEATURE, API_NAMESPACE) && TCTCheckSystemInfoFeatureSupported(SPEECH_RECOGNITION_FEATURE, API_NAMESPACE); - g_current_state = 0; - g_error = TIZEN_ERROR_NONE; - if (g_stt_supported) { - g_stt = NULL; - ret = stt_create(&g_stt); - assert_eq(ret, STT_ERROR_NONE); - ret = stt_set_state_changed_cb(g_stt, __stt_state_changed_cb, NULL); - assert_eq(ret, STT_ERROR_NONE); - ret = stt_set_error_cb(g_stt, __stt_error_cb, NULL); - assert_eq(ret, STT_ERROR_NONE); + create_handle(); } } void utc_stt_cleanup(void) { /* end of TC */ - int ret = -1; if (true == g_stt_supported) { - ret = stt_unset_state_changed_cb(g_stt); - assert_eq(ret, STT_ERROR_NONE); - ret = stt_unset_error_cb(g_stt); - assert_eq(ret, STT_ERROR_NONE); - ret = stt_destroy(g_stt); - assert_eq(ret, STT_ERROR_NONE); + cancel_recognition(); + unset_test_mode(); + unprepare_handle(); + + assert_eq(stt_unset_state_changed_cb(g_stt), STT_ERROR_NONE); + assert_eq(stt_unset_error_cb(g_stt), STT_ERROR_NONE); + assert_eq(stt_destroy(g_stt), STT_ERROR_NONE); + g_stt = NULL; } - g_stt = NULL; + free(g_pcm_data); + g_pcm_data = NULL; + g_pcm_size = 0; + + g_stt = NULL; } static bool __stt_supported_engine_cb(stt_h stt, const char* engine_id, const char* engine_name, void* user_data) @@ -1371,6 +1551,26 @@ int utc_stt_stop_n(void) return 0; } +/** + * @testcase utc_stt_stop_n2 + * @since_tizen 2.3 + * @description Negative UTC for stop recording for processing (Operation failed in recording state by stt_start_audio_streaming()) + */ +int utc_stt_stop_n2(void) +{ + int ret = STT_ERROR_NONE; + + if (false == g_stt_supported) { + assert_eq(stt_stop(g_stt), STT_ERROR_NOT_SUPPORTED); + return 0; + } + + start_audio_streaming(TEST_LANGUAGE, TEST_RECOG_TYPE); + assert_eq(stt_stop(g_stt), STT_ERROR_OPERATION_FAILED); + + return 0; +} + /** * @testcase utc_stt_cancel_p * @since_tizen 2.3 @@ -2197,10 +2397,10 @@ int utc_stt_set_start_sound_p(void) int ret = STT_ERROR_NONE; if (false == g_stt_supported) { - ret = stt_set_start_sound(g_stt, "/opt/usr/apps/core-stt-tests/data/ringtone.wav"); + ret = stt_set_start_sound(g_stt, g_test_ringtone_path); assert_eq(ret, STT_ERROR_NOT_SUPPORTED); } else { - if (0 != access("/opt/usr/apps/core-stt-tests/data/ringtone.wav", F_OK)) { + if (0 != access(g_test_ringtone_path, F_OK)) { return 0; } @@ -2212,7 +2412,7 @@ int utc_stt_set_start_sound_p(void) ecore_main_loop_iterate(); } - ret = stt_set_start_sound(g_stt, "/opt/usr/apps/core-stt-tests/data/ringtone.wav"); + ret = stt_set_start_sound(g_stt, g_test_ringtone_path); assert_eq(ret, STT_ERROR_NONE); ret = stt_unprepare(g_stt); @@ -2256,13 +2456,13 @@ int utc_stt_set_start_sound_n1(void) assert_eq(ret, STT_ERROR_NOT_SUPPORTED); } else { - if (0 != access("/opt/usr/apps/core-stt-tests/data/ringtone.wav", F_OK)) { + if (0 != access(g_test_ringtone_path, F_OK)) { return 0; } /* check invalid state */ assert_neq(g_stt, NULL); - ret = stt_set_start_sound(g_stt, "/opt/usr/apps/core-stt-tests/data/ringtone.wav"); + ret = stt_set_start_sound(g_stt, g_test_ringtone_path); assert_eq(ret, STT_ERROR_INVALID_STATE); } @@ -2282,7 +2482,7 @@ int utc_stt_unset_start_sound_p(void) ret = stt_unset_start_sound(g_stt); assert_eq(ret, STT_ERROR_NOT_SUPPORTED); } else { - if (0 != access("/opt/usr/apps/core-stt-tests/data/ringtone.wav", F_OK)) { + if (0 != access(g_test_ringtone_path, F_OK)) { return 0; } @@ -2293,7 +2493,7 @@ int utc_stt_unset_start_sound_p(void) while (STT_STATE_READY != g_current_state) { ecore_main_loop_iterate(); } - ret = stt_set_start_sound(g_stt, "/opt/usr/apps/core-stt-tests/data/ringtone.wav"); + ret = stt_set_start_sound(g_stt, g_test_ringtone_path); assert_eq(ret, STT_ERROR_NONE); ret = stt_unset_start_sound(g_stt); @@ -2366,7 +2566,7 @@ int utc_stt_set_stop_sound_p(void) ret = stt_set_stop_sound(g_stt, "test.wav"); assert_eq(ret, STT_ERROR_NOT_SUPPORTED); } else { - if (0 != access("/opt/usr/apps/core-stt-tests/data/ringtone.wav", F_OK)) { + if (0 != access(g_test_ringtone_path, F_OK)) { return 0; } @@ -2378,7 +2578,7 @@ int utc_stt_set_stop_sound_p(void) ecore_main_loop_iterate(); } - ret = stt_set_stop_sound(g_stt, "/opt/usr/apps/core-stt-tests/data/ringtone.wav"); + ret = stt_set_stop_sound(g_stt, g_test_ringtone_path); assert_eq(ret, STT_ERROR_NONE); ret = stt_unprepare(g_stt); @@ -2401,7 +2601,7 @@ int utc_stt_set_stop_sound_n(void) ret = stt_set_stop_sound(g_stt, NULL); assert_eq(ret, STT_ERROR_NOT_SUPPORTED); } else { - if (0 != access("/opt/usr/apps/core-stt-tests/data/ringtone.wav", F_OK)) { + if (0 != access(g_test_ringtone_path, F_OK)) { return 0; } @@ -2413,7 +2613,7 @@ int utc_stt_set_stop_sound_n(void) ecore_main_loop_iterate(); } - ret = stt_set_stop_sound(NULL, "/opt/usr/apps/core-stt-tests/data/ringtone.wav"); + ret = stt_set_stop_sound(NULL, g_test_ringtone_path); assert_eq(ret, STT_ERROR_INVALID_PARAMETER); ret = stt_unprepare(g_stt); @@ -2458,12 +2658,12 @@ int utc_stt_set_stop_sound_n2(void) assert_eq(ret, STT_ERROR_NOT_SUPPORTED); } else { - if (0 != access("/opt/usr/apps/core-stt-tests/data/ringtone.wav", F_OK)) { + if (0 != access(g_test_ringtone_path, F_OK)) { return 0; } assert_neq(g_stt, NULL); - ret = stt_set_stop_sound(g_stt, "/opt/usr/apps/core-stt-tests/data/ringtone.wav"); + ret = stt_set_stop_sound(g_stt, g_test_ringtone_path); assert_eq(ret, STT_ERROR_INVALID_STATE); } @@ -2483,7 +2683,7 @@ int utc_stt_unset_stop_sound_p(void) ret = stt_unset_stop_sound(g_stt); assert_eq(ret, STT_ERROR_NOT_SUPPORTED); } else { - if (0 != access("/opt/usr/apps/core-stt-tests/data/ringtone.wav", F_OK)) { + if (0 != access(g_test_ringtone_path, F_OK)) { return 0; } @@ -2495,7 +2695,7 @@ int utc_stt_unset_stop_sound_p(void) ecore_main_loop_iterate(); } - ret = stt_set_stop_sound(g_stt, "/opt/usr/apps/core-stt-tests/data/ringtone.wav"); + ret = stt_set_stop_sound(g_stt, g_test_ringtone_path); assert_eq(ret, STT_ERROR_NONE); ret = stt_unset_stop_sound(g_stt); @@ -3209,4 +3409,365 @@ int utc_stt_unset_speech_status_cb_n(void) } return 0; -} \ No newline at end of file +} + +/** + * @testcase utc_stt_get_audio_format_p1 + * @since_tizen 8.0 + * @description Positive UTC to get recognizable audio format information + */ +int utc_stt_get_audio_format_p1(void) +{ + stt_audio_type_e type = STT_AUDIO_TYPE_RAW_S16; + int rate = -1; + int num_of_channels = -1; + + if (false == g_stt_supported) { + assert_eq(stt_get_audio_format(g_stt, &type, &rate, &num_of_channels), STT_ERROR_NOT_SUPPORTED); + return 0; + } + + prepare_handle(); + + assert_eq(stt_get_audio_format(g_stt, &type, &rate, &num_of_channels), STT_ERROR_NONE); + + return 0; +} + +/** + * @testcase utc_stt_get_audio_format_n1 + * @since_tizen 8.0 + * @description Negative UTC to get recognizable audio format information (Invalid state) + */ +int utc_stt_get_audio_format_n1(void) +{ + stt_audio_type_e type = STT_AUDIO_TYPE_RAW_S16; + int rate = -1; + int num_of_channels = -1; + + if (false == g_stt_supported) { + assert_eq(stt_get_audio_format(g_stt, &type, &rate, &num_of_channels), STT_ERROR_NOT_SUPPORTED); + return 0; + } + + assert_eq(stt_get_audio_format(g_stt, &type, &rate, &num_of_channels), STT_ERROR_INVALID_STATE); + + return 0; +} + +/** + * @testcase utc_stt_get_audio_format_n2 + * @since_tizen 8.0 + * @description Negative UTC to get recognizable audio format information (Invalid parameter) + */ +int utc_stt_get_audio_format_n2(void) +{ + stt_audio_type_e type = STT_AUDIO_TYPE_RAW_S16; + int rate = -1; + int num_of_channels = -1; + + if (false == g_stt_supported) { + assert_eq(stt_get_audio_format(g_stt, &type, &rate, &num_of_channels), STT_ERROR_NOT_SUPPORTED); + return 0; + } + + prepare_handle(); + + assert_eq(stt_get_audio_format(NULL, &type, &rate, &num_of_channels), STT_ERROR_INVALID_PARAMETER); + assert_eq(stt_get_audio_format(g_stt, NULL, &rate, &num_of_channels), STT_ERROR_INVALID_PARAMETER); + assert_eq(stt_get_audio_format(g_stt, &type, NULL, &num_of_channels), STT_ERROR_INVALID_PARAMETER); + assert_eq(stt_get_audio_format(g_stt, &type, &rate, NULL), STT_ERROR_INVALID_PARAMETER); + + return 0; +} + +/** + * @testcase utc_stt_start_audio_streaming_p1 + * @since_tizen 8.0 + * @description Postive UTC to start audio streaming + */ +int utc_stt_start_audio_streaming_p1(void) +{ + if (false == g_stt_supported) { + assert_eq(stt_start_audio_streaming(g_stt, TEST_LANGUAGE, TEST_RECOG_TYPE), STT_ERROR_NOT_SUPPORTED); + return 0; + } + + prepare_handle(); + + set_test_mode(); + + assert_eq(stt_start_audio_streaming(g_stt, TEST_LANGUAGE, TEST_RECOG_TYPE), STT_ERROR_NONE); + assert_eq(is_state_changed(STT_STATE_RECORDING, 5), true); + + return 0; +} + +/** + * @testcase utc_stt_start_audio_streaming_n1 + * @since_tizen 8.0 + * @description Negative UTC to start audio streaming (Invalid parameter) + */ +int utc_stt_start_audio_streaming_n1(void) +{ + if (false == g_stt_supported) { + assert_eq(stt_start_audio_streaming(g_stt, TEST_LANGUAGE, TEST_RECOG_TYPE), STT_ERROR_NOT_SUPPORTED); + return 0; + } + + prepare_handle(); + + assert_eq(stt_start_audio_streaming(NULL, TEST_LANGUAGE, TEST_RECOG_TYPE), STT_ERROR_INVALID_PARAMETER); + assert_eq(stt_start_audio_streaming(g_stt, TEST_LANGUAGE, NULL), STT_ERROR_INVALID_PARAMETER); + + return 0; +} + +/** + * @testcase utc_stt_start_audio_streaming_n2 + * @since_tizen 8.0 + * @description Negative UTC to start audio streaming (Invalid state) + */ +int utc_stt_start_audio_streaming_n2(void) +{ + if (false == g_stt_supported) { + assert_eq(stt_start_audio_streaming(g_stt, TEST_LANGUAGE, TEST_RECOG_TYPE), STT_ERROR_NOT_SUPPORTED); + return 0; + } + + assert_eq(stt_start_audio_streaming(g_stt, TEST_LANGUAGE, TEST_RECOG_TYPE), STT_ERROR_INVALID_STATE); + + assert_eq(prepare_handle(), true); + set_test_mode(); + + assert_eq(stt_start_audio_streaming(g_stt, TEST_LANGUAGE, TEST_RECOG_TYPE), STT_ERROR_NONE); + assert_eq(stt_start_audio_streaming(g_stt, TEST_LANGUAGE, TEST_RECOG_TYPE), STT_ERROR_IN_PROGRESS_TO_RECORDING); + assert_eq(is_state_changed(STT_STATE_RECORDING, 5), true); + + assert_eq(stt_start_audio_streaming(g_stt, TEST_LANGUAGE, TEST_RECOG_TYPE), STT_ERROR_INVALID_STATE); + + assert_eq(stop_audio_streaming(), true); + assert_eq(stt_start_audio_streaming(g_stt, TEST_LANGUAGE, TEST_RECOG_TYPE), STT_ERROR_INVALID_STATE); + + return 0; +} + +/** + * @testcase utc_stt_send_audio_streaming_p1 + * @since_tizen 8.0 + * @description Positive UTC to send audio streaming data to service engine + */ +int utc_stt_send_audio_streaming_p1(void) +{ + if (false == g_stt_supported) { + assert_eq(stt_send_audio_streaming(g_stt, g_pcm_data, g_pcm_size), STT_ERROR_NOT_SUPPORTED); + return 0; + } + + prepare_handle(); + + set_test_mode(); + get_test_pcm_data(); + + assert_eq(start_audio_streaming(TEST_LANGUAGE, TEST_RECOG_TYPE), true); + + assert_eq(stt_send_audio_streaming(g_stt, g_pcm_data, g_pcm_size), STT_ERROR_NONE); + + return 0; +} + +/** + * @testcase utc_stt_send_audio_streaming_n1 + * @since_tizen 8.0 + * @description Negative UTC to send audio streaming data to service engine (Invalid parameter) + */ +int utc_stt_send_audio_streaming_n1(void) +{ + if (false == g_stt_supported) { + assert_eq(stt_send_audio_streaming(g_stt, g_pcm_data, g_pcm_size), STT_ERROR_NOT_SUPPORTED); + return 0; + } + + prepare_handle(); + + set_test_mode(); + get_test_pcm_data(); + + assert_eq(start_audio_streaming(TEST_LANGUAGE, TEST_RECOG_TYPE), true); + + assert_eq(stt_send_audio_streaming(NULL, g_pcm_data, g_pcm_size), STT_ERROR_INVALID_PARAMETER); + assert_eq(stt_send_audio_streaming(g_stt, NULL, g_pcm_size), STT_ERROR_INVALID_PARAMETER); + assert_eq(stt_send_audio_streaming(g_stt, g_pcm_data, 0), STT_ERROR_INVALID_PARAMETER); + + return 0; +} + +/** + * @testcase utc_stt_send_audio_streaming_n2 + * @since_tizen 8.0 + * @description Negative UTC to send audio streaming data to service engine (Invalid state) + */ +int utc_stt_send_audio_streaming_n2(void) +{ + if (false == g_stt_supported) { + assert_eq(stt_send_audio_streaming(g_stt, g_pcm_data, g_pcm_size), STT_ERROR_NOT_SUPPORTED); + return 0; + } + + get_test_pcm_data(); + + assert_eq(stt_send_audio_streaming(g_stt, g_pcm_data, g_pcm_size), STT_ERROR_INVALID_STATE); + + assert_eq(prepare_handle(), true); + assert_eq(stt_send_audio_streaming(g_stt, g_pcm_data, g_pcm_size), STT_ERROR_INVALID_STATE); + + set_test_mode(); + assert_eq(stt_start_audio_streaming(g_stt, TEST_LANGUAGE, TEST_RECOG_TYPE), STT_ERROR_NONE); + assert_eq(stt_send_audio_streaming(g_stt, g_pcm_data, g_pcm_size), STT_ERROR_INVALID_STATE); + assert_eq(is_state_changed(STT_STATE_RECORDING, 5), true); + + assert_eq(stt_stop_audio_streaming(g_stt), STT_ERROR_NONE); + assert_eq(stt_send_audio_streaming(g_stt, g_pcm_data, g_pcm_size), STT_ERROR_IN_PROGRESS_TO_PROCESSING); + assert_eq(is_state_changed(STT_STATE_PROCESSING, 5), true); + assert_eq(stt_send_audio_streaming(g_stt, g_pcm_data, g_pcm_size), STT_ERROR_INVALID_STATE); + assert_eq(is_state_changed(STT_STATE_READY, 10), true); + + assert_eq(start_audio_streaming(TEST_LANGUAGE, TEST_RECOG_TYPE), true); + assert_eq(stt_cancel(g_stt), STT_ERROR_NONE); + assert_eq(stt_send_audio_streaming(g_stt, g_pcm_data, g_pcm_size), STT_ERROR_IN_PROGRESS_TO_READY); + assert_eq(is_state_changed(STT_STATE_READY, 5), true); + + return 0; +} + +/** + * @testcase utc_stt_send_audio_streaming_n3 + * @since_tizen 8.0 + * @description Negative UTC to send audio streaming data to service engine (Operation failed in recording state by stt_start()) + */ +int utc_stt_send_audio_streaming_n3(void) +{ + if (false == g_stt_supported) { + assert_eq(stt_send_audio_streaming(g_stt, g_pcm_data, g_pcm_size), STT_ERROR_NOT_SUPPORTED); + return 0; + } + + prepare_handle(); + + set_test_mode(); + get_test_pcm_data(); + + assert_eq(start_recording(TEST_LANGUAGE, TEST_RECOG_TYPE), true); + + assert_eq(stt_send_audio_streaming(g_stt, g_pcm_data, g_pcm_size), STT_ERROR_OPERATION_FAILED); + + return 0; +} + +/** + * @testcase utc_stt_stop_audio_streaming_p1 + * @since_tizen 8.0 + * @description Postive UTC to stop audio streaming + */ +int utc_stt_stop_audio_streaming_p1(void) +{ + if (false == g_stt_supported) { + assert_eq(stt_stop_audio_streaming(g_stt), STT_ERROR_NOT_SUPPORTED); + return 0; + } + + prepare_handle(); + + set_test_mode(); + + assert_eq(start_audio_streaming(TEST_LANGUAGE, TEST_RECOG_TYPE), true); + + assert_eq(stt_stop_audio_streaming(g_stt), STT_ERROR_NONE); + assert_eq(is_state_changed(STT_STATE_PROCESSING, 5), true); + assert_eq(is_state_changed(STT_STATE_READY, 5), true); + + return 0; +} + +/** + * @testcase utc_stt_stop_audio_streaming_n1 + * @since_tizen 8.0 + * @description Negative UTC to stop audio streaming (Invalid parameter) + */ +int utc_stt_stop_audio_streaming_n1(void) +{ + if (false == g_stt_supported) { + assert_eq(stt_stop_audio_streaming(g_stt), STT_ERROR_NOT_SUPPORTED); + return 0; + } + + prepare_handle(); + + set_test_mode(); + + assert_eq(start_audio_streaming(TEST_LANGUAGE, TEST_RECOG_TYPE), true); + + assert_eq(stt_stop_audio_streaming(NULL), STT_ERROR_INVALID_PARAMETER); + + return 0; +} + +/** + * @testcase utc_stt_stop_audio_streaming_n2 + * @since_tizen 8.0 + * @description Negative UTC to stop audio streaming (Invalid state) + */ +int utc_stt_stop_audio_streaming_n2(void) +{ + if (false == g_stt_supported) { + assert_eq(stt_stop_audio_streaming(g_stt), STT_ERROR_NOT_SUPPORTED); + return 0; + } + + assert_eq(stt_stop_audio_streaming(g_stt), STT_ERROR_INVALID_STATE); + + assert_eq(prepare_handle(), true); + set_test_mode(); + assert_eq(stt_stop_audio_streaming(g_stt), STT_ERROR_INVALID_STATE); + + assert_eq(stt_start_audio_streaming(g_stt, TEST_LANGUAGE, TEST_RECOG_TYPE), STT_ERROR_NONE); + assert_eq(stt_stop_audio_streaming(g_stt), STT_ERROR_INVALID_STATE); + assert_eq(is_state_changed(STT_STATE_RECORDING, 5), true); + + assert_eq(stt_stop_audio_streaming(g_stt), STT_ERROR_NONE); + assert_eq(stt_stop_audio_streaming(g_stt), STT_ERROR_IN_PROGRESS_TO_PROCESSING); + assert_eq(is_state_changed(STT_STATE_PROCESSING, 5), true); + + assert_eq(stt_stop_audio_streaming(g_stt), STT_ERROR_INVALID_STATE); + assert_eq(is_state_changed(STT_STATE_READY, 5), true); + + assert_eq(start_audio_streaming(TEST_LANGUAGE, TEST_RECOG_TYPE), true); + assert_eq(stt_cancel(g_stt), STT_ERROR_NONE); + assert_eq(stt_stop_audio_streaming(g_stt), STT_ERROR_IN_PROGRESS_TO_READY); + assert_eq(is_state_changed(STT_STATE_READY, 5), true); + + return 0; +} + +/** + * @testcase utc_stt_stop_audio_streaming_n3 + * @since_tizen 8.0 + * @description Negative UTC to stop audio streaming (Operation failed in recording state by stt_start()) + */ +int utc_stt_stop_audio_streaming_n3(void) +{ + if (false == g_stt_supported) { + assert_eq(stt_stop_audio_streaming(g_stt), STT_ERROR_NOT_SUPPORTED); + return 0; + } + + prepare_handle(); + + set_test_mode(); + + assert_eq(start_recording(TEST_LANGUAGE, TEST_RECOG_TYPE), true); + + assert_eq(stt_stop_audio_streaming(g_stt), STT_ERROR_OPERATION_FAILED); + + return 0; +}