aurum: re-arrange files and add guide & scripts for TV
[platform/core/uifw/aurum.git] / protocol / resources / python / mobile / NUITizenGallery / NUITizenGallery.py
1 from __future__ import print_function
2 import os
3 import sys
4 sys.path.append(os.path.dirname(os.path.abspath(os.path.dirname(os.path.dirname(__file__)))))
5 from aurum_pb2 import *
6 from aurum_pb2_grpc import BootstrapStub
7 import logging
8 import grpc
9 import time
10
11 # Check the object in the screen(TM1) or not
12 def inScreen(size):
13     if size.x < 0: return False
14     if size.y < 0: return False
15     if size.x >= 720: return False
16     if size.y >= 1280: return False
17     return True
18
19 # 1. Find TextField(entry)
20 # 2. Set Text as Picker
21 # 3. Click Run button
22 # 4. Find PickerTest1 item on the result list
23 # 5. Find 'Black' textlabel on the layout
24 def PickerExecuteTestWithText(stub):
25     # 1
26     response = stub.findElement(ReqFindElement(widgetType='TextField'))
27     if len(response.elements) <= 0: return False
28     # 2
29     targetObj = response.elements[0].elementId
30     testString = 'Picker'
31     stub.setValue(ReqSetValue(elementId=targetObj, stringValue=testString))
32     # 3
33     response = stub.findElement(ReqFindElement(textField='Run'))
34     if len(response.elements) <= 0: return False
35     targetObj = response.elements[0].elementId
36     stub.click(ReqClick(type='ELEMENTID', elementId=targetObj))
37     # 4
38     response = stub.findElement(ReqFindElement(textField='PickerTest1'))
39     if len(response.elements) <= 0: return False
40     targetObj = response.elements[0].elementId
41     stub.click(ReqClick(type='ELEMENTID', elementId=targetObj))
42     # 5
43     response = stub.findElement(ReqFindElement(textField='Black'))
44     if len(response.elements) <= 0: return False
45
46     return True
47
48 # 1. Find PickerTest1 item on the list
49 # 2. Click PickerTest1 item
50 # 3. Find 'Black' textlabel on the layout
51 def PickerExecuteTest(stub):
52     for tryCnt in range(10):
53         # 1
54         stub.flick(ReqFlick(startPoint=Point(x=300, y=750), endPoint=Point(x=300, y=200), durationMs=150))
55         response = stub.findElement(ReqFindElement(textField='PickerTest1'))
56         if len(response.elements) <= 0: continue
57         targetObj = response.elements[0].elementId
58         response = stub.getSize(ReqGetSize(elementId=targetObj))
59         if inScreen(response.size):
60             # 2
61             stub.click(ReqClick(type='ELEMENTID', elementId=targetObj))
62             break
63
64     # 3
65     response = stub.findElement(ReqFindElement(textField='Black'))
66     if len(response.elements) <= 0: return False
67     return True
68
69 # 1. Find PickerScroller(Picker's internal scroller)
70 # 2. Find 'Black' textlabel on the layout
71 # 3. Get PickerScroller geometry value for flick event
72 # 4. Check the loop works well while changing the picker item by flick event
73 def PickerScrollTest(stub):
74     # 1
75     response = stub.findElement(ReqFindElement(widgetType='PickerScroller'))
76     if len(response.elements) <= 0: return False
77     # 2
78     responseText = stub.findElement(ReqFindElement(textField='Black'))
79     if len(response.elements) <= 0: return False
80     # 3
81     pickerCenterX = response.elements[0].geometry.x + (response.elements[0].geometry.width / 2)
82     pickerCenterY = response.elements[0].geometry.y + (response.elements[0].geometry.height / 2)
83
84     for tryCnt in range(30):
85         # 4
86         stub.flick(ReqFlick(startPoint=Point(x=int(pickerCenterX), y=int(pickerCenterY)), endPoint=Point(x=int(pickerCenterX), y=int(pickerCenterY-70)), durationMs=100))
87         response = stub.findElement(ReqFindElement(textField='Black'))
88         if len(response.elements) > 0:
89             if response.elements[0].elementId == responseText.elements[0].elementId:
90                 return True
91
92     return False
93
94 # Launch application. it returns application running state
95 def launchAppTest(stub):
96     stub.launchApp(ReqLaunchApp(packageName='org.tizen.example.NUITizenGallery'))
97     return stub.getAppInfo(ReqGetAppInfo(packageName='org.tizen.example.NUITizenGallery')).isRunning
98
99 # Close application. it returns application running state
100 def closeAppTest(stub):
101     stub.closeApp(ReqCloseApp(packageName='org.tizen.example.NUITizenGallery'))
102     return stub.getAppInfo(ReqGetAppInfo(packageName='org.tizen.example.NUITizenGallery')).isRunning != True
103
104 def defaultSetup(stub):
105     if stub.getAppInfo(ReqGetAppInfo(packageName='org.tizen.example.NUITizenGallery')).isRunning:
106         stub.closeApp(ReqCloseApp(packageName='org.tizen.example.NUITizenGallery'))
107
108     stub.launchApp(ReqLaunchApp(packageName='org.tizen.example.NUITizenGallery'))
109
110 def defaultTearDown(stub):
111     stub.closeApp(ReqCloseApp(packageName='org.tizen.example.NUITizenGallery'))
112
113 def runTest(stub, testFunc, setup=defaultSetup, tearDown=defaultTearDown, alwaySucceed=False):
114     print("Testing started :", testFunc)
115
116     setup(stub)
117     result = testFunc(stub)
118     tearDown(stub)
119
120     print("Testing result :", result)
121     if alwaySucceed: return True
122
123 def runTestWithoutSetupAndTearDown(stub, testFunc, setup=defaultSetup, tearDown=defaultTearDown):
124     def Empty(stub):
125         pass
126
127     runTest(stub, testFunc, Empty, Empty)
128
129 def run():
130     with grpc.insecure_channel('127.0.0.1:50051') as channel:
131         stub = BootstrapStub(channel)
132         # Picker Test
133         runTestWithoutSetupAndTearDown(stub, launchAppTest)
134         runTestWithoutSetupAndTearDown(stub, PickerExecuteTestWithText)
135         runTestWithoutSetupAndTearDown(stub, PickerScrollTest)
136         runTestWithoutSetupAndTearDown(stub, closeAppTest)
137
138 if __name__ == '__main__':
139     logging.basicConfig()
140     run()