1# -*- coding: utf-8 -*-
2import os
3import sys
4import time
5import test_utils
6import test_constants
7import filecmp
8
9display_name = "main_display"
10folder_name = "default_folder"
11screen_name = "main_screen"
12
13def get_test_header():
14    notes =  "*          Menu Widget Test                   *\n"
15    notes += "*                                             *\n"
16    notes += "* Add and Edit Accordion Menu                 *\n"
17    notes += "* Add and Edit Tree View                      *\n"
18    return notes
19
20def run_new_project_create(project_name):
21
22    # create a new project
23    test_utils.toolbar_create()
24    test_utils.set_new_project_path(test_utils.DEFAULT_OUTPUT_FILE_PATH)
25    test_utils.set_new_project_name(project_name)
26    test_utils.save_new_project_create()
27
28    # configure project
29    test_utils.configure_project()
30    test_utils.configure_x_res(640)
31    test_utils.configure_y_res(480)
32    test_utils.configure_display_name(display_name)
33    test_utils.save_project_configure()
34
35    # add normal font
36    # open font folder
37    test_utils.click_resource_group('FONT_GROUP')
38
39    test_utils.add_font()
40    test_utils.set_font_path('..\\..\\fonts\\Vera.ttf')
41    test_utils.set_font_name('NORMAL_FONT')
42    test_utils.set_font_format('GX_FONT_FORMAT_8BPP')
43    test_utils.set_font_height(28)
44    test_utils.save_font_edit()
45
46    # add selected font
47    test_utils.add_font()
48    test_utils.set_font_path('..\\..\\fonts\\Vera.ttf')
49    test_utils.set_font_name('SELECTED_FONT')
50    test_utils.set_font_format('GX_FONT_FORMAT_8BPP')
51    test_utils.set_font_height(30)
52    test_utils.save_font_edit()
53
54    # cloce font folder
55    test_utils.click_resource_group('FONT_GROUP')
56
57    test_utils.add_pixelmaps('Custom', '..\\pixelmaps\\', 'tfield_fill_small.png')
58    test_utils.add_pixelmaps('Custom', '..\\pixelmaps\\', 'collapse.png')
59    test_utils.add_pixelmaps('Custom', '..\\pixelmaps\\', 'expand.png')
60
61    # close message dialog when create new project
62    test_utils.close_message_dialog()
63
64
65def add_main_screen():
66    #---------------------------------------#
67    #add main screen to display             #
68    #---------------------------------------#
69
70    test_utils.select_project_tree_node("window")
71
72    test_utils.edit_widget_props("ID_XPOS", 0)
73    test_utils.edit_widget_props("ID_YPOS", 0)
74    test_utils.edit_widget_props("ID_WIDTH", 640)
75    test_utils.edit_widget_props("ID_HEIGHT", 480)
76    test_utils.edit_widget_props("ID_WIDGET_NAME", screen_name)
77
78
79def add_edit_accordion_menu_widget():
80    #---------------------------------------#
81    #add and edit numeric scroll wheel      #
82    #---------------------------------------#
83    test_utils.select_project_tree_node(screen_name)
84    test_utils.add_widget('GX_TYPE_ACCORDION_MENU')
85    accordion_menu_name = "accordion"
86    accordion_menu_1 = "accordion_menu_1"
87    accordion_menu_2 = "accordion_menu_2"
88    accordion_menu_3 = "accordion_menu_3"
89    accordion_menu_4 = "accordion_menu_4"
90    accordion_menu_5 = "accordion_menu_5"
91
92    test_utils.edit_widget_props("ID_XPOS", 29)
93    test_utils.edit_widget_props("ID_YPOS", 30)
94    test_utils.edit_widget_props("ID_WIDTH", 176)
95    test_utils.edit_widget_props("ID_HEIGHT", 138)
96    test_utils.edit_widget_props("ID_WIDGET_NAME", accordion_menu_name)
97    test_utils.compare_result()
98
99    #add 5 menus
100    test_utils.select_project_tree_node(accordion_menu_name)
101    test_utils.add_widget('GX_TYPE_MENU')
102    test_utils.edit_widget_props("ID_WIDGET_NAME", accordion_menu_1)
103    test_utils.edit_widget_props("ID_STRING_VAL", "menu 1")
104    test_utils.edit_widget_props("ID_MENU_TEXT_X_OFFSET", "15")
105    test_utils.edit_widget_props("ID_MENU_TEXT_Y_OFFSET", "5")
106    test_utils.compare_result()
107    test_utils.undo()
108    test_utils.undo()
109    test_utils.compare_result()
110    test_utils.select_project_tree_node(accordion_menu_name)
111    test_utils.add_widget('GX_TYPE_MENU')
112    test_utils.edit_widget_props("ID_WIDGET_NAME", accordion_menu_2)
113    test_utils.edit_widget_props("ID_STRING_VAL", "menu 2")
114    test_utils.select_project_tree_node(accordion_menu_name)
115    test_utils.add_widget('GX_TYPE_MENU')
116    test_utils.edit_widget_props("ID_WIDGET_NAME", accordion_menu_3)
117    test_utils.edit_widget_props("ID_STRING_VAL", "menu 3")
118    test_utils.select_project_tree_node(accordion_menu_name)
119    test_utils.add_widget('GX_TYPE_TEXT_BUTTON')
120    test_utils.edit_widget_props("ID_BORDER_COMBO", test_constants.BORDER_TYPE_RAISED)
121    test_utils.edit_widget_props("ID_WIDGET_NAME", accordion_menu_4)
122    test_utils.edit_widget_props("ID_STRING_VAL", "menu 4")
123    test_utils.select_project_tree_node(accordion_menu_name)
124    test_utils.add_widget('GX_TYPE_MENU')
125    test_utils.edit_widget_props("ID_WIDGET_NAME", accordion_menu_5)
126    test_utils.edit_widget_props("ID_STRING_VAL", "menu 5")
127    test_utils.compare_result()
128
129    #remove menu 3
130    test_utils.select_project_tree_node(accordion_menu_3)
131    test_utils.delete_widget()
132    test_utils.compare_result()
133
134    #set fill pixelmap for menu 1
135    test_utils.select_project_tree_node(accordion_menu_1)
136    test_utils.edit_widget_props("ID_PIXELMAP_1", test_constants.PIXELMAP_FILL)
137    test_utils.toolbar_size_to_fit()
138    test_utils.compare_result()
139
140    #set new size for menu 2
141    test_utils.select_project_tree_node(accordion_menu_2)
142    test_utils.edit_widget_props_post("ID_XPOS", 20)#not allowed
143    test_utils.close_message_dialog()
144    test_utils.edit_widget_props_post("ID_YPOS", 20)#not allowed
145    test_utils.close_message_dialog()
146    test_utils.edit_widget_props_post("ID_WIDTH", 40)#not allowed
147    test_utils.close_message_dialog()
148    test_utils.edit_widget_props("ID_HEIGHT", 40)
149    test_utils.compare_result()
150
151    #insert menu item for menu 1
152    test_utils.select_project_tree_node(accordion_menu_1)
153    test_utils.add_widget("GX_TYPE_PROMPT")
154    test_utils.edit_widget_props("ID_WIDGET_NAME", "accordion_menu_1_item_1")
155    test_utils.edit_widget_props_post("ID_XPOS", 20)#not allowed
156    test_utils.close_message_dialog()
157    test_utils.edit_widget_props_post("ID_YPOS", 20)#not allowed
158    test_utils.close_message_dialog()
159    test_utils.edit_widget_props("ID_WIDTH", 174)
160    test_utils.edit_widget_props("ID_HEIGHT", 46)
161    test_utils.compare_result()
162
163    test_utils.select_project_tree_node(accordion_menu_1)
164    test_utils.add_widget("GX_TYPE_MENU")
165    test_utils.edit_widget_props("ID_WIDTH", 174)
166    test_utils.edit_widget_props("ID_HEIGHT", 34)
167    test_utils.edit_widget_props("ID_WIDGET_NAME", "accordion_menu_1_item_2")
168    test_utils.compare_result()
169
170    test_utils.select_project_tree_node(accordion_menu_1)
171    test_utils.edit_widget_props("ID_MENU_EXPANDED", 0)#remove menu expanded style
172    test_utils.edit_widget_props("ID_MENU_INSERT_MODE", 0)
173    test_utils.add_widget("GX_TYPE_PROMPT")
174    test_utils.compare_result()
175
176    #undo widget add
177    test_utils.undo()
178    #test_utils.undo()
179
180    #undo insert mode change
181    test_utils.undo()
182
183    #undo expand style change
184    test_utils.undo()
185
186    test_utils.compare_result()
187
188    test_utils.select_project_tree_node(accordion_menu_1)
189    #remove menu expanded style
190    test_utils.edit_widget_props("ID_MENU_EXPANDED", 0)
191    test_utils.compare_result()
192
193    #remove menu 1 item 2
194    test_utils.select_project_tree_node("accordion_menu_1_item_2")
195    test_utils.delete_widget()
196    test_utils.compare_result()
197
198    #undo delete
199    test_utils.undo()
200
201    #insert an accordion menu to menu 4
202    test_utils.select_project_tree_node(accordion_menu_2)
203    test_utils.add_widget('GX_TYPE_ACCORDION_MENU')
204    test_utils.edit_widget_props("ID_WIDTH", 174)
205    test_utils.edit_widget_props("ID_HEIGHT", 34)
206    test_utils.edit_widget_props("ID_WIDGET_NAME", "accordion_2")
207
208    #insert a menu to accordion 2
209    test_utils.add_widget("GX_TYPE_MENU")
210
211    #insert a text view to the menu
212    test_utils.add_widget("GX_TYPE_MULTI_LINE_TEXT_VIEW")
213    test_utils.edit_widget_props("ID_WIDTH", 174)
214    test_utils.edit_widget_props("ID_HEIGHT", 69)
215    test_utils.compare_result()
216
217    #select accordion 2
218    test_utils.select_project_tree_node("accordion_2")
219
220    #insert a menu to accordion 2
221    test_utils.add_widget("GX_TYPE_MENU")
222
223    #insert a text view to the menu
224    test_utils.add_widget("GX_TYPE_MULTI_LINE_TEXT_VIEW")
225    test_utils.edit_widget_props("ID_WIDTH", 174)
226    test_utils.edit_widget_props("ID_HEIGHT", 69)
227    test_utils.compare_result()
228
229    #test accordion menu copy paste
230    test_utils.select_project_tree_node(accordion_menu_name)
231    test_utils.toolbar_copy()
232    test_utils.select_project_tree_node(screen_name)
233    test_utils.toolbar_paste()
234    test_utils.compare_result()
235
236    test_utils.undo()
237
238    test_utils.select_project_tree_node("accordion_menu_1_item_1")
239    test_utils.compare_result()
240
241
242def add_edit_tree_view_widget():
243    #---------------------------------------#
244    #add and edti tree view                 #
245    #---------------------------------------#
246    test_utils.select_project_tree_node(screen_name)
247    test_utils.add_widget('GX_TYPE_TREE_VIEW')
248    tree_view_name = "tree_view"
249
250    #edit tree view properties
251    test_utils.edit_widget_props("ID_XPOS", 260)
252    test_utils.edit_widget_props("ID_YPOS", 33)
253    test_utils.edit_widget_props("ID_WIDTH", 276)
254    test_utils.edit_widget_props("ID_HEIGHT", 335)
255    test_utils.edit_widget_props("ID_WIDGET_NAME", tree_view_name)
256    test_utils.edit_widget_props("ID_PIXELMAP_1", "EXPAND")
257    test_utils.edit_widget_props("ID_PIXELMAP_2", "COLLAPSE")
258
259    # insert 5 menus
260    test_utils.select_project_tree_node(tree_view_name)
261    test_utils.add_widget("GX_TYPE_MENU")
262    test_utils.edit_widget_props("ID_WIDGET_NAME", "tree_menu_1")
263    test_utils.edit_widget_props("ID_STRING_VAL", "menu 1")
264    test_utils.select_project_tree_node(tree_view_name)
265    test_utils.add_widget("GX_TYPE_MENU")
266    test_utils.edit_widget_props("ID_WIDGET_NAME", "tree_menu_2")
267    test_utils.edit_widget_props("ID_STRING_VAL", "menu 2")
268    test_utils.select_project_tree_node(tree_view_name)
269    test_utils.add_widget("GX_TYPE_MENU")
270    test_utils.edit_widget_props("ID_WIDGET_NAME", "tree_menu_3")
271    test_utils.edit_widget_props("ID_STRING_VAL", "menu 3")
272    test_utils.select_project_tree_node(tree_view_name)
273    test_utils.add_widget("GX_TYPE_TEXT_BUTTON")
274    test_utils.edit_widget_props("ID_BORDER_COMBO", test_constants.BORDER_TYPE_RAISED)
275    test_utils.edit_widget_props("ID_WIDGET_NAME", "tree_menu_4")
276    test_utils.edit_widget_props("ID_STRING_VAL", "menu 4")
277    test_utils.select_project_tree_node(tree_view_name)
278    test_utils.add_widget("GX_TYPE_MENU")
279    test_utils.edit_widget_props("ID_WIDGET_NAME", "tree_menu_5")
280    test_utils.edit_widget_props("ID_STRING_VAL", "menu 5")
281    test_utils.compare_result()
282
283    test_utils.select_project_tree_node(tree_view_name)
284    test_utils.edit_widget_props("ID_TREE_VIEW_INDENTATION", "10")
285    test_utils.compare_result()
286    test_utils.undo()
287
288    test_utils.select_project_tree_node(tree_view_name)
289    test_utils.edit_widget_props("ID_TREE_VIEW_SHOW_ROOT_LINES", 0)
290    test_utils.compare_result()
291    test_utils.undo()
292    test_utils.select_project_tree_node(tree_view_name)
293    test_utils.edit_widget_props("ID_TREE_VIEW_ROOT_LINE_COLOR", 'BTN_BORDER')
294    test_utils.compare_result()
295    test_utils.undo()
296
297    # insert menu item to menu 1
298    test_utils.select_project_tree_node("tree_menu_1")
299    test_utils.add_widget("GX_TYPE_MENU")
300    test_utils.edit_widget_props("ID_WIDGET_NAME", "tree_menu_1_item_1")
301    test_utils.edit_widget_props("ID_STRING_VAL", "tree_menu_1_item_1")
302    test_utils.select_project_tree_node("tree_menu_1")
303    test_utils.add_widget("GX_TYPE_MENU")
304    test_utils.edit_widget_props("ID_WIDGET_NAME", "tree_menu_1_item_2")
305    test_utils.edit_widget_props("ID_STRING_VAL", "tree_menu_1_item_2")
306    test_utils.add_widget("GX_TYPE_MENU")
307    test_utils.edit_widget_props("ID_WIDGET_NAME", "tree_menu_1_item_2_1")
308    test_utils.edit_widget_props("ID_STRING_VAL", "tree_menu_1_item_2_1")
309    test_utils.add_widget("GX_TYPE_MENU")
310    test_utils.edit_widget_props("ID_WIDGET_NAME", "tree_menu_1_item_2_1_1")
311    test_utils.edit_widget_props("ID_STRING_VAL", "tree_menu_1_item_2_1_1")
312    test_utils.compare_result()
313
314    #insert menu item to menu 2
315    test_utils.select_project_tree_node("tree_menu_2")
316    test_utils.add_widget("GX_TYPE_PROMPT")
317    test_utils.select_project_tree_node("tree_menu_2")
318    test_utils.add_widget("GX_TYPE_BUTTON")
319    test_utils.edit_widget_props("ID_BORDER_COMBO", test_constants.BORDER_TYPE_RAISED)
320    test_utils.edit_widget_props_post("ID_XPOS", 250)#not allowed
321    test_utils.close_message_dialog()
322    test_utils.edit_widget_props_post("ID_YPOS", 150)#not allowed
323    test_utils.close_message_dialog()
324    test_utils.edit_widget_props("ID_WIDTH", 206)
325    test_utils.edit_widget_props("ID_HEIGHT", 35)
326    test_utils.compare_result()
327
328    #insert menu item to menu 3
329    test_utils.select_project_tree_node("tree_menu_3")
330    test_utils.add_widget("GX_TYPE_MENU")
331    test_utils.add_widget("GX_TYPE_PROMPT")
332    test_utils.compare_result()
333
334    #delete menu 3
335    test_utils.select_project_tree_node("tree_menu_3")
336    test_utils.delete_widget()
337    test_utils.compare_result()
338
339    #undo delete
340    test_utils.undo()
341
342    #undo add
343    test_utils.undo()
344    test_utils.compare_result()
345
346    #resize tree view
347    test_utils.select_project_tree_node(tree_view_name)
348    test_utils.edit_widget_props("ID_WIDTH", 171)
349    test_utils.edit_widget_props("ID_HEIGHT", 240)
350
351    #add scroll bar
352    test_utils.select_project_tree_node(tree_view_name)
353    test_utils.add_widget("GX_TYPE_HORIZONTAL_SCROLL")
354    test_utils.select_project_tree_node(tree_view_name)
355    test_utils.add_widget("GX_TYPE_VERTICAL_SCROLL")
356    test_utils.compare_result()
357
358    #test copy paste
359    test_utils.select_project_tree_node(tree_view_name)
360    test_utils.toolbar_copy()
361    test_utils.select_project_tree_node(screen_name)
362    test_utils.toolbar_paste()
363    test_utils.compare_result()
364    test_utils.undo()
365
366    #collapse menu 1
367    test_utils.select_project_tree_node("tree_menu_1")
368    test_utils.edit_widget_props("ID_MENU_EXPANDED", 0)
369    test_utils.compare_result()
370
371    #collapse menu 2
372    test_utils.select_project_tree_node("tree_menu_2")
373    test_utils.edit_widget_props("ID_MENU_EXPANDED", 0)
374    test_utils.compare_result()
375
376
377def select_menu_item_that_is_not_expanded():
378    # open test project
379    test_utils.open_project('all_widgets_execute.gxp')
380
381    test_utils.select_project_tree_node('tree_menu_2')
382    test_utils.edit_widget_props("ID_MENU_EXPANDED", 0)
383    test_utils.compare_result()
384    test_utils.select_project_tree_node('tree_menu_2_1')
385    test_utils.compare_result()
386
387    test_utils.select_project_tree_node('tree_menu_2')
388    test_utils.edit_widget_props("ID_MENU_EXPANDED", 0)
389    test_utils.compare_result()
390    test_utils.select_project_tree_node('tree_menu_2_1_1')
391    test_utils.compare_result()
392
393def run_menu_position():
394    # open test project
395    test_utils.open_project('all_widgets_execute.gxp')
396
397    #delete accordion_menu 1.1
398    test_utils.select_project_tree_node('prompt_25_1')
399    test_utils.delete_widget()
400
401    test_utils.undo()
402
403    #delete accordion_menu 1.2
404    test_utils.select_project_tree_node('prompt_26_1')
405    test_utils.delete_widget()
406
407    #delete tree view menu 2.1.1
408    test_utils.select_project_tree_node('tree_menu_2_1_1')
409    test_utils.delete_widget()
410
411    #delete tree view menu 2.1.2
412    test_utils.select_project_tree_node('tree_menu_2_1_2')
413    test_utils.delete_widget()
414
415    #delete tree view menu 1.1
416    test_utils.select_project_tree_node('tree_menu_1_1')
417    test_utils.delete_widget()
418
419    #undo delete
420    test_utils.undo()
421
422def run_menu_widget_tests(generate, screenshot):
423
424    test_utils.output_test_header(get_test_header())
425    test_utils.setup(generate, screenshot, 'test_menu_widget_golden_file')
426
427    print('create new project')
428    run_new_project_create("test_menu_widget")
429
430    print('add main screen')
431    add_main_screen()
432
433    print('add and edit accordion menu widget')
434    add_edit_accordion_menu_widget()
435
436    print('add and edit tree view widget')
437    add_edit_tree_view_widget()
438
439    test_utils.toolbar_save()
440
441    test_utils.toolbar_save()
442
443    #close project with widget been selected
444    test_utils.select_project_tree_node("accordion")
445    test_utils.close_project()
446    test_utils.open_project(test_utils.DEFAULT_OUTPUT_FILE_PATH + "\\test_menu_widget.gxp")
447    test_utils.select_project_tree_node("tree_view")
448    test_utils.close_project()
449
450    print('test menu item select when the item is not expanded')
451    select_menu_item_that_is_not_expanded()
452
453    print('run menu position')
454    run_menu_position()
455
456    test_utils.write_end('Menu Widget Tests')