add alpha_change test
[platform/core/uifw/e-tizen-testcase.git] / src / testcase / 0014_transient_for_below.cpp
index df48363..2f7e353 100644 (file)
@@ -13,16 +13,19 @@ class etTestTransientForBelow : public ::etTCBase
     std::string testCaseName;
     std::string testName;
 
-    void initTC(Eina_Bool show_win);
-    void makeTransientBelowChild(etWin **win, etWin *parent, int x, int y, int w, int h, E_TC_Win_Color color, const char *name);
+    void initTC(Eina_Bool show_win, Eina_Bool partial = EINA_TRUE);
+    void makeTransientBelowChild(etWin **win, etWin *parent, int x, int y, int w, int h, E_TC_Win_Color color, const char *name, Eina_Bool partial = EINA_TRUE);
 };
 
 void
-etTestTransientForBelow::initTC(Eina_Bool show_win)
+etTestTransientForBelow::initTC(Eina_Bool show_win, Eina_Bool partial)
 {
    const ::testing::TestInfo *const test_info = ::testing::UnitTest::GetInstance()->current_test_info();
 
-   tw_base = initNormalWin("TCWin_Normal_normal", 0, 0, 480, 800, E_TC_WIN_COLOR_BLACK);
+   if (partial)
+     tw_base = initNormalWin("TCWin_Normal_normal", 0, 0, 480, 800, E_TC_WIN_COLOR_BLACK);
+   else
+     tw_base = initNormalWin("TCWin_Normal_normal", EINA_FALSE, E_TC_WIN_COLOR_BLACK);
    if (show_win)
      {
         showTCWin(tw_base);
@@ -30,7 +33,10 @@ etTestTransientForBelow::initTC(Eina_Bool show_win)
      }
    ASSERT_TRUE(tw_base != NULL) << "failed to initiation window";
 
-   tw_parent = initNormalWin("TCWin_Normal_parent", 50, 50, 300, 300, E_TC_WIN_COLOR_RED);
+   if (partial)
+     tw_parent = initNormalWin("TCWin_Normal_parent", 50, 50, 300, 300, E_TC_WIN_COLOR_RED);
+   else
+     tw_parent = initNormalWin("TCWin_Normal_parent", EINA_FALSE, E_TC_WIN_COLOR_RED);
    if (show_win)
      {
         showTCWin(tw_parent);
@@ -43,12 +49,15 @@ etTestTransientForBelow::initTC(Eina_Bool show_win)
 }
 
 void
-etTestTransientForBelow::makeTransientBelowChild(etWin **win, etWin *parent, int x, int y, int w, int h, E_TC_Win_Color color, const char *name)
+etTestTransientForBelow::makeTransientBelowChild(etWin **win, etWin *parent, int x, int y, int w, int h, E_TC_Win_Color color, const char *name, Eina_Bool partial)
 {
    Eina_Bool res;
    etWin *temp_win = NULL;
 
-   temp_win = initNormalWin(name, x, y, w, h, color);
+   if (partial)
+     temp_win = initNormalWin(name, x, y, w, h, color);
+   else
+     temp_win = initNormalWin(name, EINA_FALSE, color);
    ASSERT_TRUE(temp_win != NULL) << "failed to create window";
 
    res = etRunner::get().setWinTransientForBelow(temp_win, parent, EINA_TRUE);
@@ -56,7 +65,8 @@ etTestTransientForBelow::makeTransientBelowChild(etWin **win, etWin *parent, int
    etRunner::get().work(0.1); // wait for activate done. It does not change stack.
 
    showTCWin(temp_win);
-   ASSERT_VIS_ON(temp_win);
+   if (partial)
+     ASSERT_VIS_ON(temp_win);
 
    *win = temp_win;
 }
@@ -526,6 +536,245 @@ TEST_F(etTestTransientForBelow, transient_for_below_lower2)
    //ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
 }
 
+TEST_F(etTestTransientForBelow, transient_for_below_parent_change_alpha)
+{
+   etWin *tw = NULL;
+   etWin *tw_child = NULL;
+   etWin *tw_child2 = NULL;
+   Eina_List *list = NULL, *l = NULL;
+   int pass_count = 0;
+
+   // init TC window, show=true, geom=false
+   initTC(EINA_TRUE, EINA_FALSE);
+
+   // make below child : user_geo=false
+   makeTransientBelowChild(&tw_child, tw_parent, 80, 80, 300, 300, E_TC_WIN_COLOR_BLUE, "TCWin_Normal_child", EINA_FALSE);
+   makeTransientBelowChild(&tw_child2, tw_parent, 110, 110, 300, 300, E_TC_WIN_COLOR_GREEN, "TCWin_Normal_child2", EINA_FALSE);
+
+   // Expected stack res:
+   // [Top] tw_parent -> tw_child (iconified) -> tw_child2 (iconified) -> 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);
+             ASSERT_TRUE(tw->Vis.obj);
+             ASSERT_FALSE(tw->iconic.set);
+             ASSERT_FALSE(tw->iconic.by_client);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 1)
+          {
+             ASSERT_EQ(tw->native_win, tw_child->native_win);
+             ASSERT_FALSE(tw->Vis.obj);
+             ASSERT_TRUE(tw->iconic.set);
+             ASSERT_FALSE(tw->iconic.by_client);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 2)
+          {
+             ASSERT_EQ(tw->native_win, tw_child2->native_win);
+             ASSERT_FALSE(tw->Vis.obj);
+             ASSERT_TRUE(tw->iconic.set);
+             ASSERT_FALSE(tw->iconic.by_client);
+             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);
+
+
+   // change parent's alpha
+   elm_win_alpha_set(tw_parent->elm_win, EINA_TRUE);
+   etRunner::get().work(0.5);
+
+   // Expected stack res:
+   // [Top] tw_parent -> tw_child (uniconified) -> tw_child2 (iconified) -> 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_parent->native_win);
+             ASSERT_TRUE(tw->Vis.obj);
+             ASSERT_FALSE(tw->iconic.set);
+             ASSERT_FALSE(tw->iconic.by_client);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 1)
+          {
+             ASSERT_EQ(tw->native_win, tw_child->native_win);
+             ASSERT_TRUE(tw->Vis.obj);
+             ASSERT_FALSE(tw->iconic.set);
+             ASSERT_FALSE(tw->iconic.by_client);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 2)
+          {
+             ASSERT_EQ(tw->native_win, tw_child2->native_win);
+             ASSERT_FALSE(tw->Vis.obj);
+             ASSERT_TRUE(tw->iconic.set);
+             ASSERT_FALSE(tw->iconic.by_client);
+             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(etTestTransientForBelow, transient_for_below_parent_change_alpha2)
+{
+   etWin *tw = NULL;
+   etWin *tw_child = NULL;
+   etWin *tw_child2 = NULL;
+   Eina_List *list = NULL, *l = NULL;
+   int pass_count = 0;
+
+   // init TC window, show=true, geom=false
+   initTC(EINA_TRUE, EINA_FALSE);
+
+   // make below child : user_geo=false
+   makeTransientBelowChild(&tw_child, tw_parent, 80, 80, 300, 300, E_TC_WIN_COLOR_BLUE, "TCWin_Normal_child", EINA_FALSE);
+   elm_win_alpha_set(tw_child->elm_win, EINA_TRUE);
+   makeTransientBelowChild(&tw_child2, tw_parent, 110, 110, 300, 300, E_TC_WIN_COLOR_GREEN, "TCWin_Normal_child2", EINA_FALSE);
+
+   // Expected stack res:
+   // [Top] tw_parent -> tw_child (iconified) -> tw_child2 (iconified) -> 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);
+             ASSERT_TRUE(tw->Vis.obj);
+             ASSERT_FALSE(tw->iconic.set);
+             ASSERT_FALSE(tw->iconic.by_client);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 1)
+          {
+             ASSERT_EQ(tw->native_win, tw_child->native_win);
+             ASSERT_FALSE(tw->Vis.obj);
+             ASSERT_TRUE(tw->iconic.set);
+             ASSERT_FALSE(tw->iconic.by_client);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 2)
+          {
+             ASSERT_EQ(tw->native_win, tw_child2->native_win);
+             ASSERT_FALSE(tw->Vis.obj);
+             ASSERT_TRUE(tw->iconic.set);
+             ASSERT_FALSE(tw->iconic.by_client);
+             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);
+
+
+   // change parent's alpha
+   elm_win_alpha_set(tw_parent->elm_win, EINA_TRUE);
+   etRunner::get().work(0.5);
+
+   // Expected stack res:
+   // [Top] tw_parent -> tw_child (uniconified) -> tw_child2 (iconified) -> 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_parent->native_win);
+             ASSERT_TRUE(tw->Vis.obj);
+             ASSERT_FALSE(tw->iconic.set);
+             ASSERT_FALSE(tw->iconic.by_client);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 1)
+          {
+             ASSERT_EQ(tw->native_win, tw_child->native_win);
+             ASSERT_TRUE(tw->Vis.obj);
+             ASSERT_FALSE(tw->iconic.set);
+             ASSERT_FALSE(tw->iconic.by_client);
+             pass_count++;
+             continue;
+          }
+        else if (pass_count == 2)
+          {
+             ASSERT_EQ(tw->native_win, tw_child2->native_win);
+             ASSERT_TRUE(tw->Vis.obj);
+             ASSERT_FALSE(tw->iconic.set);
+             ASSERT_FALSE(tw->iconic.by_client);
+             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(etTestTransientForBelow, transient_for_below_parent_lower)
 {
    etWin *tw = NULL;