0004_transient_for: added tests for noti layer and always_on_top 16/258216/2
authorJunseok, Kim <juns.kim@samsung.com>
Fri, 7 May 2021 10:21:58 +0000 (19:21 +0900)
committerJunseok, Kim <juns.kim@samsung.com>
Wed, 12 May 2021 09:07:55 +0000 (18:07 +0900)
Change-Id: Ieb38ed76d46d9ac7528e54ac4261005adaea7f8b
Signed-off-by: Junseok, Kim <juns.kim@samsung.com>
data/img/etTestTransientFor/transient_for_always_on_top_basic.png [new file with mode: 0644]
data/img/etTestTransientFor/transient_for_always_on_top_basic2.png [new file with mode: 0644]
data/img/etTestTransientFor/transient_for_layer_change.png [new file with mode: 0644]
data/img/etTestTransientFor/transient_for_layer_revert.png [new file with mode: 0644]
src/testcase/0004_transient_for.cpp

diff --git a/data/img/etTestTransientFor/transient_for_always_on_top_basic.png b/data/img/etTestTransientFor/transient_for_always_on_top_basic.png
new file mode 100644 (file)
index 0000000..db08f56
Binary files /dev/null and b/data/img/etTestTransientFor/transient_for_always_on_top_basic.png differ
diff --git a/data/img/etTestTransientFor/transient_for_always_on_top_basic2.png b/data/img/etTestTransientFor/transient_for_always_on_top_basic2.png
new file mode 100644 (file)
index 0000000..db08f56
Binary files /dev/null and b/data/img/etTestTransientFor/transient_for_always_on_top_basic2.png differ
diff --git a/data/img/etTestTransientFor/transient_for_layer_change.png b/data/img/etTestTransientFor/transient_for_layer_change.png
new file mode 100644 (file)
index 0000000..db08f56
Binary files /dev/null and b/data/img/etTestTransientFor/transient_for_layer_change.png differ
diff --git a/data/img/etTestTransientFor/transient_for_layer_revert.png b/data/img/etTestTransientFor/transient_for_layer_revert.png
new file mode 100644 (file)
index 0000000..01b39ba
Binary files /dev/null and b/data/img/etTestTransientFor/transient_for_layer_revert.png differ
index de66acb..605c3d5 100644 (file)
@@ -341,3 +341,331 @@ TEST_F(etTestTransientFor, transient_for_above)
 
    ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
 }
+
+TEST_F(etTestTransientFor, transient_for_layer_change)
+{
+   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
+   res = etRunner::get().setWinTransientFor(tw_noti, tw_parent, EINA_TRUE);
+   ASSERT_TRUE(res);
+   ASSERT_EVENT(tw_noti, E_TC_EVENT_TYPE_STACK_CHANGED);
+
+   // set transient_for tw_child
+   res = etRunner::get().setWinTransientFor(tw_child, tw_parent, EINA_TRUE);
+   ASSERT_TRUE(res);
+   etRunner::get().work(0.1); // wait for activate done. It does not change stack.
+
+   // Expected stack res:
+   // [Top] tw_base -> tw_child -> tw_noti -> 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 if (pass_count == 2)
+          {
+             ASSERT_EQ(tw->native_win, tw_noti->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);
+}
+
+TEST_F(etTestTransientFor, transient_for_layer_revert)
+{
+   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
+   res = etRunner::get().setWinTransientFor(tw_noti, tw_parent, EINA_TRUE);
+   ASSERT_TRUE(res);
+   ASSERT_EVENT(tw_noti, E_TC_EVENT_TYPE_STACK_CHANGED);
+
+   // set transient_for tw_child
+   res = etRunner::get().setWinTransientFor(tw_child, tw_parent, EINA_TRUE);
+   ASSERT_TRUE(res);
+   etRunner::get().work(0.1); // wait for activate done. It does not change stack.
+
+   // Expected stack res:
+   // [Top] tw_base -> tw_child -> tw_noti -> 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 if (pass_count == 2)
+          {
+             ASSERT_EQ(tw->native_win, tw_noti->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);
+   pass_count = 0;
+
+   // unset transient_for tw_noti
+   res = etRunner::get().setWinTransientFor(tw_noti, nullptr, EINA_FALSE);
+   ASSERT_TRUE(res);
+   ASSERT_EVENT(tw_noti, 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_base->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);
+}
+
+TEST_F(etTestTransientFor, transient_for_always_on_top_basic)
+{
+   etWin *tw = NULL;
+   Eina_Bool res = EINA_FALSE;
+   Eina_List *list = NULL, *l = NULL;
+   int pass_count = 0;
+   etWin *tw_aot;
+
+   // init TC window, show=true, geom=true
+   initTC(EINA_TRUE, EINA_TRUE);
+
+   // window for always_on_top
+   tw_aot = initNormalWin("TCWin_Always_Top", EINA_TRUE);
+   etRunner::get().addAuxHint(tw_aot, 486, "wm.policy.win.transient_for.always_on_top", "1");
+   showTCWin(tw_aot);
+   ASSERT_VIS_ON(tw_aot);
+
+   // set transient_for tw_aot
+   res = etRunner::get().setWinTransientFor(tw_aot, tw_parent, EINA_TRUE);
+   ASSERT_TRUE(res);
+   etRunner::get().work(0.1); // wait for activate done. It does not change stack.
+
+   // set transient_for tw_child
+   res = etRunner::get().setWinTransientFor(tw_child, tw_parent, EINA_TRUE);
+   ASSERT_TRUE(res);
+   etRunner::get().work(0.1); // wait for activate done. It does not change stack.
+
+   // Expected stack res:
+   // [Top] tw_base -> tw_aot -> 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_aot->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);
+}
+
+TEST_F(etTestTransientFor, transient_for_always_on_top_basic2)
+{
+   etWin *tw = NULL;
+   Eina_Bool res = EINA_FALSE;
+   Eina_List *list = NULL, *l = NULL;
+   int pass_count = 0;
+   etWin *tw_aot;
+
+   // init TC window, show=true, geom=true
+   initTC(EINA_TRUE, EINA_TRUE);
+
+   // window for always_on_top
+   tw_aot = initNormalWin("TCWin_Always_Top", EINA_TRUE);
+   etRunner::get().addAuxHint(tw_aot, 486, "wm.policy.win.transient_for.always_on_top", "1");
+   showTCWin(tw_aot);
+   ASSERT_VIS_ON(tw_aot);
+
+   // set transient_for tw_child
+   res = etRunner::get().setWinTransientFor(tw_child, tw_parent, EINA_TRUE);
+   ASSERT_TRUE(res);
+   etRunner::get().work(0.1); // wait for activate done. It does not change stack.
+
+   // set transient_for tw_aot
+   res = etRunner::get().setWinTransientFor(tw_aot, tw_parent, EINA_TRUE);
+   ASSERT_TRUE(res);
+   etRunner::get().work(0.1); // wait for activate done. It does not change stack.
+
+   // Expected stack res:
+   // [Top] tw_base -> tw_aot -> 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_aot->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);
+}
\ No newline at end of file