From a941a2c413720f1d482eea36a9ece61285eb44b7 Mon Sep 17 00:00:00 2001 From: Asit Srivastava Date: Fri, 8 Jul 2016 12:01:36 +0530 Subject: [PATCH] [ITC][tts][ACR-674][new apis added for tts and error enums] Change-Id: Ifd97ff10da0b692400d2b35fd5b4e1b4f5c08daa Signed-off-by: Asit Srivastava --- src/itc/tts/ITs-tts-common.c | 18 +++ src/itc/tts/ITs-tts-common.h | 21 ++- src/itc/tts/ITs-tts.c | 236 ++++++++++++++++++++++++++++++++++ src/itc/tts/tct-tts-native_mobile.h | 8 ++ src/itc/tts/tct-tts-native_tv.h | 8 ++ src/itc/tts/tct-tts-native_wearable.h | 8 ++ 6 files changed, 298 insertions(+), 1 deletion(-) diff --git a/src/itc/tts/ITs-tts-common.c b/src/itc/tts/ITs-tts-common.c index 1769ae8..2954194 100755 --- a/src/itc/tts/ITs-tts-common.c +++ b/src/itc/tts/ITs-tts-common.c @@ -19,6 +19,21 @@ * @ingroup itc * @{ */ + +//Add helper function definitions here + +/** +* @function TimeoutFunction +* @description Called if some callback is not invoked for a particular timeout +* @parameter gpointer data +* @return gboolean +*/ +gboolean TimeoutFunction(gpointer data) +{ + g_main_loop_quit((GMainLoop *)data); + return false; +} + /** * @function TtsGetError * @description Maps error enums to string values @@ -44,6 +59,9 @@ char* TtsGetError(int nRet) case TTS_ERROR_TIMED_OUT : szErrorVal = "TTS_ERROR_TIMED_OUT" ; break; case TTS_ERROR_OPERATION_FAILED : szErrorVal = "TTS_ERROR_OPERATION_FAILED" ; break; case TTS_ERROR_AUDIO_POLICY_BLOCKED : szErrorVal = "TTS_ERROR_AUDIO_POLICY_BLOCKED" ; break; + case TTS_ERROR_PERMISSION_DENIED : szErrorVal = "TTS_ERROR_PERMISSION_DENIED" ; break; + case TTS_ERROR_NOT_SUPPORTED : szErrorVal = "TTS_ERROR_NOT_SUPPORTED" ; break; + case TTS_ERROR_NOT_SUPPORTED_FEATURE : szErrorVal = "TTS_ERROR_NOT_SUPPORTED_FEATURE" ; break; default : szErrorVal = "TTS_ERROR_UNKNOWN" ; break; } diff --git a/src/itc/tts/ITs-tts-common.h b/src/itc/tts/ITs-tts-common.h index fa4b390..18f6cde 100755 --- a/src/itc/tts/ITs-tts-common.h +++ b/src/itc/tts/ITs-tts-common.h @@ -29,7 +29,7 @@ * @ingroup itc * @{ */ - +#define TIMEOUT_CB 5000 #define INPUT_TEXT "1 2 3 4 5 6 7 8 9" #define SLEEP_TIME 5 #define TIMEOUT 20000 @@ -53,6 +53,8 @@ bool g_bTtsUtteranceStartedCallback; bool g_bFeatureSupported; bool g_bFeatureMismatch; bool g_bFeatureNotSupported; +GMainLoop *g_pMainLoop; +gboolean TimeoutFunction(gpointer data); #define START_TEST {\ FPRINTF("[Line : %d] [%s] Starting test : %s\\n", __LINE__, API_NAMESPACE, __FUNCTION__);\ @@ -71,6 +73,23 @@ bool g_bFeatureNotSupported; }\ } +#define RUN_POLLING_LOOP {\ + g_pMainLoop = g_main_loop_new(NULL, false);\ + nIotconTimeoutId = g_timeout_add(TIMEOUT_CB, TimeoutFunction, g_pMainLoop);\ + g_main_loop_run(g_pMainLoop);\ + g_source_remove(nIotconTimeoutId);\ + g_pMainLoop = NULL;\ +} + +#define CHECK_HANDLE_CLEANUP(Handle, API, FreeResource) {\ + if ( Handle == NULL )\ + {\ + FPRINTF("[Line : %d][%s] %s failed, error returned = Handle returned is NULL\\n", __LINE__, API_NAMESPACE, API);\ + FreeResource;\ + return 1;\ + }\ +} + /*******************************************************HELPER FUNCTIONS**************************************************/ char* TtsGetError(int nRet); void UixTtsPrintAPIErrorMSG(char *pszAPI, int nRet); diff --git a/src/itc/tts/ITs-tts.c b/src/itc/tts/ITs-tts.c index 542f82d..5b4ea96 100755 --- a/src/itc/tts/ITs-tts.c +++ b/src/itc/tts/ITs-tts.c @@ -23,6 +23,7 @@ */ static bool g_CallBackValue = true; +bool g_CallBackHit = false; /** * @function ITs_tts_startup @@ -239,6 +240,47 @@ static void TtsDefaultVoiceChangedCallback(tts_h tts, const char *previous_langu return; } +static bool TtsEngineChangedcallback(tts_h tts, const char* engine_id, const char* language, int voice_type, bool need_credential, void* user_data) +{ + g_CallBackValue = true; +#if DEBUG + FPRINTF("[Line : %d][%s] TtsEngineChangedcallback callback is called. \\n", __LINE__, API_NAMESPACE); +#endif + return true; +} + + +/** +* @function ttsErrorCallback +* @description Called when an error occurs +* @parameter [in] tts The STT handle +* [in] reason The error type (e.g. TTS_ERROR_OUT_OF_NETWORK, TTS_ERROR_IO_ERROR) +* [in] user_data The user data passed from the callback registration function +* @precondition An application registers this callback using stt_set_error_cb() to detect error +* @return None +*/ +void ttsErrorCallback(tts_h stt, tts_error_e reason, void *user_data) +{ +#if DEBUG + FPRINTF("[Line : %d][%s] Reached sttErrorCallback\\n", __LINE__, API_NAMESPACE); +#endif + + g_CallBackHit = true; + + if(stt == NULL) + { + FPRINTF("[Line : %d][%s] Handle is NULL in callback function\\n", __LINE__, API_NAMESPACE); + } + + if ( g_pMainLoop ) + { + g_main_loop_quit(g_pMainLoop); + g_main_loop_unref(g_pMainLoop); + g_pMainLoop = NULL; + } + +} + /***************************************************************CallBack End************************************/ /** @addtogroup itc-tts-testcases @@ -995,5 +1037,199 @@ int ITc_tts_foreach_supported_voices_p(void) return 0; } + +//& type: auto +//& purpose: To get the list of supported voices. +/** +* @testcase ITc_tts_set_credential_p +* @since_tizen 3.0 +* @author SRID(asit.s) +* @reviewer SRID(a.pandia1) +* @type auto +* @scenario create a tts handler\n +* call set credentials\n +* @apicovered tts_set_credential, +* @passcase if API is successful +* @failcase if API is not successful +* @precondition NA +* @postcondition NA +*/ +int ITc_tts_set_credential_p(void) +{ + START_TEST; + + tts_state_e state; + const char* credential = "TizenApp"; + + int nRet = tts_get_state(g_pstTts, &state); + PRINT_RESULT(TTS_ERROR_NONE, nRet, "tts_get_state", TtsGetError(nRet)); + if ( state != TTS_STATE_CREATED ) + { + FPRINTF("[Line : %d][%s] get state is not matched state is :: %d \\n", __LINE__, API_NAMESPACE,state); + return 1; + } + + //Target API + nRet = tts_set_credential(g_pstTts,credential); + PRINT_RESULT(TTS_ERROR_NONE, nRet, "tts_set_credential", TtsGetError(nRet)); + + return 0; +} + +//& type: auto +//& purpose: To get the list of supported voices. +/** +* @testcase ITc_tts_set_get_private_data_p +* @since_tizen 3.0 +* @author SRID(asit.s) +* @reviewer SRID(a.pandia1) +* @type auto +* @scenario create a tts handler\n +* call tts_set_private_data\n +* call tts_get_private_data\n +* @apicovered tts_set_private_data,tts_get_private_data +* @passcase if API is successful +* @failcase if API is not successful +* @precondition NA +* @postcondition NA +*/ +int ITc_tts_set_get_private_data_p(void) +{ + START_TEST; + char* Getdata = NULL; + + if ( TtsSetStateChangedCallBacks(TtsStateChangedCallback) == 1 ) + { + return 1; + } + + int nRet = tts_prepare(g_pstTts); + PRINT_RESULT_CLEANUP(TTS_ERROR_NONE, nRet, "tts_prepare", TtsGetError(nRet),TtsUnSetStateChangedCallBacks()); + + while(TTS_STATE_READY != g_eCurrent_state){ + ecore_main_loop_iterate(); + } + + nRet = tts_set_private_data(g_pstTts,"test","data"); + PRINT_RESULT_CLEANUP(TTS_ERROR_NONE, nRet, "tts_set_private_data", TtsGetError(nRet), tts_unprepare(g_pstTts);TtsUnSetStateChangedCallBacks()); + + nRet = tts_get_private_data(g_pstTts,"test",&Getdata); + PRINT_RESULT_CLEANUP(TTS_ERROR_NONE, nRet, "tts_get_private_data", TtsGetError(nRet), tts_unprepare(g_pstTts);TtsUnSetStateChangedCallBacks();FREE_MEMORY(Getdata)); + + if( 0 != strcmp("data",Getdata) ) + { + FPRINTF("[Line : %d][%s] get data is not matched \\n", __LINE__, API_NAMESPACE); + FREE_MEMORY(Getdata); + tts_unprepare(g_pstTts); + TtsUnSetStateChangedCallBacks(); + return 1; + } + + FREE_MEMORY(Getdata); + + nRet = tts_unprepare(g_pstTts); + PRINT_RESULT_NORETURN(TTS_ERROR_NONE, nRet, "tts_unprepare", TtsGetError(nRet)); + + TtsUnSetStateChangedCallBacks(); + + return 0; +} + +//& type: auto +//& purpose: To get the list of supported voices. +/** +* @testcase ITc_tts_get_error_message_p +* @since_tizen 3.0 +* @author SRID(asit.s) +* @reviewer SRID(a.pandia1) +* @type auto +* @scenario create a tts handler\n +* call tts_set_error_cb to register callback function\n +* call tts_get_error_message to get error. +* @apicovered tts_get_error_message, +* @passcase if API is successful +* @failcase if API is not successful +* @precondition NA +* @postcondition NA +*/ +int ITc_tts_get_error_message_p(void) +{ + START_TEST; + + char* err_msg = NULL; + tts_state_e state; + int nIotconTimeoutId = 0; + + int nRet = tts_get_state(g_pstTts, &state); + PRINT_RESULT(TTS_ERROR_NONE, nRet, "tts_get_state", TtsGetError(nRet)); + + if(state != TTS_STATE_CREATED) + { + FPRINTF("[Line : %d][%s] get state is not matched \\n", __LINE__, API_NAMESPACE); + return 1; + } + + nRet = tts_set_error_cb(g_pstTts, ttsErrorCallback, NULL); + PRINT_RESULT(TTS_ERROR_NONE, nRet, "tts_set_error_cb", TtsGetError(nRet)); + + //This API called for generating error + nRet = tts_play(g_pstTts); + PRINT_RESULT_NORETURN(TTS_ERROR_NONE,nRet,"tts_play",TtsGetError(nRet)); + + RUN_POLLING_LOOP; + if(g_CallBackHit != true) + { + FPRINTF("[Line : %d][%s] callback hit failed \\n", __LINE__, API_NAMESPACE); + tts_unset_error_cb(g_pstTts); + return 1; + } + + nRet = tts_get_error_message(g_pstTts, &err_msg); + PRINT_RESULT_CLEANUP(TTS_ERROR_NONE,nRet,"tts_get_error_message",TtsGetError(nRet),tts_unset_error_cb(g_pstTts);FREE_MEMORY(err_msg)); + CHECK_HANDLE_CLEANUP(err_msg, "tts_get_error_message",tts_unset_error_cb(g_pstTts);FREE_MEMORY(err_msg)); + + nRet = tts_unset_error_cb(g_pstTts); + PRINT_RESULT_NORETURN(TTS_ERROR_NONE, nRet, "tts_unset_error_cb", TtsGetError(nRet)); + + return 0; +} + + +//& type: auto +//& purpose: To get the list of supported voices. +/** +* @testcase ITc_tts_set_unset_engine_changed_cb_p +* @since_tizen 3.0 +* @author SRID(asit.s) +* @reviewer SRID(a.pandia1) +* @type auto +* @scenario create a tts handler\n +* call tts_set_engine_changed_cb and register callback function\n +* call tts_unset_engine_changed_cb to deregister. +* @apicovered tts_set_engine_changed_cb,tts_unset_engine_changed_cb +* @passcase if API is successful +* @failcase if API is not successful +* @precondition NA +* @postcondition NA +*/ +int ITc_tts_set_unset_engine_changed_cb_p(void) +{ + START_TEST; + + g_CallBackValue = false; + + int nRet = tts_set_engine_changed_cb(g_pstTts,TtsEngineChangedcallback,NULL); + PRINT_RESULT(TTS_ERROR_NONE, nRet, "tts_set_engine_changed_cb", TtsGetError(nRet)); + + if(g_CallBackValue != true) + { + FPRINTF("[Line : %d][%s] callback hit failed \\n", __LINE__, API_NAMESPACE); + } + nRet = tts_unset_engine_changed_cb(g_pstTts); + PRINT_RESULT(TTS_ERROR_NONE, nRet, "tts_unset_engine_changed_cb", TtsGetError(nRet)); + + return 0; +} + /** @} */ /** @} */ diff --git a/src/itc/tts/tct-tts-native_mobile.h b/src/itc/tts/tct-tts-native_mobile.h index 4acb39a..60a272b 100755 --- a/src/itc/tts/tct-tts-native_mobile.h +++ b/src/itc/tts/tct-tts-native_mobile.h @@ -36,6 +36,10 @@ extern int ITc_tts_setunset_utterance_started_completed_cb_p(void); extern int ITc_tts_setunset_error_cb_p(void); extern int ITc_tts_setunset_default_voice_changed_cb_p(void); extern int ITc_tts_foreach_supported_voices_p(void); +extern int ITc_tts_set_credential_p(void); +extern int ITc_tts_set_get_private_data_p(void); +extern int ITc_tts_get_error_message_p(void); +extern int ITc_tts_set_unset_engine_changed_cb_p(void); testcase tc_array[] = { {"ITc_tts_create_destroy_p", ITc_tts_create_destroy_p, ITs_tts_startup, ITs_tts_cleanup}, @@ -52,6 +56,10 @@ testcase tc_array[] = { {"ITc_tts_setunset_error_cb_p", ITc_tts_setunset_error_cb_p, ITs_tts_startup, ITs_tts_cleanup}, {"ITc_tts_setunset_default_voice_changed_cb_p", ITc_tts_setunset_default_voice_changed_cb_p, ITs_tts_startup, ITs_tts_cleanup}, {"ITc_tts_foreach_supported_voices_p", ITc_tts_foreach_supported_voices_p, ITs_tts_startup, ITs_tts_cleanup}, + {"ITc_tts_set_credential_p", ITc_tts_set_credential_p, ITs_tts_startup, ITs_tts_cleanup}, + {"ITc_tts_set_get_private_data_p", ITc_tts_set_get_private_data_p, ITs_tts_startup, ITs_tts_cleanup}, + {"ITc_tts_get_error_message_p", ITc_tts_get_error_message_p, ITs_tts_startup, ITs_tts_cleanup}, + {"ITc_tts_set_unset_engine_changed_cb_p", ITc_tts_set_unset_engine_changed_cb_p, ITs_tts_startup, ITs_tts_cleanup}, {NULL, NULL} }; diff --git a/src/itc/tts/tct-tts-native_tv.h b/src/itc/tts/tct-tts-native_tv.h index 258e88c..a3112e6 100755 --- a/src/itc/tts/tct-tts-native_tv.h +++ b/src/itc/tts/tct-tts-native_tv.h @@ -35,6 +35,10 @@ extern int ITc_tts_setunset_utterance_started_completed_cb_p(void); extern int ITc_tts_setunset_error_cb_p(void); extern int ITc_tts_setunset_default_voice_changed_cb_p(void); extern int ITc_tts_foreach_supported_voices_p(void); +extern int ITc_tts_set_credential_p(void); +extern int ITc_tts_set_get_private_data_p(void); +extern int ITc_tts_get_error_message_p(void); +extern int ITc_tts_set_unset_engine_changed_cb_p(void); testcase tc_array[] = { {"ITc_tts_create_destroy_p", ITc_tts_create_destroy_p, ITs_tts_startup, ITs_tts_cleanup}, @@ -51,6 +55,10 @@ testcase tc_array[] = { {"ITc_tts_setunset_error_cb_p", ITc_tts_setunset_error_cb_p, ITs_tts_startup, ITs_tts_cleanup}, {"ITc_tts_setunset_default_voice_changed_cb_p", ITc_tts_setunset_default_voice_changed_cb_p, ITs_tts_startup, ITs_tts_cleanup}, {"ITc_tts_foreach_supported_voices_p", ITc_tts_foreach_supported_voices_p, ITs_tts_startup, ITs_tts_cleanup}, + {"ITc_tts_set_credential_p", ITc_tts_set_credential_p, ITs_tts_startup, ITs_tts_cleanup}, + {"ITc_tts_set_get_private_data_p", ITc_tts_set_get_private_data_p, ITs_tts_startup, ITs_tts_cleanup}, + {"ITc_tts_get_error_message_p", ITc_tts_get_error_message_p, ITs_tts_startup, ITs_tts_cleanup}, + {"ITc_tts_set_unset_engine_changed_cb_p", ITc_tts_set_unset_engine_changed_cb_p, ITs_tts_startup, ITs_tts_cleanup}, {NULL, NULL} }; diff --git a/src/itc/tts/tct-tts-native_wearable.h b/src/itc/tts/tct-tts-native_wearable.h index 4acb39a..60a272b 100755 --- a/src/itc/tts/tct-tts-native_wearable.h +++ b/src/itc/tts/tct-tts-native_wearable.h @@ -36,6 +36,10 @@ extern int ITc_tts_setunset_utterance_started_completed_cb_p(void); extern int ITc_tts_setunset_error_cb_p(void); extern int ITc_tts_setunset_default_voice_changed_cb_p(void); extern int ITc_tts_foreach_supported_voices_p(void); +extern int ITc_tts_set_credential_p(void); +extern int ITc_tts_set_get_private_data_p(void); +extern int ITc_tts_get_error_message_p(void); +extern int ITc_tts_set_unset_engine_changed_cb_p(void); testcase tc_array[] = { {"ITc_tts_create_destroy_p", ITc_tts_create_destroy_p, ITs_tts_startup, ITs_tts_cleanup}, @@ -52,6 +56,10 @@ testcase tc_array[] = { {"ITc_tts_setunset_error_cb_p", ITc_tts_setunset_error_cb_p, ITs_tts_startup, ITs_tts_cleanup}, {"ITc_tts_setunset_default_voice_changed_cb_p", ITc_tts_setunset_default_voice_changed_cb_p, ITs_tts_startup, ITs_tts_cleanup}, {"ITc_tts_foreach_supported_voices_p", ITc_tts_foreach_supported_voices_p, ITs_tts_startup, ITs_tts_cleanup}, + {"ITc_tts_set_credential_p", ITc_tts_set_credential_p, ITs_tts_startup, ITs_tts_cleanup}, + {"ITc_tts_set_get_private_data_p", ITc_tts_set_get_private_data_p, ITs_tts_startup, ITs_tts_cleanup}, + {"ITc_tts_get_error_message_p", ITc_tts_get_error_message_p, ITs_tts_startup, ITs_tts_cleanup}, + {"ITc_tts_set_unset_engine_changed_cb_p", ITc_tts_set_unset_engine_changed_cb_p, ITs_tts_startup, ITs_tts_cleanup}, {NULL, NULL} }; -- 2.7.4