static int g_received_event_type = -1;
static void *g_received_event_data = NULL;
+GList *clickable_items = NULL;
+static bool g_event_received_cb = false;
+static bool g_check_event_received = false;
+
#define MMI_EVENT_VOICE_TYPE_GO 1000 // for test
+#define MMI_KEY_OUTPUT_EVENT "outputEvent"
+#define MMI_KEY_ASR_FINAL_RESULT "asrFinalResult"
+#define MMI_KEY_RESULT "result"
+#define MMI_KEY_UI_CLICKABLE_OBJECT "uiClickableObject"
+#define MMI_KEY_NUM_OF_CLICKABLE_OBJECTS "numOfClickableObjects"
namespace {
GError *err_msg = NULL;
JsonNode *root = NULL;
JsonObject *root_obj = NULL;
+ JsonObject *result_obj = NULL;
const gchar *action = NULL;
+ string output_event = "";
+ JsonArray *output_array = NULL;
+ gint64 clickable_ojbect_size = NULL;
json_parser_load_from_data(parser, (char *)json_data, -1, &err_msg);
if (err_msg) {
root_obj = json_node_get_object(root);
if (root_obj == NULL) {
- _E("failed to get object\n");
+ _E("failed to get root_obj\n");
+ goto cleanup;
+ }
+
+ output_array = json_object_get_array_member(root_obj, MMI_KEY_OUTPUT_EVENT);
+ if (output_array == NULL) {
+ _E("output array is null");
+ goto cleanup;
+ }
+
+ action = json_array_get_string_element(output_array, 0);
+ if (action == nullptr) {
+ _E("failed to get output_array\n");
goto cleanup;
}
- action = json_object_get_string_member(root_obj, "Action");
- _D("Action: %s\n", action);
- output_action = string(action);
+ output_event = string(action);
+ if (output_event == MMI_KEY_ASR_FINAL_RESULT) {
+ result_obj = json_object_get_object_member(root_obj, MMI_KEY_ASR_FINAL_RESULT);
+ if (result_obj != NULL) {
+ action = json_object_get_string_member(result_obj, MMI_KEY_RESULT);
+ if (action == nullptr) {
+ _E("failed to get object of result\n");
+ goto cleanup;
+ }
+
+ output_action = string(action);
+ }
+ }
+ else if (output_event == MMI_KEY_UI_CLICKABLE_OBJECT) {
+ result_obj = json_object_get_object_member(root_obj, MMI_KEY_UI_CLICKABLE_OBJECT);
+ if (result_obj != NULL) {
+ clickable_ojbect_size = json_object_get_int_member(result_obj, MMI_KEY_NUM_OF_CLICKABLE_OBJECTS);
+
+ int a = (int) clickable_ojbect_size;
+ if (clickable_ojbect_size == NULL) {
+ _E("no clickable object ");
+ goto cleanup;
+ }
+ else {
+ output_action = to_string(clickable_ojbect_size);
+ }
+ }
+ }
+
+ if (parser)
+ g_object_unref(parser);
+
+ return;
cleanup:
if (err_msg)
{
g_received_event_type = type;
g_received_event_data = event;
+ g_event_received_cb = true;
}
class IUClientFeedInputEventTest : public testing::Test {
MMI_PROVIDER_EVENT_GESTURE = ecore_event_type_new();
MMI_PROVIDER_EVENT_VOICE = ecore_event_type_new();
MMI_PROVIDER_EVENT_VISION = ecore_event_type_new();
+ MMI_PROVIDER_EVENT_SCREEN_ANALYZER = ecore_event_type_new();
+ MMI_PROVIDER_EVENT_VOICE_TOUCH = ecore_event_type_new();
g_received_event_type = -1;
g_received_event_data = NULL;
+ g_event_received_cb = false;
+ g_check_event_received = false;
int ret = mmi_iu_init();
EXPECT_EQ(ret, MMI_IU_ERROR_NONE);
MMI_PROVIDER_EVENT_GESTURE = -1;
MMI_PROVIDER_EVENT_VOICE = -1;
MMI_PROVIDER_EVENT_VISION = -1;
+ MMI_PROVIDER_EVENT_VOICE_TOUCH = -1;
ecore_shutdown();
}
return ret;
ret = mmi_iu_feed_input_modality(type, event);
+
+ while (g_check_event_received && !g_event_received_cb){
+ ecore_main_loop_iterate();
+ }
+
+ _D("result: %s\n", output_action.c_str());
return ret;
}
key_event.keyname = (char *)"UP";
int ret = feed_input_event_test(MMI_STATE_EXPLORATION, MMI_PROVIDER_EVENT_KEY, &key_event);
- EXPECT_EQ(ret, MMI_IU_ERROR_NONE);
-
- EXPECT_STREQ(output_action.c_str(), "MoveUp");
+ EXPECT_EQ(ret, MMI_IU_ERROR_NOT_SUPPORTED_TYPE);
}
TEST_F(IUClientFeedInputEventTest, utc_mmi_iu_feed_input_event_key_input_press_down)
key_event.keyname = (char *)"DOWN";
int ret = feed_input_event_test(MMI_STATE_EXPLORATION, MMI_PROVIDER_EVENT_KEY, &key_event);
- EXPECT_EQ(ret, MMI_IU_ERROR_NONE);
-
- EXPECT_STREQ(output_action.c_str(), "MoveDown");
+ EXPECT_EQ(ret, MMI_IU_ERROR_NOT_SUPPORTED_TYPE);
}
TEST_F(IUClientFeedInputEventTest, utc_mmi_iu_feed_input_event_key_input_press_right)
key_event.keyname = (char *)"RGHT";
int ret = feed_input_event_test(MMI_STATE_EXPLORATION, MMI_PROVIDER_EVENT_KEY, &key_event);
- EXPECT_EQ(ret, MMI_IU_ERROR_NONE);
-
- EXPECT_STREQ(output_action.c_str(), "MoveRight");
+ EXPECT_EQ(ret, MMI_IU_ERROR_NOT_SUPPORTED_TYPE);
}
TEST_F(IUClientFeedInputEventTest, utc_mmi_iu_feed_input_event_key_input_press_left)
key_event.keyname = (char *)"LEFT";
int ret = feed_input_event_test(MMI_STATE_EXPLORATION, MMI_PROVIDER_EVENT_KEY, &key_event);
+ EXPECT_EQ(ret, MMI_IU_ERROR_NOT_SUPPORTED_TYPE);
+}
+
+void created_clickable_items()
+{
+ clickable_item *item1 = (clickable_item*)calloc(1, sizeof(clickable_item));
+ if (item1 == NULL) {
+ _E("Fail to allocate memory");
+ return;
+ }
+
+ item1->coord_x = 10;
+ item1->coord_y = 10;
+ item1->width = 10;
+ item1->height = 10;
+ item1->object_id = "id1";
+ item1->label = "test1";
+
+ clickable_item *item2 = (clickable_item*)calloc(1, sizeof(clickable_item));
+ if (item2 == NULL) {
+ LOGE("Fail to allocate memory");
+ free(item1);
+ item1 = NULL;
+ return;
+ }
+
+ item2->coord_x = 15;
+ item2->coord_y = 10;
+ item2->width = 20;
+ item2->height = 10;
+ item2->object_id = "id2";
+ item2->label = "test2";
+
+ clickable_item *item3 = (clickable_item*)calloc(1, sizeof(clickable_item));
+ if (item3 == NULL) {
+ LOGE("Fail to allocate memory");
+ free(item1);
+ free(item2);
+ item1 = NULL;
+ item2 = NULL;
+ return;
+ }
+
+ item3->coord_x = 10;
+ item3->coord_y = 10;
+ item3->width = 20;
+ item3->height = 30;
+ item3->object_id = "id3";
+ item3->label = "test3";
+
+ clickable_items = g_list_append(clickable_items, item1);
+ clickable_items = g_list_append(clickable_items, item2);
+ clickable_items = g_list_append(clickable_items, item3);
+}
+
+TEST_F(IUClientFeedInputEventTest, utc_mmi_iu_feed_input_event_voicetouch_1)
+{
+ created_clickable_items();
+ mmi_provider_event_screen_analyzer se = { 0, };
+ se.type = MMI_PROVIDER_EVENT_SCREEN_ANALYZER;
+ se.n_items = g_list_length(clickable_items);
+ se.list = clickable_items;
+
+ int ret = feed_input_event_test(MMI_STATE_EXPLORATION, MMI_PROVIDER_EVENT_SCREEN_ANALYZER, &se);
+ EXPECT_EQ(ret, MMI_IU_ERROR_NONE);
+ EXPECT_STREQ(to_string(se.n_items).c_str(), output_action.c_str());
+ g_check_event_received = true;
+
+ mmi_provider_event_voice ve = { 0, };
+ ve.type = MMI_EVENT_VOICE_TYPE_UP;
+ string input = "test2";
+ ve.source = strdup(input.c_str());
+ ve.language = strdup("ko_KR");
+ g_event_received_cb = false;
+
+ ret = feed_input_event_test(MMI_STATE_INITIATION, MMI_PROVIDER_EVENT_VOICE, &ve);
EXPECT_EQ(ret, MMI_IU_ERROR_NONE);
- EXPECT_STREQ(output_action.c_str(), "MoveLeft");
+ EXPECT_STREQ(output_action.c_str(), input.c_str());
+ EXPECT_EQ(g_received_event_type, MMI_PROVIDER_EVENT_VOICE_TOUCH);
+
+ mmi_output_modality_voice_touch *rcv_se = (mmi_output_modality_voice_touch *)g_received_event_data;
+ mmi_voice_touch_mode modality_mode = (mmi_voice_touch_mode)rcv_se->mode;
+ clickable_item *item = (clickable_item*)g_list_nth_data(clickable_items,1);
+ EXPECT_STREQ(item->object_id, rcv_se->object_id);
}
TEST_F(IUClientFeedInputEventTest, utc_mmi_iu_feed_input_event_voice_move_up)
{
mmi_provider_event_voice ve = { 0, };
ve.type = MMI_EVENT_VOICE_TYPE_UP;
+ string input = "위로";
+ ve.source = strdup(input.c_str());
+ ve.language = strdup("ko_KR");
int ret = feed_input_event_test(MMI_STATE_EXPLORATION, MMI_PROVIDER_EVENT_VOICE, &ve);
EXPECT_EQ(ret, MMI_IU_ERROR_NONE);
- EXPECT_STREQ(output_action.c_str(), "MoveUp");
+ EXPECT_STREQ(output_action.c_str(), input.c_str());
+ EXPECT_EQ(g_received_event_type, MMI_PROVIDER_EVENT_VOICE_TOUCH);
}
TEST_F(IUClientFeedInputEventTest, utc_mmi_iu_feed_input_event_voice_move_down)
{
mmi_provider_event_voice ve = { 0, };
ve.type = MMI_EVENT_VOICE_TYPE_DOWN;
+ string input = "아래로";
+ ve.source = strdup(input.c_str());
+ ve.language = strdup("ko_KR");
int ret = feed_input_event_test(MMI_STATE_EXPLORATION, MMI_PROVIDER_EVENT_VOICE, &ve);
EXPECT_EQ(ret, MMI_IU_ERROR_NONE);
- EXPECT_STREQ(output_action.c_str(), "MoveDown");
+ EXPECT_STREQ(output_action.c_str(), input.c_str());
}
TEST_F(IUClientFeedInputEventTest, utc_mmi_iu_feed_input_event_voice_move_right)
{
mmi_provider_event_voice ve = { 0, };
ve.type = MMI_EVENT_VOICE_TYPE_RIGHT;
+ string input = "오른쪽";
+ ve.source = strdup(input.c_str());
+ ve.language = strdup("ko_KR");
int ret = feed_input_event_test(MMI_STATE_EXPLORATION, MMI_PROVIDER_EVENT_VOICE, &ve);
EXPECT_EQ(ret, MMI_IU_ERROR_NONE);
- EXPECT_STREQ(output_action.c_str(), "MoveRight");
+ EXPECT_STREQ(output_action.c_str(), input.c_str());
}
TEST_F(IUClientFeedInputEventTest, utc_mmi_iu_feed_input_event_voice_move_left)
{
mmi_provider_event_voice ve = { 0, };
ve.type = MMI_EVENT_VOICE_TYPE_LEFT;
+ string input = "왼쪽";
+ ve.source = strdup(input.c_str());
+ ve.language = strdup("ko_KR");
int ret = feed_input_event_test(MMI_STATE_EXPLORATION, MMI_PROVIDER_EVENT_VOICE, &ve);
EXPECT_EQ(ret, MMI_IU_ERROR_NONE);
- EXPECT_STREQ(output_action.c_str(), "MoveLeft");
-}
-
-TEST_F(IUClientFeedInputEventTest, utc_mmi_iu_feed_input_event_gesture_hand_up)
-{
- mmi_provider_event_gesture ge = { 0, };
- ge.type = MMI_EVENT_GESTURE_TYPE_SWIPE_UP;
-
- int ret = feed_input_event_test(MMI_STATE_EXPLORATION, MMI_PROVIDER_EVENT_GESTURE, &ge);
- EXPECT_EQ(ret, MMI_IU_ERROR_NONE);
-
- EXPECT_STREQ(output_action.c_str(), "MoveUp");
-}
-
-TEST_F(IUClientFeedInputEventTest, utc_mmi_iu_feed_input_event_gesture_hand_down)
-{
- mmi_provider_event_gesture ge = { 0, };
- ge.type = MMI_EVENT_GESTURE_TYPE_SWIPE_DOWN;
-
- int ret = feed_input_event_test(MMI_STATE_EXPLORATION, MMI_PROVIDER_EVENT_GESTURE, &ge);
- EXPECT_EQ(ret, MMI_IU_ERROR_NONE);
-
- EXPECT_STREQ(output_action.c_str(), "MoveDown");
-}
-
-TEST_F(IUClientFeedInputEventTest, utc_mmi_iu_feed_input_event_gesture_hand_right)
-{
- mmi_provider_event_gesture ge = { 0, };
- ge.type = MMI_EVENT_GESTURE_TYPE_SWIPE_RIGHT;
-
- int ret = feed_input_event_test(MMI_STATE_EXPLORATION, MMI_PROVIDER_EVENT_GESTURE, &ge);
- EXPECT_EQ(ret, MMI_IU_ERROR_NONE);
-
- EXPECT_STREQ(output_action.c_str(), "MoveRight");
+ EXPECT_STREQ(output_action.c_str(), input.c_str());
}
-TEST_F(IUClientFeedInputEventTest, utc_mmi_iu_feed_input_event_gesture_hand_left)
+TEST_F(IUClientFeedInputEventTest, utc_mmi_iu_feed_input_event_gesture_not_supported)
{
mmi_provider_event_gesture ge = { 0, };
ge.type = MMI_EVENT_GESTURE_TYPE_SWIPE_LEFT;
int ret = feed_input_event_test(MMI_STATE_EXPLORATION, MMI_PROVIDER_EVENT_GESTURE, &ge);
- EXPECT_EQ(ret, MMI_IU_ERROR_NONE);
-
- EXPECT_STREQ(output_action.c_str(), "MoveLeft");
+ EXPECT_EQ(ret, MMI_IU_ERROR_NOT_SUPPORTED_TYPE);
}
-TEST_F(IUClientFeedInputEventTest, utc_mmi_iu_feed_input_event_key_press_ok)
+TEST_F(IUClientFeedInputEventTest, utc_mmi_iu_feed_input_event_key_not_supported)
{
mmi_provider_event_key key_event;
key_event.type = MMI_PROVIDER_EVENT_KEY;
key_event.keyname = (char *)"I360";
int ret = feed_input_event_test(MMI_STATE_EXECUTION, MMI_PROVIDER_EVENT_KEY, &key_event);
- EXPECT_EQ(ret, MMI_IU_ERROR_NONE);
-
- EXPECT_STREQ(output_action.c_str(), "Execute");
-}
-
-TEST_F(IUClientFeedInputEventTest, utc_mmi_iu_feed_input_event_voice_execute)
-{
- mmi_provider_event_voice ve = { 0, };
- ve.type = MMI_EVENT_VOICE_TYPE_EXECUTE;
-
- int ret = feed_input_event_test(MMI_STATE_EXECUTION, MMI_PROVIDER_EVENT_VOICE, &ve);
- EXPECT_EQ(ret, MMI_IU_ERROR_NONE);
-
- EXPECT_STREQ(output_action.c_str(), "Execute");
-}
-
-TEST_F(IUClientFeedInputEventTest, utc_mmi_iu_feed_input_event_voice_play)
-{
- mmi_provider_event_voice ve = { 0, };
- ve.type = MMI_EVENT_VOICE_TYPE_PLAY;
-
- int ret = feed_input_event_test(MMI_STATE_EXECUTION, MMI_PROVIDER_EVENT_VOICE, &ve);
- EXPECT_EQ(ret, MMI_IU_ERROR_NONE);
-
- EXPECT_STREQ(output_action.c_str(), "Play");
-}
-
-TEST_F(IUClientFeedInputEventTest, utc_mmi_iu_feed_input_event_voice_yes)
-{
- mmi_provider_event_voice ve = { 0, };
- ve.type = MMI_EVENT_VOICE_TYPE_YES;
-
- int ret = feed_input_event_test(MMI_STATE_EXECUTION, MMI_PROVIDER_EVENT_VOICE, &ve);
- EXPECT_EQ(ret, MMI_IU_ERROR_NONE);
-
- EXPECT_STREQ(output_action.c_str(), "Yes");
-}
-
-TEST_F(IUClientFeedInputEventTest, utc_mmi_iu_feed_input_event_gesture_hand_push)
-{
- mmi_provider_event_gesture ge = { 0, };
- ge.type = MMI_EVENT_GESTURE_TYPE_PUSH;
-
- int ret = feed_input_event_test(MMI_STATE_EXECUTION, MMI_PROVIDER_EVENT_GESTURE, &ge);
- EXPECT_EQ(ret, MMI_IU_ERROR_NONE);
-
- EXPECT_STREQ(output_action.c_str(), "Execute");
-}
-
-TEST_F(IUClientFeedInputEventTest, utc_mmi_iu_feed_input_event_key_back_button)
-{
- mmi_provider_event_key key_event;
- key_event.type = MMI_PROVIDER_EVENT_KEY;
- key_event.keycode = XKB_KEY_XF86Back;
- key_event.keyname = (char *)"XF86Back";
-
- int ret = feed_input_event_test(MMI_STATE_FEEDBACK, MMI_PROVIDER_EVENT_KEY, &key_event);
- EXPECT_EQ(ret, MMI_IU_ERROR_NONE);
-
- EXPECT_STREQ(output_action.c_str(), "Cancel");
-}
-
-TEST_F(IUClientFeedInputEventTest, utc_mmi_iu_feed_input_event_voice_cancel)
-{
- mmi_provider_event_voice ve = { 0, };
- ve.type = MMI_EVENT_VOICE_TYPE_CANCEL;
-
- int ret = feed_input_event_test(MMI_STATE_FEEDBACK, MMI_PROVIDER_EVENT_VOICE, &ve);
- EXPECT_EQ(ret, MMI_IU_ERROR_NONE);
-
- EXPECT_STREQ(output_action.c_str(), "Cancel");
-}
-
-TEST_F(IUClientFeedInputEventTest, utc_mmi_iu_feed_input_event_voice_back)
-{
- mmi_provider_event_voice ve = { 0, };
- ve.type = MMI_EVENT_VOICE_TYPE_BACK;
-
- int ret = feed_input_event_test(MMI_STATE_FEEDBACK, MMI_PROVIDER_EVENT_VOICE, &ve);
- EXPECT_EQ(ret, MMI_IU_ERROR_NONE);
-
- EXPECT_STREQ(output_action.c_str(), "Cancel");
-}
-
-TEST_F(IUClientFeedInputEventTest, utc_mmi_iu_feed_input_event_vision_outofvision)
-{
- std::string input_intent_json_data =
- R"({
- "InputIntents" : [
- {
- "Modality" : "Vision",
- "Action" : "OutOfVision"
- }
- ]
- }
- )";
-
- mmi_provider_event_vision vision_event = { 0, };
- vision_event.type = MMI_EVENT_VISION_TYPE_USER_MOVE_AWAY;
-
- int ret = feed_input_event_test(MMI_STATE_OBSERVATION, MMI_PROVIDER_EVENT_VISION, &vision_event);
- EXPECT_EQ(ret, MMI_IU_ERROR_NONE);
-
- EXPECT_STREQ(output_action.c_str(), "Pause");
-}
-
-TEST_F(IUClientFeedInputEventTest, utc_mmi_iu_feed_input_event_key_back_terminate)
-{
- mmi_provider_event_key key_event = { 0, };
- key_event.type = MMI_PROVIDER_EVENT_KEY;
- key_event.keycode = XKB_KEY_XF86Back;
- key_event.keyname = (char *)"XF86Back";
-
- int ret = feed_input_event_test(MMI_STATE_TERMINATION, MMI_PROVIDER_EVENT_KEY, &key_event);
- EXPECT_EQ(ret, MMI_IU_ERROR_NONE);
-
- EXPECT_STREQ(output_action.c_str(), "Exit");
-}
-
-TEST_F(IUClientFeedInputEventTest, utc_mmi_iu_feed_input_event_voice_exit)
-{
- mmi_provider_event_voice ve = { 0, };
- ve.type = MMI_EVENT_VOICE_TYPE_EXIT;
-
- int ret = feed_input_event_test(MMI_STATE_TERMINATION, MMI_PROVIDER_EVENT_VOICE, &ve);
- EXPECT_EQ(ret, MMI_IU_ERROR_NONE);
-
- EXPECT_STREQ(output_action.c_str(), "Exit");
-}
-
-TEST_F(IUClientFeedInputEventTest, utc_mmi_iu_feed_input_event_voice_stop)
-{
- mmi_provider_event_voice ve = { 0, };
- ve.type = MMI_EVENT_VOICE_TYPE_STOP;
-
- int ret = feed_input_event_test(MMI_STATE_TERMINATION, MMI_PROVIDER_EVENT_VOICE, &ve);
- EXPECT_EQ(ret, MMI_IU_ERROR_NONE);
-
- EXPECT_STREQ(output_action.c_str(), "Stop");
-}
-
-TEST_F(IUClientFeedInputEventTest, utc_mmi_iu_feed_input_event_voice_terminate)
-{
- mmi_provider_event_voice ve = { 0, };
- ve.type = MMI_EVENT_VOICE_TYPE_TERMINATE;
-
- int ret = feed_input_event_test(MMI_STATE_TERMINATION, MMI_PROVIDER_EVENT_VOICE, &ve);
- EXPECT_EQ(ret, MMI_IU_ERROR_NONE);
-
- EXPECT_STREQ(output_action.c_str(), "Terminate");
-}
-
-TEST_F(IUClientFeedInputEventTest, utc_mmi_iu_feed_input_event_gesture_push_different_focus)
-{
- int ret = mmi_iu_set_output_result_received_callback(output_intent_received_cb, NULL);
- EXPECT_EQ(ret, MMI_IU_ERROR_NONE);
-
- ret = mmi_iu_set_app_state(MMI_STATE_TERMINATION);
- EXPECT_EQ(ret, MMI_IU_ERROR_NONE);
-
- mmi_provider_event_gesture ge = { 0, };
- ge.type = MMI_EVENT_GESTURE_TYPE_PUSH;
-
- ret = mmi_iu_feed_input_modality(MMI_PROVIDER_EVENT_GESTURE, &ge);
- EXPECT_EQ(ret, MMI_IU_ERROR_NONE);
-
- EXPECT_STREQ(output_action.c_str(), "");
-}
-
-TEST_F(IUClientFeedInputEventTest, utc_mmi_iu_feed_input_event_voice_go)
-{
- int timestamp = 1234;
- mmi_provider_event_voice ve = { 0, };
- ve.type = MMI_EVENT_VOICE_TYPE_GO;
- ve.timestamp = timestamp;
-
- int ret = feed_input_event_test(MMI_STATE_TERMINATION, MMI_PROVIDER_EVENT_VOICE, &ve);
- EXPECT_EQ(ret, MMI_IU_ERROR_NONE);
-
- EXPECT_EQ(g_received_event_type, MMI_PROVIDER_EVENT_VOICE);
- EXPECT_EQ(g_received_event_data, &ve);
-
- mmi_provider_event_voice *rcv_ve = (mmi_provider_event_voice *)g_received_event_data;
- EXPECT_EQ(rcv_ve->timestamp, timestamp);
+ EXPECT_EQ(ret, MMI_IU_ERROR_NOT_SUPPORTED_TYPE);
}
} // namespace