0004_transient_for: added more testcases for test transient_for 79/274979/3
authorJunseok Kim <juns.kim@samsung.com>
Fri, 13 May 2022 03:50:17 +0000 (12:50 +0900)
committerJunseok Kim <juns.kim@samsung.com>
Mon, 16 May 2022 02:02:49 +0000 (11:02 +0900)
added testcases as below
 - stack below: test for window stack when parent set stack below to other window
 - layer_change2: test for window layer when parent set transient_for to notification window
 - layer_revert2: test for window layer revert to origin after layer_change2
 - chain: test for chained transient_for as parent->child->grandchild
 - chain_stack_xxx: test for window stack of chained windows

Change-Id: I4a5d1ed7ca54390bfb91e8b1a15efceba5f4d24c

src/testcase/0004_transient_for.cpp

index d465ea698db105914998d5e73c5c2ec66ba49747..023e11c92ad77428ad5fbbb3f9b87cdd87c2b873 100644 (file)
@@ -343,6 +343,67 @@ TEST_F(etTestTransientFor, transient_for_stack_above)
    ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
 }
 
+TEST_F(etTestTransientFor, transient_for_stack_below)
+{
+   etWin *tw = NULL;
+   Eina_Bool res = EINA_FALSE;
+   Eina_List *list = NULL, *l = NULL;
+   int pass_count = 0;
+
+   // init TC window, show=true, geom=true
+   initTC(EINA_TRUE, EINA_TRUE);
+
+   // tw_parent raise for prepare stack below
+   res = etRunner::get().setWinStack(tw_parent, NULL, EINA_TRUE);
+   ASSERT_TRUE(res);
+   ASSERT_EVENT(tw_parent, E_TC_EVENT_TYPE_STACK_RAISE);
+
+   // set transient_for
+   res = etRunner::get().setWinTransientFor(tw_child, tw_parent, EINA_TRUE);
+   ASSERT_TRUE(res);
+   ASSERT_EVENT(tw_child, E_TC_EVENT_TYPE_STACK_CHANGED);
+
+   // tw_parent set stack below of tw_base
+   res = etRunner::get().setWinStack(tw_parent, tw_base, EINA_FALSE);
+   ASSERT_TRUE(res);
+   ASSERT_EVENT(tw_parent, E_TC_EVENT_TYPE_STACK_CHANGED);
+
+   // Expected stack res:
+   // [Top] tw_base -> tw_child -> tw_parent [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_base->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 1)
+          {
+             ASSERT_EQ(tw->native_win, tw_child->native_win);
+             pass_count++;
+             continue;
+          }
+        else
+          {
+             ASSERT_EQ(tw->native_win, tw_parent->native_win);
+             pass_count++;
+          }
+
+        break;
+     }
+   etRunner::get().freeWinInfoList(list);
+
+   ASSERT_EQ(3, pass_count);
+
+   //ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
+}
+
 TEST_F(etTestTransientFor, transient_for_layer_change)
 {
    etWin *tw = NULL;
@@ -411,6 +472,78 @@ TEST_F(etTestTransientFor, transient_for_layer_change)
    ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
 }
 
+TEST_F(etTestTransientFor, transient_for_layer_change2)
+{
+   etWin *tw = NULL;
+   Eina_Bool res = EINA_FALSE;
+   Eina_List *list = NULL, *l = NULL;
+   int pass_count = 0;
+   etWin *tw_noti;
+
+   // init TC window, show=true, geom=true
+   initTC(EINA_TRUE, EINA_TRUE);
+
+   // init notification window
+   tw_noti = initNotiWin("TCWin_Noti", EINA_TRUE, EINA_TRUE);
+   showTCWin(tw_noti);
+   ASSERT_VIS_ON(tw_noti);
+
+   // set transient_for tw_noti and tw_parent
+   res = etRunner::get().setWinTransientFor(tw_parent, tw_noti, EINA_TRUE);
+   ASSERT_TRUE(res);
+   ASSERT_EVENT(tw_parent, E_TC_EVENT_TYPE_STACK_CHANGED);
+
+   // set transient_for tw_parent and tw_child
+   res = etRunner::get().setWinTransientFor(tw_child, tw_parent, EINA_TRUE);
+   ASSERT_TRUE(res);
+   ASSERT_EVENT(tw_child, E_TC_EVENT_TYPE_STACK_CHANGED);
+
+   // Expected stack res:
+   // [Top] tw_child -> tw_parent -> tw_noti -> ... -> tw_base [Bottom]
+   list = etRunner::get().getWinInfoList();
+   ASSERT_TRUE(list != NULL);
+
+   EINA_LIST_CAST_FOREACH(list, l, tw, etWin*)
+     {
+        if (tw->layer == E_LAYER_CLIENT_NOTIFICATION_NORMAL)
+          {
+             if (pass_count == 0)
+               {
+                  // check notification level
+                  ASSERT_EQ(tw->native_win, tw_child->native_win);
+                  pass_count++;
+                  continue;
+               }
+             else if (pass_count == 1)
+               {
+                  ASSERT_EQ(tw->native_win, tw_parent->native_win);
+                  pass_count++;
+                  continue;
+               }
+             else if (pass_count == 2)
+               {
+                  ASSERT_EQ(tw->native_win, tw_noti->native_win);
+                  pass_count++;
+                  continue;
+               }
+          }
+        else if (tw->layer == E_LAYER_CLIENT_NORMAL)
+          {
+             if (pass_count == 3)
+               {
+                  ASSERT_EQ(tw->native_win, tw_base->native_win);
+                  pass_count++;
+                  break;
+               }
+          }
+     }
+   etRunner::get().freeWinInfoList(list);
+
+   ASSERT_EQ(4, pass_count);
+
+   //ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
+}
+
 TEST_F(etTestTransientFor, transient_for_layer_revert)
 {
    etWin *tw = NULL;
@@ -533,6 +666,132 @@ TEST_F(etTestTransientFor, transient_for_layer_revert)
    ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
 }
 
+TEST_F(etTestTransientFor, transient_for_layer_revert2)
+{
+   etWin *tw = NULL;
+   Eina_Bool res = EINA_FALSE;
+   Eina_List *list = NULL, *l = NULL;
+   int pass_count = 0;
+   etWin *tw_noti;
+
+   // init TC window, show=true, geom=true
+   initTC(EINA_TRUE, EINA_TRUE);
+
+   // init notification window
+   tw_noti = initNotiWin("TCWin_Noti", EINA_TRUE, EINA_TRUE);
+   showTCWin(tw_noti);
+   ASSERT_VIS_ON(tw_noti);
+
+   // set transient_for tw_noti and tw_parent
+   res = etRunner::get().setWinTransientFor(tw_parent, tw_noti, EINA_TRUE);
+   ASSERT_TRUE(res);
+   ASSERT_EVENT(tw_parent, E_TC_EVENT_TYPE_STACK_CHANGED);
+
+   // set transient_for tw_parent and tw_child
+   res = etRunner::get().setWinTransientFor(tw_child, tw_parent, EINA_TRUE);
+   ASSERT_TRUE(res);
+   ASSERT_EVENT(tw_child, E_TC_EVENT_TYPE_STACK_CHANGED);
+
+   // Expected stack res:
+   // [Top] tw_child -> tw_parent -> tw_noti -> ... -> tw_base [Bottom]
+   list = etRunner::get().getWinInfoList();
+   ASSERT_TRUE(list != NULL);
+
+   EINA_LIST_CAST_FOREACH(list, l, tw, etWin*)
+     {
+        if (tw->layer == E_LAYER_CLIENT_NOTIFICATION_NORMAL)
+          {
+             if (pass_count == 0)
+               {
+                  // check notification level
+                  ASSERT_EQ(tw->native_win, tw_child->native_win);
+                  pass_count++;
+                  continue;
+               }
+             else if (pass_count == 1)
+               {
+                  ASSERT_EQ(tw->native_win, tw_parent->native_win);
+                  pass_count++;
+                  continue;
+               }
+             else if (pass_count == 2)
+               {
+                  ASSERT_EQ(tw->native_win, tw_noti->native_win);
+                  pass_count++;
+                  continue;
+               }
+          }
+        else if (tw->layer == E_LAYER_CLIENT_NORMAL)
+          {
+             if (pass_count == 3)
+               {
+                  ASSERT_EQ(tw->native_win, tw_base->native_win);
+                  pass_count++;
+                  break;
+               }
+          }
+     }
+   etRunner::get().freeWinInfoList(list);
+
+   ASSERT_EQ(4, pass_count);
+   pass_count = 0;
+
+   // unset transient_for of tw_parent
+   res = etRunner::get().setWinTransientFor(tw_parent, nullptr, EINA_FALSE);
+   ASSERT_TRUE(res);
+   ASSERT_EVENT(tw_parent, E_TC_EVENT_TYPE_STACK_CHANGED);
+
+   // Expected stack res:
+   // [Top] tw_noti -> ... -> tw_child -> tw_parent -> tw_base [Bottom]
+   list = etRunner::get().getWinInfoList();
+   ASSERT_TRUE(list != NULL);
+
+   EINA_LIST_CAST_FOREACH(list, l, tw, etWin*)
+     {
+        if (pass_count == 0)
+          {
+             if (tw->layer > 200)
+               {
+                  // check notification level
+                  if (tw->layer != E_LAYER_CLIENT_NOTIFICATION_NORMAL)
+                    continue;
+                  ASSERT_EQ(tw->native_win, tw_noti->native_win);
+                  pass_count++;
+                  continue;
+               }
+          }
+        else if (tw->layer > 200)
+          {
+             continue;
+          }
+
+        if (pass_count == 1)
+          {
+             ASSERT_EQ(tw->native_win, tw_child->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 2)
+          {
+             ASSERT_EQ(tw->native_win, tw_parent->native_win);
+             pass_count++;
+             continue;
+          }
+        else
+          {
+             ASSERT_EQ(tw->native_win, tw_base->native_win);
+             pass_count++;
+          }
+
+        break;
+     }
+   etRunner::get().freeWinInfoList(list);
+
+   ASSERT_EQ(4, pass_count);
+
+   //ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
+}
+
 TEST_F(etTestTransientFor, transient_for_always_on_top_basic)
 {
    etWin *tw = NULL;
@@ -1138,3 +1397,223 @@ TEST_F(etTestTransientFor, transient_for_multi_child_change_below)
    ASSERT_EQ(4, pass_count);
 //   ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
 }
+
+TEST_F(etTestTransientFor, transient_for_child_chain)
+{
+   etWin *tw = NULL;
+   Eina_Bool res = EINA_FALSE;
+   Eina_List *list = NULL, *l = NULL;
+   int pass_count = 0;
+
+   // init TC window, show=true, geom=true
+   initTC(EINA_TRUE, EINA_TRUE);
+
+   // raise tw_parent
+   etRunner::get().setWinStack(tw_parent, NULL, EINA_TRUE);
+   ASSERT_EVENT(tw_parent, E_TC_EVENT_TYPE_STACK_RAISE);
+
+   // set transient_for
+   res = etRunner::get().setWinTransientFor(tw_child, tw_parent, EINA_TRUE);
+   ASSERT_TRUE(res);
+   ASSERT_EVENT(tw_child, E_TC_EVENT_TYPE_STACK_ABOVE);
+
+   // create tw_child2
+   tw_child2 = initNormalWin("TCWin_Normal_child2", EINA_TRUE);
+   showTCWin(tw_child2);
+   ASSERT_TRUE(tw_child2 != NULL) << "failed to initiation window";
+
+   // set transient_for tw_child2 to tw_child
+   res = etRunner::get().setWinTransientFor(tw_child2, tw_child, EINA_TRUE);
+   ASSERT_TRUE(res);
+
+   etRunner::get().work(0.5);
+
+   // Expected stack res:
+   // [Top] tw_child2 -> tw_child -> tw_parent -> tw_base [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_child2->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 1)
+          {
+             ASSERT_EQ(tw->native_win, tw_child->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 2)
+          {
+             ASSERT_EQ(tw->native_win, tw_parent->native_win);
+             pass_count++;
+             continue;
+          }
+        else
+          {
+             ASSERT_EQ(tw->native_win, tw_base->native_win);
+             pass_count++;
+          }
+
+        break;
+     }
+   etRunner::get().freeWinInfoList(list);
+
+   ASSERT_EQ(4, pass_count);
+
+//   ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
+}
+
+TEST_F(etTestTransientFor, transient_for_child_chain_raise)
+{
+   etWin *tw = NULL;
+   Eina_Bool res = EINA_FALSE;
+   Eina_List *list = NULL, *l = NULL;
+   int pass_count = 0;
+
+   // init TC window, show=true, geom=true
+   initTC(EINA_TRUE, EINA_TRUE);
+
+   // set transient_for
+   res = etRunner::get().setWinTransientFor(tw_child, tw_parent, EINA_TRUE);
+   ASSERT_TRUE(res);
+   etRunner::get().work(0.1); // wait for transient_for done.
+
+   // create tw_child2
+   tw_child2 = initNormalWin("TCWin_Normal_child2", EINA_TRUE);
+   showTCWin(tw_child2);
+   ASSERT_TRUE(tw_child2 != NULL) << "failed to initiation window";
+
+   // set transient_for tw_child2 to tw_child
+   res = etRunner::get().setWinTransientFor(tw_child2, tw_child, EINA_TRUE);
+   ASSERT_TRUE(res);
+   etRunner::get().work(0.1); // wait for transient_for done.
+
+   // raise tw_parent
+   etRunner::get().setWinStack(tw_parent, NULL, EINA_TRUE);
+   ASSERT_EVENT(tw_parent, E_TC_EVENT_TYPE_STACK_RAISE);
+
+   // Expected stack res:
+   // [Top] tw_child2 -> tw_child -> tw_parent -> tw_base [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_child2->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 1)
+          {
+             ASSERT_EQ(tw->native_win, tw_child->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 2)
+          {
+             ASSERT_EQ(tw->native_win, tw_parent->native_win);
+             pass_count++;
+             continue;
+          }
+        else
+          {
+             ASSERT_EQ(tw->native_win, tw_base->native_win);
+             pass_count++;
+          }
+
+        break;
+     }
+   etRunner::get().freeWinInfoList(list);
+
+   ASSERT_EQ(4, pass_count);
+
+//   ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
+}
+
+TEST_F(etTestTransientFor, transient_for_child_chain_lower)
+{
+   etWin *tw = NULL;
+   Eina_Bool res = EINA_FALSE;
+   Eina_List *list = NULL, *l = NULL;
+   int pass_count = 0;
+
+   // init TC window, show=true, geom=true
+   initTC(EINA_TRUE, EINA_TRUE);
+
+   // raise tw_parent
+   etRunner::get().setWinStack(tw_parent, NULL, EINA_TRUE);
+   ASSERT_EVENT(tw_parent, E_TC_EVENT_TYPE_STACK_RAISE);
+
+   // set transient_for
+   res = etRunner::get().setWinTransientFor(tw_child, tw_parent, EINA_TRUE);
+   ASSERT_TRUE(res);
+   ASSERT_EVENT(tw_child, E_TC_EVENT_TYPE_STACK_ABOVE);
+
+   // create tw_child2
+   tw_child2 = initNormalWin("TCWin_Normal_child2", EINA_TRUE);
+   showTCWin(tw_child2);
+   ASSERT_TRUE(tw_child2 != NULL) << "failed to initiation window";
+
+   // set transient_for tw_child2 to tw_child
+   res = etRunner::get().setWinTransientFor(tw_child2, tw_child, EINA_TRUE);
+   ASSERT_TRUE(res);
+   etRunner::get().work(0.1); // wait for transient_for done.
+
+   // lower tw_parent
+   etRunner::get().setWinStack(tw_parent, NULL, EINA_FALSE);
+   ASSERT_EVENT(tw_parent, E_TC_EVENT_TYPE_STACK_LOWER);
+
+   // Expected stack res:
+   // [Top] tw_base -> ... -> tw_child2 -> tw_child -> tw_parent [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_base->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 1)
+          {
+             if (tw->native_win != tw_child2->native_win)
+               continue; // skip for find lower layer
+             ASSERT_EQ(tw->native_win, tw_child2->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 2)
+          {
+             ASSERT_EQ(tw->native_win, tw_child->native_win);
+             pass_count++;
+             continue;
+          }
+        else
+          {
+             ASSERT_EQ(tw->native_win, tw_parent->native_win);
+             pass_count++;
+          }
+
+        break;
+     }
+   etRunner::get().freeWinInfoList(list);
+
+   ASSERT_EQ(4, pass_count);
+
+//   ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
+}