1import os
2import sys
3import time
4import test_utils
5import test_constants
6
7theme_names = ['theme0', 'theme1', 'theme2']
8bad_theme_name = "#badname"
9
10multi_themes_output_files = [
11"multi_themes_resources.c",
12"multi_themes_resources.h",
13"multi_themes_specifications.c",
14"multi_themes_specifications.h",
15"multi_themes_resources_big_endian.c",
16"multi_themes_resources_big_endian.h"]
17
18def get_test_header():
19
20    notes =  "*          Studio Multi Themes Tests                  *\n"
21    notes += "*                                                     *\n"
22    notes += "* Add and Edit multiple themes                        *\n"
23    notes += "* Little endian source format resource generation     *\n"
24    notes += "* Big endian source format resource generation        *\n"
25    notes += "* Binary format generation                            *\n"
26    notes += "* Test if delete pixelmap folder is in sync           *\n"
27    notes += "* Test if add pixelmap folder is in sync              *\n"
28    notes += "* Test if edit pixelmap folder name is in sync        *\n"
29    return notes
30
31def run_new_project_create(name):
32    # create a new project
33    test_utils.toolbar_create()
34    test_utils.set_new_project_path(test_utils.DEFAULT_OUTPUT_FILE_PATH)
35    test_utils.set_new_project_name(name)
36    test_utils.save_new_project_create()
37
38    # configure project
39    test_utils.configure_project()
40    test_utils.configure_x_res(640)
41    test_utils.configure_y_res(480)
42    test_utils.configure_display_name('display_1')
43    test_utils.configure_canvas_allocate(0);
44    test_utils.save_project_configure()
45
46    # close message dialog when create new and delete default folder
47    test_utils.close_message_dialog()
48    test_utils.select_project_tree_node("default_folder")
49    test_utils.delete_folder(0)
50
51    # configure languages
52    test_utils.configure_languages()
53    test_utils.add_language()
54    test_utils.add_language()
55    test_utils.select_language_index(2)
56    test_utils.select_language_id('Latin')
57    test_utils.select_language_index(3)
58    test_utils.select_language_id('French')
59    test_utils.save_language_configure()
60
61    test_utils.toolbar_save()
62
63def run_configure_themes():
64    test_utils.configure_themes()
65    test_utils.select_display_name('display_1')
66    test_utils.add_theme()
67    test_utils.add_theme()
68
69    # bad name testing
70    test_utils.select_theme_index(2)
71    test_utils.set_theme_name(bad_theme_name)
72    test_utils.post_select_theme_index(3)
73    # a message will popup to notify that the theme name is
74    # not meet ANSCII C name rules
75    test_utils.close_message_dialog()
76
77    test_utils.post_select_theme_index(1)
78    test_utils.close_message_dialog()
79
80    test_utils.save_theme_configure(test_utils.CLOSE_NO_WAIT)
81    test_utils.close_message_dialog()
82    test_utils.set_theme_name("theme_name")
83
84    for theme in theme_names:
85        test_utils.select_theme_index(theme_names.index(theme) + 1)
86        test_utils.set_theme_name(theme)
87
88    test_utils.save_theme_configure()
89
90def set_active_theme(theme_name):
91    test_utils.configure_themes()
92    test_utils.set_active_theme(theme_name)
93    test_utils.save_theme_configure()
94
95def run_add_resources():
96    # add font Vera.ttf
97    test_utils.click_resource_group('FONT_GROUP')
98    test_utils.add_font()
99    test_utils.set_font_path('..\\..\\fonts\\Vera.ttf')
100    test_utils.set_font_name('BIG_FONT')
101    test_utils.set_font_format('GX_FONT_FORMAT_8BPP')
102    test_utils.set_font_height(30)
103    test_utils.save_font_edit()
104
105    test_utils.add_font()
106    test_utils.set_font_path('..\\..\\fonts\\Vera.ttf')
107    test_utils.set_font_name('SMALL_FONT')
108    test_utils.set_font_format('GX_FONT_FORMAT_8BPP')
109    test_utils.set_font_height(10)
110    test_utils.save_font_edit()
111
112    test_utils.click_resource_group('FONT_GROUP')
113
114    # add color
115    test_utils.click_resource_group('COLOR_GROUP')
116    test_utils.add_color()
117    test_utils.set_color_name('GREEN')
118    test_utils.set_color_red(102)
119    test_utils.set_color_green(201)
120    test_utils.set_color_blue(159)
121    test_utils.save_color_edit()
122
123    test_utils.add_color()
124    test_utils.set_color_name('RED')
125    test_utils.set_color_red(216)
126    test_utils.set_color_green(121)
127    test_utils.set_color_blue(140)
128    test_utils.save_color_edit()
129    test_utils.click_resource_group('COLOR_GROUP')
130
131    #Add pixelmap folder
132    test_utils.add_pixelmap_folder()
133    test_utils.set_folder_name('folder_2')
134    test_utils.save_folder_name_edit()
135
136    test_utils.add_pixelmap_folder()
137    test_utils.set_folder_name('folder_3')
138    test_utils.save_folder_name_edit()
139
140    #Add pixelmaps
141    test_utils.click_resource_group('PIXELMAP_GROUP')
142    test_utils.add_pixelmaps('Custom', '..\\pixelmaps\\', 'save_icon.png')
143    test_utils.add_pixelmaps('folder_2', '..\\pixelmaps\\', 'orange_button.png')
144    test_utils.add_pixelmaps('folder_3', '..\\pixelmaps\\', 'bg_tile.png')
145    test_utils.click_resource_group('PIXELMAP_GROUP')
146
147    test_utils.click_resource_group('PIXELMAP_GROUP')
148    test_utils.remove_pixelmap_folder('folder_3')
149    test_utils.click_resource_group('PIXELMAP_GROUP')
150
151    #Add strings
152    test_utils.edit_string()
153    test_utils.sort_string(test_constants.STRING_SORT_TYPE_ID)
154    test_utils.add_string()
155    test_utils.edit_string_id('STRING_0')
156    test_utils.edit_top_string('string 0')
157    test_utils.add_string()
158    test_utils.edit_string_id('STRING_8')
159    test_utils.edit_top_string('string 8')
160    test_utils.add_string()
161    test_utils.edit_string_id('STRING_2')
162    test_utils.edit_top_string('string 2')
163    test_utils.add_string()
164    test_utils.edit_string_id('STRING_3')
165    test_utils.edit_top_string('string 3')
166    test_utils.save_string_edit()
167
168def run_add_widgets():
169    test_utils.select_project_tree_node('display_1')
170
171    #create default folder to add widget
172    test_utils.insert_folder()
173    test_utils.select_project_tree_node('default_folder')
174
175    test_utils.add_widget('GX_TYPE_WINDOW')
176    test_utils.edit_widget_props("ID_WIDGET_NAME", "simple_window")
177    test_utils.edit_widget_props("ID_NORMAL_COLOR", "RED")
178    test_utils.edit_widget_props("ID_XPOS", 160)
179    test_utils.edit_widget_props("ID_YPOS", 120)
180    test_utils.edit_widget_props("ID_WIDTH", 320)
181    test_utils.edit_widget_props("ID_HEIGHT", 240)
182
183    test_utils.select_project_tree_node('simple_window')
184    test_utils.add_widget('GX_TYPE_ICON')
185    test_utils.edit_widget_props("ID_PIXELMAP_0", 'SAVE_ICON')
186    test_utils.edit_widget_props("ID_XPOS", 207)
187    test_utils.edit_widget_props("ID_YPOS", 148)
188    test_utils.edit_widget_props("ID_WIDTH", 18)
189    test_utils.edit_widget_props("ID_HEIGHT", 18)
190
191    test_utils.select_project_tree_node('simple_window')
192    test_utils.add_widget('GX_TYPE_PIXELMAP_PROMPT')
193    test_utils.edit_widget_props("ID_PIXELMAP_0", 'ORANGE_BUTTON')
194    test_utils.edit_widget_props("ID_FONT_SELECT_0", 'SMALL_FONT')
195    test_utils.edit_widget_props("ID_NORMAL_COLOR", "GREEN")
196    test_utils.edit_widget_props("ID_XPOS", 252)
197    test_utils.edit_widget_props("ID_YPOS", 212)
198    test_utils.edit_widget_props("ID_WIDTH", 141)
199    test_utils.edit_widget_props("ID_HEIGHT", 70)
200
201    test_utils.select_project_tree_node('simple_window')
202    test_utils.add_widget('GX_TYPE_PROMPT')
203    test_utils.edit_widget_props("ID_STRING_ID", "STRING_8")
204    test_utils.edit_widget_props("ID_XPOS", 292)
205    test_utils.edit_widget_props("ID_YPOS", 147)
206
207    test_utils.select_project_tree_node('simple_window')
208    test_utils.add_widget('GX_TYPE_PROMPT')
209    test_utils.edit_widget_props("ID_STRING_ID", "STRING_2")
210    test_utils.edit_widget_props("ID_XPOS", 186)
211    test_utils.edit_widget_props("ID_YPOS", 310)
212
213def edit_resource_in_theme_2():
214    #edit color
215    test_utils.click_resource_group('COLOR_GROUP')
216    test_utils.delete_color('GREEN')
217    test_utils.edit_color('RED')
218    test_utils.set_color_name('NEW_RED')
219    test_utils.set_color_red(47)
220    test_utils.set_color_green(136)
221    test_utils.set_color_blue(200)
222    test_utils.save_color_edit()
223    test_utils.click_resource_group('COLOR_GROUP')
224
225    #edit font
226    test_utils.click_resource_group('FONT_GROUP')
227    test_utils.delete_font('BIG_FONT')
228    test_utils.edit_font('SMALL_FONT')
229    test_utils.set_font_name('NEW_SMALL_FONT')
230    test_utils.set_font_height(30)
231    test_utils.save_font_edit()
232    test_utils.click_resource_group('FONT_GROUP')
233
234    #edit pixelmap
235    test_utils.click_resource_group('PIXELMAP_GROUP')
236    test_utils.click_pixelmap_folder('DEFAULT_PIXELMAP_FOLDER', 'System')
237    test_utils.disable_pixelmap('CHECKBOX_OFF')
238    test_utils.disable_pixelmap('CHECKBOX_ON')
239    test_utils.click_pixelmap_folder('DEFAULT_PIXELMAP_FOLDER', 'System')
240
241    test_utils.click_pixelmap_folder('CUSTOM_PIXELMAP_FOLDER', 'Custom')
242    test_utils.delete_pixelmap('SAVE_ICON')
243    test_utils.click_pixelmap_folder('CUSTOM_PIXELMAP_FOLDER', 'Custom')
244
245    test_utils.click_pixelmap_folder('CUSTOM_PIXELMAP_FOLDER', 'folder_2')
246    test_utils.edit_pixelmap('ORANGE_BUTTON')
247    test_utils.set_image_path('..\\..\\pixelmaps\\black_pause.png')
248    test_utils.set_image_id_name('NEW_ORANGE_BUTTON')
249    test_utils.save_pixelmap_edit();
250    test_utils.click_pixelmap_folder('CUSTOM_PIXELMAP_FOLDER', 'folder_2')
251    test_utils.click_resource_group('PIXELMAP_GROUP')
252
253def edit_resource_in_theme_0():
254    #edit color
255    test_utils.click_resource_group('COLOR_GROUP')
256    test_utils.edit_color('NEW_RED')
257    test_utils.set_color_red(192)
258    test_utils.set_color_green(80)
259    test_utils.set_color_blue(53)
260    test_utils.save_color_edit()
261    test_utils.click_resource_group('COLOR_GROUP')
262
263    #edit font
264    test_utils.click_resource_group('FONT_GROUP')
265    test_utils.edit_font('NEW_SMALL_FONT')
266    test_utils.set_font_height(20)
267    test_utils.save_font_edit()
268    test_utils.click_resource_group('FONT_GROUP')
269
270    #edit pixelmap
271    test_utils.click_resource_group('PIXELMAP_GROUP')
272    test_utils.click_pixelmap_folder('CUSTOM_PIXELMAP_FOLDER', 'folder_2')
273    test_utils.edit_pixelmap('NEW_ORANGE_BUTTON')
274    test_utils.set_image_path('..\\..\\pixelmaps\\red_apple.png')
275    test_utils.click_pixelmap_folder('CUSTOM_PIXELMAP_FOLDER', 'folder_2')
276    test_utils.save_pixelmap_edit()
277    test_utils.click_resource_group('PIXELMAP_GROUP')
278
279def add_delete_pixelmap_folder():
280    #set 'NEW_ORANGE_BUTTON' to 8bit palette format
281    test_utils.click_resource_group('PIXELMAP_GROUP')
282    test_utils.click_pixelmap_folder('CUSTOM_PIXELMAP_FOLDER', 'folder_2')
283    test_utils.edit_pixelmap('NEW_ORANGE_BUTTON')
284    test_utils.set_output_format('GX_COLOR_FORMAT_8BIT_PALETTE')
285    test_utils.set_palette_type('PALETTE_TYPE_SHARED')
286    test_utils.save_pixelmap_edit()
287    test_utils.click_pixelmap_folder('CUSTOM_PIXELMAP_FOLDER', 'folder_2')
288    test_utils.click_resource_group('PIXELMAP_GROUP')
289
290    #copy 'prompt'
291    test_utils.select_project_tree_node('prompt')
292    test_utils.toolbar_copy()
293
294    #delete 'Custom' pixelmap folder
295    test_utils.click_resource_group('PIXELMAP_GROUP')
296    test_utils.remove_pixelmap_folder('folder_2')
297    test_utils.compare_result()
298
299    set_active_theme(theme_names[1])
300    test_utils.compare_result()
301
302    set_active_theme(theme_names[0])
303    test_utils.compare_result()
304
305    #paste 'prompt' to 'simple_window'
306    test_utils.select_project_tree_node('simple_window')
307    test_utils.toolbar_paste()
308
309    #reset active theme
310    set_active_theme(theme_names[1])
311    test_utils.compare_result()
312
313    #reset active theme
314    set_active_theme(theme_names[2])
315    test_utils.compare_result()
316
317    #add a new pixelmap folder 'test_folder'
318    test_utils.add_pixelmap_folder()
319    test_utils.set_folder_name('test_folder')
320    test_utils.save_folder_name_edit()
321
322    #reset active theme
323    set_active_theme(theme_names[1])
324
325    #add a pixlemap to 'test_folder'
326    test_utils.click_resource_group('PIXELMAP_GROUP')
327    test_utils.click_pixelmap_folder('CUSTOM_PIXELMAP_FOLDER', 'test_folder')
328    test_utils.add_pixelmaps('test_folder', '..\\pixelmaps\\', 'save_icon.png')
329    test_utils.click_pixelmap_folder('CUSTOM_PIXELMAP_FOLDER', 'test_folder')
330    test_utils.click_resource_group('PIXELMAP_GROUP')
331
332    #set new pixelmap to 'simple_window'
333    test_utils.select_project_tree_node('simple_window')
334    test_utils.edit_widget_props("ID_PIXELMAP_0", test_constants.PIXELMAP_SAVE_ICON)
335    test_utils.compare_result()
336
337
338def run_multi_themes_tests(generate, screenshot):
339
340    test_utils.output_test_header(get_test_header())
341    test_utils.setup(generate, screenshot, 'test_multi_themes_golden_file')
342
343    run_new_project_create("multi_themes")
344    run_configure_themes()
345    set_active_theme(theme_names[1])
346    test_utils.compare_result()
347
348    run_add_resources()
349    run_add_widgets()
350    test_utils.compare_result()
351
352    set_active_theme(theme_names[0])
353    test_utils.compare_result()
354
355    set_active_theme(theme_names[2])
356    test_utils.compare_result()
357
358    edit_resource_in_theme_2()
359    test_utils.compare_result()
360
361    set_active_theme(theme_names[1])
362    test_utils.compare_result()
363
364    set_active_theme(theme_names[0])
365    test_utils.compare_result()
366
367    edit_resource_in_theme_0()
368    test_utils.compare_result()
369
370    set_active_theme(theme_names[1])
371    test_utils.compare_result()
372
373    set_active_theme(theme_names[2])
374    test_utils.compare_result()
375
376    #test if configure language will broke string table
377    test_utils.configure_languages()
378    test_utils.save_language_configure()
379    test_utils.edit_string()
380    test_utils.cancel_string_edit()
381
382    test_utils.generate_all()
383    test_utils.check_resource('display_1', 'theme0', 0)
384    test_utils.check_resource('Languages', 'Latin', 0)
385    test_utils.click_generate_button()
386
387    test_utils.configure_project()
388    test_utils.configure_big_endian(1)
389    test_utils.save_project_configure()
390
391    add_delete_pixelmap_folder()
392
393    test_utils.generate_resources()
394    test_utils.set_custom_resource_name("multi_themes_resources_big_endian")
395    test_utils.click_generate_button()
396
397    test_utils.cmp_output_files(multi_themes_output_files)
398    test_utils.close_project
399
400    test_utils.write_end('Multi-Themes Tests')
401