transient_for_below: add more tests 06/261606/1 accepted/tizen/unified/20210723.122703 submit/tizen/20210722.095947 submit/tizen/20210723.001953
authorDoyoun Kang <doyoun.kang@samsung.com>
Thu, 22 Jul 2021 03:25:40 +0000 (12:25 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Thu, 22 Jul 2021 04:51:56 +0000 (13:51 +0900)
- raise/lower parent on multi parent
- raise/lower child on multi parent

Change-Id: I23d459d33fd004865c3490ccda6694026bb1ddc1

src/testcase/0014_transient_for_below.cpp

index d63693b..be4c10c 100644 (file)
@@ -348,3 +348,896 @@ TEST_F(etTestTransientForBelow, transient_for_below_lower2)
    //ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
 }
 
+TEST_F(etTestTransientForBelow, transient_for_below_parent_lower)
+{
+   etWin *tw = NULL;
+   etWin *tw_child = NULL;
+   etWin *tw_child2 = NULL;
+   etWin *tw_above = NULL;
+   Eina_List *list = NULL, *l = NULL;
+   int pass_count = 0;
+
+   // init TC window, show=true, geom=true
+   initTC(EINA_TRUE);
+
+   makeTransientBelowChild(&tw_child, tw_parent, 80, 80, 300, 300, E_TC_WIN_COLOR_BLUE, "TCWin_Normal_child");
+   makeTransientBelowChild(&tw_child2, tw_parent, 110, 110, 300, 300, E_TC_WIN_COLOR_GREEN, "TCWin_Normal_child2");
+
+   // Expected stack res:
+   // [Top] tw_parent -> tw_child -> tw_child2 -> tw_base [Bottom]
+
+
+   //////////////////////////////////////////////////
+   // Lower tw_parent
+   //////////////////////////////////////////////////
+   etRunner::get().setWinStack(tw_parent, NULL, EINA_FALSE);
+   ASSERT_EVENT(tw_parent, E_TC_EVENT_TYPE_STACK_LOWER);
+
+   list = etRunner::get().getWinInfoList();
+   ASSERT_TRUE(list != NULL);
+
+   // Expected stack res:
+   // [Top] tw_base -> ... -> tw_parent -> tw_child -> tw_child2 [Bottom]
+
+   // In this case,
+   // To check validation of stack order, we have to check the stack from bottom to top
+   // [Bottom] tw_child2 <- tw_child <- tw_parent <- ...  <- tw_base [Top]
+
+   EINA_LIST_CAST_REVERSE_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
+          {
+             if (tw->layer > 200)
+               {
+                  ASSERT_EQ(tw_above->native_win, tw_base->native_win);
+                  pass_count++;
+                  break;
+               }
+             else
+               tw_above = tw;
+          }
+     }
+   etRunner::get().freeWinInfoList(list);
+
+   ASSERT_EQ(4, pass_count);
+   //ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
+}
+
+TEST_F(etTestTransientForBelow, transient_for_below_multi_parent)
+{
+   etWin *tw = NULL;
+   etWin *tw_child = NULL;
+   etWin *tw_child2 = NULL;
+   etWin *tw_child3 = NULL;
+
+   etWin *tw_parent2 = NULL;
+   etWin *tw_parent2_child = NULL;
+   etWin *tw_parent2_child2 = NULL;
+   Eina_List *list = NULL, *l = NULL;
+   int pass_count = 0;
+
+   // init TC window, show=true, geom=true
+   initTC(EINA_TRUE);
+
+   makeTransientBelowChild(&tw_child, tw_parent, 80, 80, 300, 300, E_TC_WIN_COLOR_BLUE, "TCWin_Normal_child");
+   makeTransientBelowChild(&tw_child2, tw_parent, 110, 110, 300, 300, E_TC_WIN_COLOR_GREEN, "TCWin_Normal_child2");
+   makeTransientBelowChild(&tw_child3, tw_parent, 130, 130, 300, 300, E_TC_WIN_COLOR_YELLOW, "TCWin_Normal_child3");
+
+   // Expected stack res:
+   // [Top] tw_parent -> tw_child -> tw_child2 -> tw_child3 -> tw_base [Bottom]
+
+   tw_parent2 = initNormalWin("TCWin_Normal_parent2", 0, 300, 400, 400, E_TC_WIN_COLOR_ORANGE);
+   ASSERT_TRUE(tw_parent2 != NULL) << "failed to initiation window";
+   showTCWin(tw_parent2);
+   ASSERT_VIS_ON(tw_parent2);
+
+   makeTransientBelowChild(&tw_parent2_child, tw_parent2, 20, 320, 400, 400, E_TC_WIN_COLOR_CYAN, "TCWin_Normal_child");
+   makeTransientBelowChild(&tw_parent2_child2, tw_parent2, 40, 340, 400, 400, E_TC_WIN_COLOR_INDIGO, "TCWin_Normal_child2");
+
+   // Expected stack res:
+   // [Top] tw_parent2 -> tw_parent2_child -> tw_parent2_child2 -> tw_parent -> tw_child -> tw_child2 -> tw_child3 -> 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_parent2->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 1)
+          {
+             ASSERT_EQ(tw->native_win, tw_parent2_child->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 2)
+          {
+             ASSERT_EQ(tw->native_win, tw_parent2_child2->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 3)
+          {
+             ASSERT_EQ(tw->native_win, tw_parent->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 4)
+          {
+             ASSERT_EQ(tw->native_win, tw_child->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 5)
+          {
+             ASSERT_EQ(tw->native_win, tw_child2->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 6)
+          {
+             ASSERT_EQ(tw->native_win, tw_child3->native_win);
+             pass_count++;
+             continue;
+          }
+        else
+          {
+             ASSERT_EQ(tw->native_win, tw_base->native_win);
+             pass_count++;
+          }
+
+        break;
+     }
+   etRunner::get().freeWinInfoList(list);
+
+   ASSERT_EQ(8, pass_count);
+   //ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
+}
+
+TEST_F(etTestTransientForBelow, transient_for_below_multi_parent_raise_parent)
+{
+   etWin *tw = NULL;
+   etWin *tw_child = NULL;
+   etWin *tw_child2 = NULL;
+   etWin *tw_child3 = NULL;
+
+   etWin *tw_parent2 = NULL;
+   etWin *tw_parent2_child = NULL;
+   etWin *tw_parent2_child2 = NULL;
+   Eina_List *list = NULL, *l = NULL;
+   int pass_count = 0;
+
+   // init TC window, show=true, geom=true
+   initTC(EINA_TRUE);
+
+   makeTransientBelowChild(&tw_child, tw_parent, 80, 80, 300, 300, E_TC_WIN_COLOR_BLUE, "TCWin_Normal_child");
+   makeTransientBelowChild(&tw_child2, tw_parent, 110, 110, 300, 300, E_TC_WIN_COLOR_GREEN, "TCWin_Normal_child2");
+   makeTransientBelowChild(&tw_child3, tw_parent, 130, 130, 300, 300, E_TC_WIN_COLOR_YELLOW, "TCWin_Normal_child3");
+
+   // Expected stack res:
+   // [Top] tw_parent -> tw_child -> tw_child2 -> tw_child3 -> tw_base [Bottom]
+
+
+   tw_parent2 = initNormalWin("TCWin_Normal_parent2", 0, 300, 400, 400, E_TC_WIN_COLOR_ORANGE);
+   ASSERT_TRUE(tw_parent2 != NULL) << "failed to initiation window";
+   showTCWin(tw_parent2);
+   ASSERT_VIS_ON(tw_parent2);
+
+   makeTransientBelowChild(&tw_parent2_child, tw_parent2, 20, 320, 400, 400, E_TC_WIN_COLOR_CYAN, "TCWin_Normal_child");
+   makeTransientBelowChild(&tw_parent2_child2, tw_parent2, 40, 340, 400, 400, E_TC_WIN_COLOR_INDIGO, "TCWin_Normal_child2");
+
+   // Expected stack res:
+   // [Top] tw_parent2 -> tw_parent2_child -> tw_parent2_child2 -> tw_parent -> tw_child -> tw_child2 -> tw_child3 -> tw_base [Bottom]
+
+
+   //////////////////////////////////////////////////
+   // 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_parent -> tw_child -> tw_child2 -> tw_child3 -> tw_parent2 -> tw_parent2_child -> tw_parent2_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 if (pass_count == 3)
+          {
+             ASSERT_EQ(tw->native_win, tw_child3->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 4)
+          {
+             ASSERT_EQ(tw->native_win, tw_parent2->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 5)
+          {
+             ASSERT_EQ(tw->native_win, tw_parent2_child->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 6)
+          {
+             ASSERT_EQ(tw->native_win, tw_parent2_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(8, pass_count);
+   //ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
+}
+
+TEST_F(etTestTransientForBelow, transient_for_below_multi_parent_lower_parent)
+{
+   etWin *tw = NULL;
+   etWin *tw_child = NULL;
+   etWin *tw_child2 = NULL;
+   etWin *tw_child3 = NULL;
+
+   etWin *tw_parent2 = NULL;
+   etWin *tw_parent2_child = NULL;
+   etWin *tw_parent2_child2 = NULL;
+   Eina_List *list = NULL, *l = NULL;
+   int pass_count = 0;
+
+   // init TC window, show=true, geom=true
+   initTC(EINA_TRUE);
+
+   makeTransientBelowChild(&tw_child, tw_parent, 80, 80, 300, 300, E_TC_WIN_COLOR_BLUE, "TCWin_Normal_child");
+   makeTransientBelowChild(&tw_child2, tw_parent, 110, 110, 300, 300, E_TC_WIN_COLOR_GREEN, "TCWin_Normal_child2");
+   makeTransientBelowChild(&tw_child3, tw_parent, 130, 130, 300, 300, E_TC_WIN_COLOR_YELLOW, "TCWin_Normal_child3");
+
+   // Expected stack res:
+   // [Top] tw_parent -> tw_child -> tw_child2 -> tw_child3 -> tw_base [Bottom]
+
+
+   tw_parent2 = initNormalWin("TCWin_Normal_parent2", 0, 300, 400, 400, E_TC_WIN_COLOR_ORANGE);
+   ASSERT_TRUE(tw_parent2 != NULL) << "failed to initiation window";
+   showTCWin(tw_parent2);
+   ASSERT_VIS_ON(tw_parent2);
+
+   makeTransientBelowChild(&tw_parent2_child, tw_parent2, 20, 320, 400, 400, E_TC_WIN_COLOR_CYAN, "TCWin_Normal_child");
+   makeTransientBelowChild(&tw_parent2_child2, tw_parent2, 40, 340, 400, 400, E_TC_WIN_COLOR_INDIGO, "TCWin_Normal_child2");
+
+   // Expected stack res:
+   // [Top] tw_parent2 -> tw_parent2_child -> tw_parent2_child2 -> tw_parent -> tw_child -> tw_child2 -> tw_child3 -> tw_base [Bottom]
+
+
+   //////////////////////////////////////////////////
+   // Lower tw_parent2
+   //////////////////////////////////////////////////
+   etRunner::get().setWinStack(tw_parent2, NULL, EINA_FALSE);
+   ASSERT_EVENT(tw_parent2, E_TC_EVENT_TYPE_STACK_LOWER);
+
+   // Expected stack res:
+   // [Top] tw_parent -> tw_child -> tw_child2 -> tw_child3 -> tw_base -> ... -> tw_parent2 -> tw_parent2_child -> tw_parent2_child2 [Bottom]
+
+   // In this case,
+   // To check validation of stack order, we have to check 2 steps.
+   // First, check window from top to bottom until meet tw_base.
+   // Second, check window from bottom to top until tw_parent2.
+
+   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 if (pass_count == 3)
+          {
+             ASSERT_EQ(tw->native_win, tw_child3->native_win);
+             pass_count++;
+             continue;
+          }
+        else
+          {
+             ASSERT_EQ(tw->native_win, tw_base->native_win);
+             pass_count++;
+          }
+
+        break;
+     }
+   etRunner::get().freeWinInfoList(list);
+
+   // [Bottom] tw_parent2_child2 <- tw_parent2_child <- tw_parent2 <- ... <- tw_base <- tw_child3 <- tw_child2 <- tw_child <- tw_parent [Top]
+   list = etRunner::get().getWinInfoList();
+   ASSERT_TRUE(list != NULL);
+   EINA_LIST_CAST_REVERSE_FOREACH(list, l, tw, etWin*)
+     {
+        if (tw->layer < 200) continue;
+
+        if (pass_count == 5)
+          {
+             ASSERT_EQ(tw->native_win, tw_parent2_child2->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 6)
+          {
+             ASSERT_EQ(tw->native_win, tw_parent2_child->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 7)
+          {
+             ASSERT_EQ(tw->native_win, tw_parent2->native_win);
+             pass_count++;
+             break;
+          }
+     }
+   etRunner::get().freeWinInfoList(list);
+
+   ASSERT_EQ(8, pass_count);
+   //ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
+}
+
+TEST_F(etTestTransientForBelow, transient_for_below_multi_parent_raise_child)
+{
+   etWin *tw = NULL;
+   etWin *tw_child = NULL;
+   etWin *tw_child2 = NULL;
+   etWin *tw_child3 = NULL;
+
+   etWin *tw_parent2 = NULL;
+   etWin *tw_parent2_child = NULL;
+   etWin *tw_parent2_child2 = NULL;
+   Eina_List *list = NULL, *l = NULL;
+   int pass_count = 0;
+
+   // init TC window, show=true, geom=true
+   initTC(EINA_TRUE);
+
+   makeTransientBelowChild(&tw_child, tw_parent, 80, 80, 300, 300, E_TC_WIN_COLOR_BLUE, "TCWin_Normal_child");
+   makeTransientBelowChild(&tw_child2, tw_parent, 110, 110, 300, 300, E_TC_WIN_COLOR_GREEN, "TCWin_Normal_child2");
+   makeTransientBelowChild(&tw_child3, tw_parent, 130, 130, 300, 300, E_TC_WIN_COLOR_YELLOW, "TCWin_Normal_child3");
+
+   tw_parent2 = initNormalWin("TCWin_Normal_parent2", 0, 300, 400, 400, E_TC_WIN_COLOR_ORANGE);
+   ASSERT_TRUE(tw_parent2 != NULL) << "failed to initiation window";
+   showTCWin(tw_parent2);
+   ASSERT_VIS_ON(tw_parent2);
+
+   makeTransientBelowChild(&tw_parent2_child, tw_parent2, 20, 320, 400, 400, E_TC_WIN_COLOR_CYAN, "TCWin_Normal_child");
+   makeTransientBelowChild(&tw_parent2_child2, tw_parent2, 40, 340, 400, 400, E_TC_WIN_COLOR_INDIGO, "TCWin_Normal_child2");
+
+   // Expected stack res:
+   // [Top] tw_parent2 -> tw_parent2_child -> tw_parent2_child2 -> tw_parent -> tw_child -> tw_child2 -> tw_child3 -> tw_base [Bottom]
+
+
+   //////////////////////////////////////////////////
+   // Raise tw_child3
+   //////////////////////////////////////////////////
+   etRunner::get().setWinStack(tw_child3, NULL, EINA_TRUE);
+   ASSERT_EVENT(tw_child3, E_TC_EVENT_TYPE_STACK_RAISE);
+
+   // Expected stack res:
+   // [Top] tw_parent2 -> tw_parent2_child -> tw_parent2_child2 -> tw_parent -> tw_child3 -> 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_parent2->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 1)
+          {
+             ASSERT_EQ(tw->native_win, tw_parent2_child->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 2)
+          {
+             ASSERT_EQ(tw->native_win, tw_parent2_child2->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 3)
+          {
+             ASSERT_EQ(tw->native_win, tw_parent->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 4)
+          {
+             ASSERT_EQ(tw->native_win, tw_child3->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 5)
+          {
+             ASSERT_EQ(tw->native_win, tw_child->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 6)
+          {
+             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(8, pass_count);
+
+   //////////////////////////////////////////////////
+   // Raise tw_child3 again
+   //////////////////////////////////////////////////
+   etRunner::get().setWinStack(tw_child3, NULL, EINA_TRUE);
+
+   // Expected stack res:
+   // [Top] tw_parent2 -> tw_parent2_child -> tw_parent2_child2 -> tw_parent -> tw_child3 -> tw_child -> tw_child2 -> 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_parent2->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 1)
+          {
+             ASSERT_EQ(tw->native_win, tw_parent2_child->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 2)
+          {
+             ASSERT_EQ(tw->native_win, tw_parent2_child2->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 3)
+          {
+             ASSERT_EQ(tw->native_win, tw_parent->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 4)
+          {
+             ASSERT_EQ(tw->native_win, tw_child3->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 5)
+          {
+             ASSERT_EQ(tw->native_win, tw_child->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 6)
+          {
+             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(8, pass_count);
+
+
+   //////////////////////////////////////////////////
+   // Raise tw_child
+   //////////////////////////////////////////////////
+   etRunner::get().setWinStack(tw_child, NULL, EINA_TRUE);
+   ASSERT_EVENT(tw_child, E_TC_EVENT_TYPE_STACK_RAISE);
+
+   // Expected stack res:
+   // [Top] tw_parent2 -> tw_parent2_child -> tw_parent2_child2 -> tw_parent -> tw_child -> tw_child3 -> tw_child2 -> 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_parent2->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 1)
+          {
+             ASSERT_EQ(tw->native_win, tw_parent2_child->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 2)
+          {
+             ASSERT_EQ(tw->native_win, tw_parent2_child2->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 3)
+          {
+             ASSERT_EQ(tw->native_win, tw_parent->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 4)
+          {
+             ASSERT_EQ(tw->native_win, tw_child->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 5)
+          {
+             ASSERT_EQ(tw->native_win, tw_child3->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 6)
+          {
+             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(8, pass_count);
+
+
+   //////////////////////////////////////////////////
+   // Raise tw_parent2_child2
+   //////////////////////////////////////////////////
+   etRunner::get().setWinStack(tw_parent2_child2, NULL, EINA_TRUE);
+   ASSERT_EVENT(tw_parent2_child2, E_TC_EVENT_TYPE_STACK_RAISE);
+
+   // Expected stack res:
+   // [Top] tw_parent2 -> tw_parent2_child2 -> tw_parent2_child -> tw_parent -> tw_child -> tw_child3 -> tw_child2 -> 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_parent2->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 1)
+          {
+             ASSERT_EQ(tw->native_win, tw_parent2_child2->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 2)
+          {
+             ASSERT_EQ(tw->native_win, tw_parent2_child->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 3)
+          {
+             ASSERT_EQ(tw->native_win, tw_parent->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 4)
+          {
+             ASSERT_EQ(tw->native_win, tw_child->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 5)
+          {
+             ASSERT_EQ(tw->native_win, tw_child3->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 6)
+          {
+             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(8, pass_count);
+   //ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
+}
+
+TEST_F(etTestTransientForBelow, transient_for_below_multi_parent_raise_child_and_parent)
+{
+   etWin *tw = NULL;
+   etWin *tw_child = NULL;
+   etWin *tw_child2 = NULL;
+   etWin *tw_child3 = NULL;
+
+   etWin *tw_parent2 = NULL;
+   etWin *tw_parent2_child = NULL;
+   etWin *tw_parent2_child2 = NULL;
+   Eina_List *list = NULL, *l = NULL;
+   int pass_count = 0;
+
+   // init TC window, show=true, geom=true
+   initTC(EINA_TRUE);
+
+   makeTransientBelowChild(&tw_child, tw_parent, 80, 80, 300, 300, E_TC_WIN_COLOR_BLUE, "TCWin_Normal_child");
+   makeTransientBelowChild(&tw_child2, tw_parent, 110, 110, 300, 300, E_TC_WIN_COLOR_GREEN, "TCWin_Normal_child2");
+   makeTransientBelowChild(&tw_child3, tw_parent, 130, 130, 300, 300, E_TC_WIN_COLOR_YELLOW, "TCWin_Normal_child3");
+
+   tw_parent2 = initNormalWin("TCWin_Normal_parent2", 0, 300, 400, 400, E_TC_WIN_COLOR_ORANGE);
+   ASSERT_TRUE(tw_parent2 != NULL) << "failed to initiation window";
+   showTCWin(tw_parent2);
+   ASSERT_VIS_ON(tw_parent2);
+
+   makeTransientBelowChild(&tw_parent2_child, tw_parent2, 20, 320, 400, 400, E_TC_WIN_COLOR_CYAN, "TCWin_Normal_child");
+   makeTransientBelowChild(&tw_parent2_child2, tw_parent2, 40, 340, 400, 400, E_TC_WIN_COLOR_INDIGO, "TCWin_Normal_child2");
+
+   // Expected stack res:
+   // [Top] tw_parent2 -> tw_parent2_child -> tw_parent2_child2 -> tw_parent -> tw_child -> tw_child2 -> tw_child3 -> tw_base [Bottom]
+
+
+   //////////////////////////////////////////////////
+   // Raise tw_child3
+   //////////////////////////////////////////////////
+   etRunner::get().setWinStack(tw_child3, NULL, EINA_TRUE);
+   ASSERT_EVENT(tw_child3, E_TC_EVENT_TYPE_STACK_RAISE);
+
+   // Expected stack res:
+   // [Top] tw_parent2 -> tw_parent2_child -> tw_parent2_child2 -> tw_parent -> tw_child3 -> 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_parent2->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 1)
+          {
+             ASSERT_EQ(tw->native_win, tw_parent2_child->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 2)
+          {
+             ASSERT_EQ(tw->native_win, tw_parent2_child2->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 3)
+          {
+             ASSERT_EQ(tw->native_win, tw_parent->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 4)
+          {
+             ASSERT_EQ(tw->native_win, tw_child3->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 5)
+          {
+             ASSERT_EQ(tw->native_win, tw_child->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 6)
+          {
+             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(8, pass_count);
+
+
+   //////////////////////////////////////////////////
+   // 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_parent -> tw_child3 -> tw_child -> tw_child2 -> tw_parent2 -> tw_parent2_child -> tw_parent2_child2 -> tw_base [Bottom]
+
+   pass_count = 0;
+   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_child3->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 2)
+          {
+             ASSERT_EQ(tw->native_win, tw_child->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 3)
+          {
+             ASSERT_EQ(tw->native_win, tw_child2->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 4)
+          {
+             ASSERT_EQ(tw->native_win, tw_parent2->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 5)
+          {
+             ASSERT_EQ(tw->native_win, tw_parent2_child->native_win);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 6)
+          {
+             ASSERT_EQ(tw->native_win, tw_parent2_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(8, pass_count);
+   //ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
+}