0013_iconic_state: added more testcase for iconic state of transient_for window 80/274980/3
authorJunseok Kim <juns.kim@samsung.com>
Fri, 13 May 2022 03:55:12 +0000 (12:55 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Mon, 16 May 2022 05:32:51 +0000 (05:32 +0000)
added testcase for iconic state of transient_for window as below

 - transient_for_basic: test iconic state of child when parent iconified.
 - transient_for_fully_obscured: test iconic state of transient_for_basic TC's windows are obscured.
 - transient_for_unobscured: test iconic state of transient_for_fully_obscured TC's windows after unobscured.

NOTE:: transient_for_unobscured TC failed until adjust enlightenment patch for child iconify by client.

Change-Id: I498c045d07de9dfcad270f0f3bd27f0cbcec5546

src/testcase/0013_iconic_state.cpp

index 2e5b6d3..803dda7 100644 (file)
@@ -700,3 +700,256 @@ TEST_F(etTestIconicState, iconify_by_server_uniconify2)
 
    ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
 }
+
+TEST_F(etTestIconicState, iconify_by_transient_for_basic)
+{
+   etWin *tw = NULL;
+   Eina_List *list = NULL, *l = NULL;
+   Eina_Bool res = EINA_FALSE;
+   int pass_count = 0;
+
+   // init TC window, show=true, geom=true
+   initTC(EINA_TRUE, EINA_TRUE);
+
+   // set transient_for between tw_blue(parent) and tw_red(child)
+   res = etRunner::get().setWinTransientFor(tw_red, tw_blue, EINA_TRUE);
+   ASSERT_TRUE(res);
+   ASSERT_EVENT(tw_red, E_TC_EVENT_TYPE_STACK_CHANGED);
+
+   // set iconify the tw_blue(parent)
+   res = etRunner::get().setWinIconic(tw_blue, EINA_TRUE);
+   ASSERT_TRUE(res);
+   ASSERT_ICONIFIED_BY_CLIENT(tw_blue);
+
+   // Expected stack res:
+   // [Top] Red(iconified by client) -> Blue(iconified by client) -> Green [Bottom]
+   list = etRunner::get().getWinInfoList();
+   ASSERT_TRUE(list != NULL);
+
+   EINA_LIST_CAST_FOREACH(list, l, tw, etWin*)
+     {
+        if (tw->layer > 200)
+          continue;
+
+        if (pass_count == 0)
+          {
+             ASSERT_EQ(tw->native_win, tw_red->native_win);
+             ASSERT_FALSE(tw->Vis.obj);
+             ASSERT_TRUE(tw->iconic.set);
+             ASSERT_TRUE(tw->iconic.by_client);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 1)
+          {
+             ASSERT_EQ(tw->native_win, tw_blue->native_win);
+             ASSERT_FALSE(tw->Vis.obj);
+             ASSERT_TRUE(tw->iconic.set);
+             ASSERT_TRUE(tw->iconic.by_client);
+             pass_count++;
+             continue;
+          }
+        else
+          {
+             ASSERT_EQ(tw->native_win, tw_green->native_win);
+             ASSERT_TRUE(tw->Vis.obj);
+             ASSERT_FALSE(tw->iconic.set);
+             pass_count++;
+          }
+
+        break;
+     }
+   etRunner::get().freeWinInfoList(list);
+
+   ASSERT_EQ(3, pass_count);
+
+   //ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
+}
+
+TEST_F(etTestIconicState, iconify_by_transient_for_fully_obscured)
+{
+   etWin *tw = NULL;
+   Eina_List *list = NULL, *l = NULL;
+   Eina_Bool res = EINA_FALSE;
+   int pass_count = 0;
+
+   // init TC window, show=true, geom=true
+   initTC(EINA_TRUE, EINA_TRUE);
+
+   // set transient_for between tw_blue(parent) and tw_red(child)
+   res = etRunner::get().setWinTransientFor(tw_red, tw_blue, EINA_TRUE);
+   ASSERT_TRUE(res);
+   ASSERT_EVENT(tw_red, E_TC_EVENT_TYPE_STACK_CHANGED);
+
+   // set iconify the tw_blue(parent)
+   res = etRunner::get().setWinIconic(tw_blue, EINA_TRUE);
+   ASSERT_TRUE(res);
+   ASSERT_ICONIFIED_BY_CLIENT(tw_blue);
+
+   // maximize and raise tw_green to obscure other windows
+   tw_green->maximize();
+   res = etRunner::get().setWinStack(tw_green, NULL, EINA_TRUE);
+   ASSERT_TRUE(res);
+   ASSERT_EVENT(tw_green, E_TC_EVENT_TYPE_STACK_RAISE);
+
+   // Expected stack res:
+   // [Top] Green -> Red(iconified by client) -> Blue(iconified by client) [Bottom]
+   list = etRunner::get().getWinInfoList();
+   ASSERT_TRUE(list != NULL);
+
+   EINA_LIST_CAST_FOREACH(list, l, tw, etWin*)
+     {
+        if (tw->layer > 200)
+          continue;
+
+        if (pass_count == 0)
+          {
+             ASSERT_EQ(tw->native_win, tw_green->native_win);
+             ASSERT_TRUE(tw->Vis.obj);
+             ASSERT_FALSE(tw->iconic.set);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 1)
+          {
+             ASSERT_EQ(tw->native_win, tw_red->native_win);
+             ASSERT_FALSE(tw->Vis.obj);
+             ASSERT_TRUE(tw->iconic.set);
+             ASSERT_TRUE(tw->iconic.by_client);
+             pass_count++;
+             continue;
+          }
+        else
+          {
+             ASSERT_EQ(tw->native_win, tw_blue->native_win);
+             ASSERT_FALSE(tw->Vis.obj);
+             ASSERT_TRUE(tw->iconic.set);
+             ASSERT_TRUE(tw->iconic.by_client);
+             pass_count++;
+          }
+
+        break;
+     }
+   etRunner::get().freeWinInfoList(list);
+
+   ASSERT_EQ(3, pass_count);
+
+   //ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
+}
+
+TEST_F(etTestIconicState, iconify_by_transient_for_unobscured)
+{
+   etWin *tw = NULL;
+   Eina_List *list = NULL, *l = NULL;
+   Eina_Bool res = EINA_FALSE;
+   int pass_count = 0;
+
+   // init TC window, show=true, geom=true
+   initTC(EINA_TRUE, EINA_TRUE);
+
+   // set transient_for between tw_blue(parent) and tw_red(child)
+   res = etRunner::get().setWinTransientFor(tw_red, tw_blue, EINA_TRUE);
+   ASSERT_TRUE(res);
+   ASSERT_EVENT(tw_red, E_TC_EVENT_TYPE_STACK_CHANGED);
+
+   // set iconify the tw_blue(parent)
+   res = etRunner::get().setWinIconic(tw_blue, EINA_TRUE);
+   ASSERT_TRUE(res);
+   ASSERT_ICONIFIED_BY_CLIENT(tw_blue);
+
+   // maximize and raise tw_green to obscure other windows
+   tw_green->maximize();
+   res = etRunner::get().setWinStack(tw_green, NULL, EINA_TRUE);
+   ASSERT_TRUE(res);
+   ASSERT_EVENT(tw_green, E_TC_EVENT_TYPE_STACK_RAISE);
+
+   // Expected stack res:
+   // [Top] Green -> Red(iconified by client) -> Blue(iconified by client) [Bottom]
+   list = etRunner::get().getWinInfoList();
+   ASSERT_TRUE(list != NULL);
+
+   EINA_LIST_CAST_FOREACH(list, l, tw, etWin*)
+     {
+        if (tw->layer > 200)
+          continue;
+
+        if (pass_count == 0)
+          {
+             ASSERT_EQ(tw->native_win, tw_green->native_win);
+             ASSERT_TRUE(tw->Vis.obj);
+             ASSERT_FALSE(tw->iconic.set);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 1)
+          {
+             ASSERT_EQ(tw->native_win, tw_red->native_win);
+             ASSERT_FALSE(tw->Vis.obj);
+             ASSERT_TRUE(tw->iconic.set);
+             ASSERT_TRUE(tw->iconic.by_client);
+             pass_count++;
+             continue;
+          }
+        else
+          {
+             ASSERT_EQ(tw->native_win, tw_blue->native_win);
+             ASSERT_FALSE(tw->Vis.obj);
+             ASSERT_TRUE(tw->iconic.set);
+             ASSERT_TRUE(tw->iconic.by_client);
+             pass_count++;
+          }
+
+        break;
+     }
+   etRunner::get().freeWinInfoList(list);
+
+   ASSERT_EQ(3, pass_count);
+   pass_count = 0;
+
+   // hide tw_green to unobscure other windows
+   hideTCWin(tw_green);
+   ASSERT_EVENT(tw_green, E_TC_EVENT_TYPE_VIS_OFF);
+
+   // Expected stack res:
+   // [Top] Green -> Red(iconified by client) -> Blue(iconified by client) [Bottom]
+   list = etRunner::get().getWinInfoList();
+   ASSERT_TRUE(list != NULL);
+
+   EINA_LIST_CAST_FOREACH(list, l, tw, etWin*)
+     {
+        if (tw->layer > 200)
+          continue;
+
+        if (pass_count == 0)
+          {
+             ASSERT_EQ(tw->native_win, tw_green->native_win);
+             ASSERT_FALSE(tw->Vis.obj);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 1)
+          {
+             ASSERT_EQ(tw->native_win, tw_red->native_win);
+             ASSERT_FALSE(tw->Vis.obj);
+             ASSERT_TRUE(tw->iconic.set);
+             ASSERT_TRUE(tw->iconic.by_client);
+             pass_count++;
+             continue;
+          }
+        else
+          {
+             ASSERT_EQ(tw->native_win, tw_blue->native_win);
+             ASSERT_FALSE(tw->Vis.obj);
+             ASSERT_TRUE(tw->iconic.set);
+             ASSERT_TRUE(tw->iconic.by_client);
+             pass_count++;
+          }
+
+        break;
+     }
+   etRunner::get().freeWinInfoList(list);
+
+   ASSERT_EQ(3, pass_count);
+
+   //ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
+}