[3.0] Add key grab/ungrab API for Tizen (X11/Wayland)
[platform/core/uifw/dali-adaptor.git] / automated-tests / src / dali-adaptor / utc-Dali-KeyGrab.cpp
1 /*
2  * Copyright (c) 2014 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17
18 // EXTERNAL INCLUDES
19 #include <map>
20 #include <string.h>
21 #include <iostream>
22
23 // CLASS HEADER
24 #include <stdlib.h>
25 #include <iostream>
26 #include <dali.h>
27 #include <dali-test-suite-utils.h>
28 #include <dali/public-api/adaptor-framework/key-grab.h>
29
30 extern int gArgc;
31 extern char ** gArgv;
32
33 using namespace Dali;
34
35 void utc_dali_adaptor_keygrab_startup(void)
36 {
37   test_return_value = TET_UNDEF;
38 }
39
40 void utc_dali_adaptor_keygrab_cleanup(void)
41 {
42   test_return_value = TET_PASS;
43 }
44
45 // Copied from key-impl.h
46 struct KeyLookup
47 {
48   const char* keyName;      ///< X string representation
49   const KEY   daliKeyCode;  ///< Dali Enum Representation
50   const bool  deviceButton; ///< Whether the key is from a button on the device
51 };
52
53 KeyLookup TestKeyLookupTable[]=
54 {
55   { "XF86Camera",            DALI_KEY_CAMERA,          false },
56   { "XF86Camera_Full",       DALI_KEY_CONFIG,          false },
57   { "XF86PowerOff",          DALI_KEY_POWER,           true  },
58   { "Cancel",                DALI_KEY_CANCEL,          false },
59   { "XF86AudioStop",         DALI_KEY_STOP_CD,         false },
60   { "XF86AudioPause",        DALI_KEY_PAUSE_CD,        false },
61   { "XF86AudioNext",         DALI_KEY_NEXT_SONG,       false },
62   { "XF86AudioPrev",         DALI_KEY_PREVIOUS_SONG,   false },
63   { "XF86AudioRewind",       DALI_KEY_REWIND,          false },
64   { "XF86AudioForward",      DALI_KEY_FASTFORWARD,     false },
65   { "XF86AudioMedia",        DALI_KEY_MEDIA,           false },
66   { "XF86AudioPlayPause",    DALI_KEY_PLAY_PAUSE,      false },
67   { "XF86AudioMute",         DALI_KEY_MUTE,            false },
68   { "XF86HomePage",          DALI_KEY_HOMEPAGE,        false },
69   { "XF86WWW",               DALI_KEY_WEBPAGE,         false },
70   { "XF86ScreenSaver",       DALI_KEY_SCREENSAVER,     false },
71   { "XF86MonBrightnessUp",   DALI_KEY_BRIGHTNESS_UP,   false },
72   { "XF86MonBrightnessDown", DALI_KEY_BRIGHTNESS_DOWN, false },
73   { "XF86SoftKBD",           DALI_KEY_SOFT_KBD,        false },
74   { "XF86QuickPanel",        DALI_KEY_QUICK_PANEL,     false },
75   { "XF86TaskPane",          DALI_KEY_TASK_SWITCH,     false },
76   { "XF86Apps",              DALI_KEY_APPS,            false },
77   { "XF86Search",            DALI_KEY_SEARCH,          false },
78   { "XF86Voice",             DALI_KEY_VOICE,           false },
79   { "Hangul",                DALI_KEY_LANGUAGE,        false },
80   { "XF86AudioRaiseVolume",  DALI_KEY_VOLUME_UP,       true  },
81   { "XF86AudioLowerVolume",  DALI_KEY_VOLUME_DOWN,     true  },
82 };
83
84 const std::size_t KEY_LOOKUP_COUNT = (sizeof( TestKeyLookupTable))/ (sizeof(KeyLookup));
85
86 enum TEST_TYPE
87 {
88   GRAB_KEY_P,
89   UNGRAB_KEY_P,
90   GRAB_KEY_TOPMOST_P,
91   UNGRAB_KEY_TOPMOST_P
92 };
93
94 struct MyTestApp : public ConnectionTracker
95 {
96   MyTestApp( Application& app, int type )
97   : mApplication( app ),
98     mTestType( type )
99   {
100     mApplication.InitSignal().Connect( this, &MyTestApp::OnInit );
101   }
102
103   void OnInit(Application& app)
104   {
105     mStartTimer = Timer::New( 100 );
106     mStartTimer.TickSignal().Connect( this, &MyTestApp::StartTick );
107     mStartTimer.Start();
108
109     mTimer = Timer::New( 500 );
110     mTimer.TickSignal().Connect( this, &MyTestApp::Tick );
111     mTimer.Start();
112   }
113
114   bool StartTick()
115   {
116     mStartTimer.Stop();
117     ExcuteTest();
118     return true;
119   }
120
121   bool Tick()
122   {
123     mTimer.Stop();
124     mApplication.Quit();
125     return true;
126   }
127
128   void ExcuteTest()
129   {
130     switch (mTestType)
131     {
132       case GRAB_KEY_P:
133         TestGrabKeyP();
134         break;
135       case UNGRAB_KEY_P:
136         TestUngrabKeyP();
137         break;
138       case UNGRAB_KEY_N:
139         TestUngrabKeyN();
140         break;
141       case GRAB_KEY_TOPMOST_P:
142         TestGrabKeyTopmostP();
143         break;
144       case UNGRAB_KEY_TOPMOST_P:
145         TestUngrabKeyTopmostP();
146         break;
147     }
148   }
149
150   void TestGrabKeyP()
151   {
152     for ( std::size_t i = 0; i < KEY_LOOKUP_COUNT; ++i )
153     {
154       DALI_TEST_CHECK( KeyGrab::GrabKey( mApplication.GetWindow(), TestKeyLookupTable[i].daliKeyCode, KeyGrab::TOPMOST ) );
155       DALI_TEST_CHECK( KeyGrab::GrabKey( mApplication.GetWindow(), TestKeyLookupTable[i].daliKeyCode, KeyGrab::SHARED ) );
156     }
157   }
158
159   void TestUngrabKeyP()
160   {
161     for ( std::size_t i = 0; i < KEY_LOOKUP_COUNT; ++i )
162     {
163       DALI_TEST_CHECK( KeyGrab::GrabKey( mApplication.GetWindow(), TestKeyLookupTable[i].daliKeyCode, KeyGrab::TOPMOST ) );
164       DALI_TEST_CHECK( KeyGrab::UngrabKey( mApplication.GetWindow(), TestKeyLookupTable[i].daliKeyCode ) );
165     }
166   }
167
168   void TestGrabKeyTopmostP()
169   {
170     for ( std::size_t i = 0; i < KEY_LOOKUP_COUNT; ++i )
171     {
172       DALI_TEST_CHECK( KeyGrab::GrabKeyTopmost( mApplication.GetWindow(), TestKeyLookupTable[i].daliKeyCode ) );
173     }
174   }
175
176   void TestUngrabKeyTopmostP()
177   {
178     for ( std::size_t i = 0; i < KEY_LOOKUP_COUNT; ++i )
179     {
180       DALI_TEST_CHECK( KeyGrab::GrabKeyTopmost( mApplication.GetWindow(), TestKeyLookupTable[i].daliKeyCode ) );
181       DALI_TEST_CHECK( KeyGrab::UngrabKeyTopmost( mApplication.GetWindow(), TestKeyLookupTable[i].daliKeyCode ) );
182     }
183   }
184
185   // Data
186   Application& mApplication;
187   int mTestType;
188   Timer mTimer, mStartTimer;
189 };
190
191 int UtcDaliKeyGrabGrabKeyP(void)
192 {
193   Application application = Application::New( &gArgc, &gArgv );
194   MyTestApp testApp( application, GRAB_KEY_P );
195   application.MainLoop();
196   END_TEST;
197 }
198
199 int UtcDaliKeyGrabUngrabKeyP(void)
200 {
201   Application application = Application::New( &gArgc, &gArgv );
202   MyTestApp testApp( application, UNGRAB_KEY_P );
203   application.MainLoop();
204   END_TEST;
205 }
206
207 int UtcDaliKeyGrabGrabKeyTopmostP(void)
208 {
209   Application application = Application::New( &gArgc, &gArgv );
210   MyTestApp testApp( application, GRAB_KEY_TOPMOST_P );
211   application.MainLoop();
212   END_TEST;
213 }
214
215 int UtcDaliKeyGrabUngrabKeyTopmostP(void)
216 {
217   Application application = Application::New( &gArgc, &gArgv );
218   MyTestApp testApp( application, UNGRAB_KEY_TOPMOST_P );
219   application.MainLoop();
220   END_TEST;
221 }
222