transient_for: add multi transient_for above tests 17/264717/1
authorDoyoun Kang <doyoun.kang@samsung.com>
Wed, 29 Sep 2021 01:32:52 +0000 (10:32 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Wed, 29 Sep 2021 01:32:52 +0000 (10:32 +0900)
Change-Id: Ia7756aac07c09bc7e95e1c7dfaf70cc7dd60f70d

src/testcase/0004_transient_for.cpp

index 605c3d5..e0fb60c 100644 (file)
@@ -10,6 +10,7 @@ class etTestTransientFor : public ::etTCBase
  protected:
     etWin *tw_parent = NULL;
     etWin *tw_child = NULL;
+    etWin *tw_child2 = NULL;
     etWin *tw_base = NULL;
     std::string testCaseName;
     std::string testName;
@@ -668,4 +669,472 @@ TEST_F(etTestTransientFor, transient_for_always_on_top_basic2)
    ASSERT_EQ(4, pass_count);
 
    ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
-}
\ No newline at end of file
+}
+
+TEST_F(etTestTransientFor, transient_for_multi_child)
+{
+   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
+   res = etRunner::get().setWinTransientFor(tw_child2, tw_parent, 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_multi_child2)
+{
+   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
+   res = etRunner::get().setWinTransientFor(tw_child2, tw_parent, 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);
+
+   pass_count = 0;
+
+   // set transient_for again
+   res = etRunner::get().setWinTransientFor(tw_child, tw_parent, EINA_TRUE);
+   ASSERT_TRUE(res);
+   ASSERT_EVENT(tw_child, E_TC_EVENT_TYPE_STACK_ABOVE);
+
+   etRunner::get().work(0.5);
+
+   // Expected stack res:
+   // [Top] tw_child -> tw_child2 -> 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_child->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 1)
+          {
+             ASSERT_EQ(tw->native_win, tw_child2->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_multi_child3)
+{
+   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);
+
+   // Expected stack res:
+   // [Top] 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_child->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 1)
+          {
+             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(3, pass_count);
+
+
+   // 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
+   res = etRunner::get().setWinTransientFor(tw_child2, tw_parent, EINA_TRUE);
+   ASSERT_TRUE(res);
+
+   // set transient_for tw_child
+   res = etRunner::get().setWinTransientFor(tw_child, tw_parent, EINA_TRUE);
+   ASSERT_TRUE(res);
+
+   etRunner::get().work(0.5);
+
+   // Expected stack res:
+   // [Top] tw_child -> tw_child2 -> tw_parent -> tw_base [Bottom]
+   list = etRunner::get().getWinInfoList();
+   ASSERT_TRUE(list != NULL);
+
+   pass_count = 0;
+   EINA_LIST_CAST_FOREACH(list, l, tw, etWin*)
+     {
+        if (tw->layer > 200) continue;
+
+        if (pass_count == 0)
+          {
+             ASSERT_EQ(tw->native_win, tw_child->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 1)
+          {
+             ASSERT_EQ(tw->native_win, tw_child2->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_multi_child_change_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);
+
+   // 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
+   res = etRunner::get().setWinTransientFor(tw_child2, tw_parent, 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);
+
+   pass_count = 0;
+
+   // set transient_for_BELOW
+   res = etRunner::get().setWinTransientForBelow(tw_child, tw_parent, EINA_TRUE);
+   ASSERT_TRUE(res);
+   ASSERT_EVENT(tw_child, E_TC_EVENT_TYPE_STACK_BELOW);
+
+   etRunner::get().work(0.5);
+
+   // Expected stack res:
+   // [Top] tw_child2 -> tw_parent -> tw_child -> 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_parent->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_base->native_win);
+             pass_count++;
+          }
+
+        break;
+     }
+   etRunner::get().freeWinInfoList(list);
+
+   ASSERT_EQ(4, pass_count);
+
+   pass_count = 0;
+
+   // set transient_for_BELOW
+   res = etRunner::get().setWinTransientForBelow(tw_child2, tw_parent, EINA_TRUE);
+   ASSERT_TRUE(res);
+
+   etRunner::get().work(0.5);
+
+   // Expected stack res:
+   // [Top] tw_parent -> tw_child -> tw_child2 -> 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_parent->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_child2->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);
+}