1import os
2import sys
3import time
4import test_utils
5import test_constants
6import logging
7
8test_template_output_files = [
9"template_resources.c",
10"template_resources.h",
11"template_specifications.c",
12"template_specifications.h"]
13
14def get_test_header():
15    notes =  "*            Studio Template Tests                    *\n"
16    notes += "*                                                     *\n"
17    notes += "* Test add template                                   *\n"
18    notes += "* Test delete template                                *\n"
19    notes += "* Test edit template                                  *\n"
20    return notes
21
22def run_template_delete():
23    #delete template that is referenced that other widgets
24    test_utils.select_project_tree_node('base')
25    test_utils.post_delete_widget()
26    test_utils.close_message_dialog()# This template cannot be deleted until all references are first removed.
27
28    #delete template that is not reference
29    test_utils.select_project_tree_node('base_0')
30    test_utils.delete_widget(0)
31
32    test_utils.select_project_tree_node('child_temlate_screen')
33    test_utils.compare_result()
34
35    test_utils.select_project_tree_node('template_screen')
36    test_utils.compare_result()
37
38def run_template_add():
39
40    #add widget "test_base" and set it as template
41    test_utils.select_project_tree_node("default_folder")
42    test_utils.add_widget('GX_TYPE_WINDOW')
43    test_utils.edit_widget_props("ID_XPOS", 0)
44    test_utils.edit_widget_props("ID_YPOS", 0)
45    test_utils.edit_widget_props("ID_WIDTH", 640)
46    test_utils.edit_widget_props("ID_HEIGHT", 480)
47    test_utils.edit_widget_props("ID_WIDGET_NAME","test_base")
48    test_utils.edit_widget_props("ID_TEMPLATE", 1)
49
50    #add widget "test_base_derived_0" based on "test_base"
51    test_utils.select_project_tree_node("default_folder")
52    test_utils.add_template("test_base")
53    test_utils.edit_widget_props("ID_WIDGET_NAME","test_base_derived_0")
54    test_utils.compare_result()
55
56    #add a child to "test_base"
57    test_utils.select_project_tree_node("test_base")
58    test_utils.add_widget('GX_TYPE_WINDOW')
59    test_utils.edit_widget_props("ID_WIDGET_NAME","test_base_child")
60    test_utils.compare_result()
61
62    #set "test_base_derived_0" as template
63    #add a child to it
64    test_utils.select_project_tree_node("test_base_derived_0")
65    test_utils.edit_widget_props("ID_TEMPLATE", 1)
66    test_utils.add_widget('GX_TYPE_WINDOW')
67    test_utils.edit_widget_props("ID_WIDGET_NAME","test_base_derived_0_child")
68    test_utils.compare_result()
69
70    #add widget "test_base_derived_1" based on "test_base_derived_0"
71    #set it as template
72    #add a child
73    test_utils.select_project_tree_node("default_folder")
74    test_utils.add_template("test_base_derived_0")
75    test_utils.edit_widget_props("ID_WIDGET_NAME","test_base_derived_1")
76    test_utils.edit_widget_props("ID_TEMPLATE", 1)
77    test_utils.add_widget('GX_TYPE_WINDOW')
78    test_utils.edit_widget_props("ID_WIDGET_NAME","test_base_derived_1_child")
79    test_utils.compare_result()
80
81    #delete "test_base_derived_1"
82    test_utils.select_project_tree_node("test_base_derived_1")
83    test_utils.delete_widget()
84
85    #delete "test_base_derived_0"
86    test_utils.select_project_tree_node("test_base_derived_0")
87    test_utils.delete_widget()
88
89    test_utils.select_project_tree_node("test_base")
90    test_utils.compare_result()
91
92    #undo delete "test_base_derived_0"
93    test_utils.undo()
94
95    #add widget "test_base_derived_3" based on "test_base"
96    test_utils.select_project_tree_node("default_folder")
97    test_utils.add_template("test_base")
98    test_utils.edit_widget_props("ID_WIDGET_NAME","test_base_derived_3")
99
100    #add a child widget to template "test_base"
101    test_utils.select_project_tree_node("test_base")
102    test_utils.select_project_tree_node("test_base_child")
103    test_utils.move_selected(20)
104    test_utils.select_project_tree_node("test_base_derived_3")
105    test_utils.compare_result()
106
107    #add "radial_progress_bar" template
108    test_utils.select_project_tree_node("default_folder")
109    test_utils.add_widget('GX_TYPE_RADIAL_PROGRESS_BAR')
110    test_utils.edit_widget_props("ID_WIDGET_NAME", 'base_radial_progress_bar')
111    test_utils.edit_widget_props("ID_RADIAL_PROGRESS_XCENTER", 50)
112    test_utils.edit_widget_props("ID_RADIAL_PROGRESS_YCENTER", 50)
113    test_utils.edit_widget_props("ID_RADIAL_PROGRESS_RADIUS", 50)
114    test_utils.edit_widget_props("ID_RADIAL_PROGRESS_ANCHORVAL", 60)
115    test_utils.edit_widget_props("ID_RADIAL_PROGRESS_CURRENTVAL", -200)
116    test_utils.edit_widget_props("ID_NORMAL_TEXT_COLOR", "red")
117    test_utils.edit_widget_props("ID_RADIAL_PROGRESS_NORMAL_BRUSH_COLOR", "green")
118    test_utils.edit_widget_props("ID_RADIAL_PROGRESS_SELECTED_BRUSH_COLOR", "red")
119    test_utils.edit_widget_props("ID_RADIAL_PROGRESS_NORMAL_BRUSH_WIDTH", 18)
120    test_utils.edit_widget_props("ID_RADIAL_PROGRESS_SELECTED_BRUSH_WIDTH", 16)
121    test_utils.edit_widget_props("ID_TEMPLATE", 1)
122
123    # add "icon" template
124    test_utils.select_project_tree_node("default_folder")
125    test_utils.add_widget('GX_TYPE_ICON')
126    test_utils.edit_widget_props("ID_WIDGET_NAME", 'base_icon')
127    test_utils.edit_widget_props("ID_PIXELMAP_0", "CHECKBOX_OFF")
128    test_utils.edit_widget_props("ID_TEMPLATE", 1)
129
130    # add "pixelmap_button" template
131    test_utils.select_project_tree_node("default_folder")
132    test_utils.add_widget('GX_TYPE_PIXELMAP_BUTTON')
133    test_utils.edit_widget_props("ID_PIXELMAP_0", "ORANGE_BUTTON")
134    test_utils.edit_widget_props("ID_WIDGET_NAME", 'base_pixelmap_button')
135    test_utils.edit_widget_props("ID_TEMPLATE", 1)
136    test_utils.toolbar_size_to_fit()
137
138    # add "prompt" template
139    test_utils.select_project_tree_node("default_folder")
140    test_utils.add_widget('GX_TYPE_PROMPT')
141    test_utils.edit_widget_props("ID_WIDGET_NAME", 'base_prompt')
142    test_utils.edit_widget_props("ID_TEMPLATE", 1)
143
144    # add "numeric_pixelmap_prompt" template
145    test_utils.select_project_tree_node("default_folder")
146    test_utils.add_widget('GX_TYPE_NUMERIC_PIXELMAP_PROMPT')
147    test_utils.edit_widget_props("ID_PIXELMAP_0", "ORANGE_BUTTON")
148    test_utils.edit_widget_props("ID_WIDGET_NAME", 'base_numeric_pixelmap_prompt')
149    test_utils.edit_widget_props("ID_TEMPLATE", 1)
150    test_utils.toolbar_size_to_fit()
151
152    # add "ml_text_view" template
153    test_utils.select_project_tree_node("default_folder")
154    test_utils.add_widget('GX_TYPE_MULTI_LINE_TEXT_VIEW')
155    test_utils.edit_widget_props("ID_WIDGET_NAME", 'base_ml_text_view')
156    test_utils.edit_widget_props("ID_TEMPLATE", 1)
157
158    # add "rich_text_view" template
159    test_utils.select_project_tree_node("default_folder")
160    test_utils.add_widget('GX_TYPE_RICH_TEXT_VIEW')
161    test_utils.edit_widget_props("ID_WIDGET_NAME", 'base_rich_text_view')
162    test_utils.edit_widget_props("ID_TEMPLATE", 1)
163
164    # add "pixelmap_slider" template
165    test_utils.select_project_tree_node("default_folder")
166    test_utils.add_widget('GX_TYPE_PIXELMAP_SLIDER')
167    test_utils.edit_widget_props("ID_WIDTH", 195)
168    test_utils.edit_widget_props("ID_HEIGHT", 46)
169    test_utils.edit_widget_props("ID_PIXELMAP_0", "I_ORANGEFILL_MIDDLE_HORIZONTAL")
170    test_utils.edit_widget_props("ID_PIXELMAP_1", "I_EMPTYFILL_MIDDLE_HORIZONTAL")
171    test_utils.edit_widget_props("ID_PIXELMAP_2", "I_INDICATOR_HORIZONTAL")
172    test_utils.edit_widget_props("ID_WIDGET_NAME", 'base_pixelmap_slider')
173    test_utils.edit_widget_props("ID_SLIDER_TILE_BKGND", 1)
174    test_utils.edit_widget_props("ID_TEMPLATE", 1)
175
176    # add "radial_slider" template
177    test_utils.select_project_tree_node("default_folder")
178    test_utils.add_widget('GX_TYPE_RADIAL_SLIDER')
179    test_utils.edit_widget_props("ID_PIXELMAP_0", "BG_WASHER_ON")
180    test_utils.edit_widget_props("ID_PIXELMAP_1", "I_INDICATOR_HORIZONTAL")
181    test_utils.edit_widget_props("ID_WIDGET_NAME", 'base_radial_slider')
182    test_utils.edit_widget_props("ID_TEMPLATE", 1)
183    test_utils.toolbar_size_to_fit()
184
185    # add "sprite" template
186    test_utils.select_project_tree_node("default_folder")
187    test_utils.add_widget('GX_TYPE_SPRITE')
188    test_utils.edit_widget_props("ID_PIXELMAP_0", "SPRITE")
189    test_utils.edit_widget_props("ID_WIDGET_NAME", 'base_sprite')
190    test_utils.edit_widget_props("ID_TEMPLATE", 1)
191    test_utils.toolbar_size_to_fit()
192
193    # add "accordion" template
194    test_utils.select_project_tree_node("default_folder")
195    test_utils.add_widget('GX_TYPE_ACCORDION_MENU')
196    test_utils.edit_widget_props("ID_WIDGET_NAME", 'base_accordion')
197    test_utils.edit_widget_props("ID_TEMPLATE", 1)
198    test_utils.add_widget('GX_TYPE_MENU')
199    test_utils.select_project_tree_node('base_accordion')
200    test_utils.add_widget('GX_TYPE_MENU')
201    test_utils.select_project_tree_node('base_accordion')
202    test_utils.add_widget('GX_TYPE_MENU')
203
204    # add "tree_view" template
205    test_utils.select_project_tree_node("default_folder")
206    test_utils.add_widget('GX_TYPE_TREE_VIEW')
207    test_utils.edit_widget_props("ID_WIDGET_NAME", 'base_tree_view')
208    test_utils.edit_widget_props("ID_TEMPLATE", 1)
209    test_utils.add_widget('GX_TYPE_MENU')
210    test_utils.edit_widget_props("ID_WIDGET_NAME", 'base_tree_view_menu_1')
211    test_utils.select_project_tree_node('base_tree_view')
212    test_utils.add_widget('GX_TYPE_MENU')
213    test_utils.select_project_tree_node('base_tree_view')
214    test_utils.add_widget('GX_TYPE_MENU')
215    test_utils.select_project_tree_node('base_tree_view_menu_1')
216    test_utils.add_widget('GX_TYPE_MENU')
217
218    test_utils.select_project_tree_node("default_folder")
219    test_utils.add_widget("GX_TYPE_WINDOW")
220    test_utils.edit_widget_props("ID_WIDGET_NAME", 'widget_template_container')
221
222    # derive widget based on "icon" template
223    test_utils.add_template('base_icon')
224    test_utils.edit_widget_props("ID_XPOS", 28)
225    test_utils.edit_widget_props("ID_YPOS", 15)
226
227    # derive widget based on "pixelmap_button" template
228    test_utils.select_project_tree_node('widget_template_container')
229    test_utils.add_template('base_pixelmap_button')
230    test_utils.edit_widget_props("ID_XPOS", 80)
231    test_utils.edit_widget_props("ID_YPOS", 8)
232
233   # derive widget based on "pixelmap_slider" template
234    test_utils.select_project_tree_node('widget_template_container')
235    test_utils.add_template('base_pixelmap_slider')
236    test_utils.edit_widget_props("ID_XPOS", 260)
237    test_utils.edit_widget_props("ID_YPOS", 14)
238
239    # derive widget based on "prompt" template
240    test_utils.select_project_tree_node('widget_template_container')
241    test_utils.add_template('base_prompt')
242    test_utils.edit_widget_props("ID_XPOS", 502)
243    test_utils.edit_widget_props("ID_YPOS", 31)
244
245    # derive widget based on "numeric_pixelmap_prompt" template
246    test_utils.select_project_tree_node('widget_template_container')
247    test_utils.add_template('base_numeric_pixelmap_prompt')
248    test_utils.edit_widget_props("ID_XPOS", 7)
249    test_utils.edit_widget_props("ID_YPOS", 38)
250
251    # derive widget based on "radial_slider" template
252    test_utils.select_project_tree_node('widget_template_container')
253    test_utils.add_template('base_radial_slider')
254    test_utils.edit_widget_props("ID_XPOS", 18)
255    test_utils.edit_widget_props("ID_YPOS", 98)
256
257    # derive widget based on "rich_text_view" template
258    test_utils.select_project_tree_node('widget_template_container')
259    test_utils.add_template('base_rich_text_view')
260    test_utils.edit_widget_props("ID_XPOS", 316)
261    test_utils.edit_widget_props("ID_YPOS", 65)
262
263   # derive widget based on "sprite" template
264    test_utils.select_project_tree_node('widget_template_container')
265    test_utils.add_template('base_sprite')
266    test_utils.edit_widget_props("ID_XPOS", 18)
267    test_utils.edit_widget_props("ID_YPOS", 382)
268
269
270    # derive widget based on "text_view" template
271    test_utils.select_project_tree_node('widget_template_container')
272    test_utils.add_template('base_ml_text_view')
273    test_utils.edit_widget_props("ID_XPOS", 419)
274    test_utils.edit_widget_props("ID_YPOS", 149)
275
276    # derive widget based on "tree_view" template
277    test_utils.select_project_tree_node('widget_template_container')
278    test_utils.add_template('base_tree_view')
279    test_utils.edit_widget_props("ID_XPOS", 142)
280    test_utils.edit_widget_props("ID_YPOS", 397)
281
282    # derive widget based on "accordion" template
283    test_utils.select_project_tree_node('widget_template_container')
284    test_utils.add_template('base_accordion')
285    test_utils.edit_widget_props("ID_XPOS", 455)
286    test_utils.edit_widget_props("ID_YPOS", 263)
287
288    # derive widget based on "radial_progress_bar" template
289    test_utils.select_project_tree_node('widget_template_container')
290    test_utils.add_template('base_radial_progress_bar')
291    test_utils.edit_widget_props("ID_XPOS", 209)
292    test_utils.edit_widget_props("ID_YPOS", 129)
293
294    test_utils.compare_result()
295
296def run_template_edit():
297    #Test template when color depth changed
298    test_utils.select_project_tree_node("base")
299    test_utils.add_widget('GX_TYPE_PROMPT')
300    test_utils.edit_widget_props("ID_WIDGET_NAME","child_prompt")
301    test_utils.edit_widget_props("ID_XPOS", 327)
302    test_utils.edit_widget_props("ID_YPOS", 207)
303    test_utils.edit_widget_props("ID_WIDTH", 308)
304    test_utils.edit_widget_props("ID_HEIGHT", 34)
305    test_utils.edit_widget_props("ID_BORDER_COMBO", test_constants.BORDER_TYPE_THIN)
306    test_utils.edit_widget_props("ID_TRANSPARENT", 1)
307    test_utils.edit_widget_props("ID_STRING_VAL", "transparent prompt with thin border")
308    test_utils.configure_project()
309    test_utils.configure_display_color_format('GX_COLOR_FORMAT_8BIT_PALETTE')
310    test_utils.save_project_configure()
311    test_utils.move_window(10)
312    test_utils.move_window(-10)
313
314    #test resize template
315    #test transparent template
316    test_utils.select_project_tree_node("base")
317    test_utils.edit_widget_props("ID_TRANSPARENT", 1)
318    test_utils.edit_widget_props("ID_WIDTH", 446)
319    test_utils.compare_result()
320
321    test_utils.select_project_tree_node("child_template_screen")
322    test_utils.compare_result()
323
324def run_derived_widget_update():
325    test_utils.open_project('template.gxp')
326
327    test_utils.add_pixelmaps('Custom', '..\\pixelmaps\\', 'black_pause.png')
328    test_utils.add_pixelmaps('Custom', '..\\pixelmaps\\', 'save_icon.png')
329
330    # open font folder
331    test_utils.click_resource_group('FONT_GROUP')
332
333    # add font Vera.ttf
334    test_utils.add_font()
335    test_utils.set_font_path('..\\fonts\\Vera.ttf')
336    test_utils.set_font_name('TEST_FONT_1')
337    test_utils.save_font_edit()
338
339    # add font VeraBd.ttf
340    test_utils.add_font()
341    test_utils.set_font_path('..\\fonts\\VeraBd.ttf')
342    test_utils.set_font_name('TEST_FONT_2')
343    test_utils.save_font_edit()
344
345    test_utils.click_resource_group('FONT_GROUP')
346
347    test_utils.edit_string()
348    test_utils.sort_string(test_constants.STRING_SORT_TYPE_ID)
349    test_utils.add_string()
350    test_utils.edit_string_id('STRING_1')
351    test_utils.edit_top_string('string 1')
352
353    test_utils.add_string()
354    test_utils.edit_string_id('STRING_2')
355    test_utils.edit_top_string('string 2')
356
357    test_utils.save_string_edit()
358
359    # open color group folder
360    test_utils.click_resource_group('COLOR_GROUP')
361
362    # add a new color
363    test_utils.add_color()
364    test_utils.set_color_name('COLOR_1')
365    test_utils.set_color_red(255)
366    test_utils.save_color_edit()
367
368    # add a new color
369    test_utils.add_color()
370    test_utils.set_color_name('COLOR_2')
371    test_utils.set_color_green(255)
372    test_utils.save_color_edit()
373
374    test_utils.click_resource_group('COLOR_GROUP')
375
376    test_utils.select_project_tree_node("base")
377    test_utils.edit_widget_props("ID_PIXELMAP_0", "BLACK_PAUSE")
378    test_utils.edit_widget_props("ID_NORMAL_COLOR", "COLOR_1")
379
380    test_utils.add_widget('GX_TYPE_PROMPT')
381    test_utils.edit_widget_props("ID_FONT_SELECT_0", "TEST_FONT_1")
382
383    test_utils.select_project_tree_node('base')
384    test_utils.add_widget("GX_TYPE_PROMPT")
385    test_utils.edit_widget_props("ID_XPOS", 116)
386    test_utils.edit_widget_props("ID_STRING_ID", 'STRING_1')
387
388    test_utils.select_project_tree_node("child_template_screen");
389    test_utils.compare_result()
390
391    test_utils.delete_pixelmap("BLACK_PAUSE")
392    test_utils.compare_result()
393
394    test_utils.click_resource_group('FONT_GROUP')
395    test_utils.delete_font("TEST_FONT_1")
396    test_utils.click_resource_group('FONT_GROUP')
397    test_utils.compare_result()
398
399    test_utils.click_resource_group('COLOR_GROUP')
400    test_utils.delete_color('COLOR_1')
401    test_utils.click_resource_group('COLOR_GROUP')
402    test_utils.compare_result()
403
404    test_utils.edit_string()
405    test_utils.select_string(1)
406    test_utils.delete_string()
407    test_utils.save_string_edit()
408    test_utils.compare_result()
409
410    test_utils.edit_string()
411    test_utils.select_string(0)
412    test_utils.delete_string()
413    test_utils.save_string_edit()
414    test_utils.compare_result()
415
416def run_template_name_test():
417    test_utils.select_project_tree_node("folder_1_window")
418    test_utils.compare_result()
419
420def run_template_tests(generate, screenshot):
421
422    test_utils.output_test_header(get_test_header())
423    test_utils.setup(generate, screenshot, 'test_template_golden_file')
424
425    # open test project
426    test_utils.open_project('template.gxp')
427
428    print("run template delete")
429    run_template_delete()
430
431    print("run_template_add")
432    run_template_add()
433
434    print("run template edit")
435    run_template_edit()
436
437    print("run template name test")
438    run_template_name_test()
439
440    test_utils.generate_all()
441    test_utils.click_generate_button(1)
442    test_utils.cmp_output_files(test_template_output_files)
443
444    print("run derived widget update")
445    run_derived_widget_update()
446
447    test_utils.write_end("Test Tempalte")
448
449
450