1# -*- coding: utf-8 -*-
2import os
3import sys
4import time
5import test_utils
6import test_constants
7import filecmp
8
9display_1_name = "main_display"
10display_2_name = "second_display"
11source_folder_1 = "source_folder_1"
12source_folder_2 = "source_folder_2"
13target_folder_1 = "target_folder_1"
14target_folder_2 = "target_folder_2"
15
16project_import_output_files_test1 = [
17"test_project_import_target_main_display_resources.c",
18"test_project_import_target_main_display_resources.h",
19"test_project_import_target_second_display_resources.c",
20"test_project_import_target_second_display_resources.h",
21"test_project_import_target_specifications.c",
22"test_project_import_target_specifications.h"]
23
24project_import_output_files_test2 = [
25"test_compile_imported_output_resources.c",
26"test_compile_imported_output_resources.h",
27"test_compile_imported_output_specifications.c",
28"test_compile_imported_output_specifications.h"]
29
30
31
32def get_test_header():
33    notes =  "*          Project Import Test                        *\n"
34    notes += "*                                                     *\n"
35    notes += "* Import screens from select project                  *\n"
36    notes += "* Import screens that based on template               *\n"
37    notes += "* Import duplicate strings                            *\n"
38    notes += "* Import duplicate colors                             *\n"
39    notes += "* Import screens to project that have multiple themes *\n"
40    return notes
41
42def add_target_colors():
43    test_utils.click_resource_group('COLOR_GROUP')
44    test_utils.add_color()
45    test_utils.set_color_name('green')
46    test_utils.set_color_red(15)
47    test_utils.set_color_green(235)
48    test_utils.set_color_blue(16)
49    test_utils.save_color_edit()
50
51    test_utils.add_color()
52    test_utils.set_color_name('red')
53    test_utils.set_color_hue(10)
54    test_utils.set_color_sat(60)
55    test_utils.set_color_lum(49)
56    test_utils.save_color_edit()
57    test_utils.click_resource_group('COLOR_GROUP')
58
59def add_source_colors():
60    test_utils.click_resource_group('COLOR_GROUP')
61    test_utils.add_color()
62    test_utils.set_color_name('green')
63    test_utils.set_color_red(15)
64    test_utils.set_color_green(100)
65    test_utils.set_color_blue(16)
66    test_utils.save_color_edit()
67
68    test_utils.add_color()
69    test_utils.set_color_name('red')
70    test_utils.set_color_hue(12)
71    test_utils.set_color_sat(88)
72    test_utils.set_color_lum(49)
73    test_utils.save_color_edit()
74    test_utils.click_resource_group('COLOR_GROUP')
75
76def add_target_strings():
77    test_utils.click_resource_group('STRING_GROUP')
78    test_utils.edit_string()
79
80    test_utils.add_string()
81    test_utils.edit_string_id('TEST_STRING_ID_1')
82    test_utils.edit_top_string('target_string_1')
83
84    test_utils.add_string()
85    test_utils.edit_string_id('TEST_STRING_ID_2')
86    test_utils.edit_top_string('target_string_2')
87
88    test_utils.add_string()
89    test_utils.edit_string_id('TEST_STRING_ID_3')
90    test_utils.edit_top_string('target_string_3')
91
92    test_utils.save_string_edit()
93    test_utils.click_resource_group('STRING_GROUP')
94
95def add_source_strings():
96    test_utils.click_resource_group('STRING_GROUP')
97    test_utils.edit_string()
98
99    test_utils.add_string()
100    test_utils.edit_string_id('TEST_STRING_ID_1')
101    test_utils.edit_top_string('source_string_4')
102
103    test_utils.add_string()
104    test_utils.edit_string_id('TEST_STRING_ID_2')
105    test_utils.edit_top_string('source_string_5')
106
107    test_utils.add_string()
108    test_utils.edit_string_id('TEST_STRING_ID_3')
109    test_utils.edit_top_string('source_string_6')
110
111    test_utils.save_string_edit()
112    test_utils.click_resource_group('STRING_GROUP')
113
114def run_new_project_create(project_name):
115
116    # create a new project
117    test_utils.toolbar_create()
118    test_utils.set_new_project_path(test_utils.DEFAULT_OUTPUT_FILE_PATH)
119    test_utils.set_new_project_name(project_name)
120    test_utils.save_new_project_create()
121
122    # configure project
123    test_utils.configure_project()
124    test_utils.configure_display_num(2)
125    test_utils.select_display_index(1)
126    test_utils.configure_x_res(640)
127    test_utils.configure_y_res(480)
128    test_utils.configure_display_name(display_1_name)
129    test_utils.select_display_index(2)
130    test_utils.configure_x_res(640)
131    test_utils.configure_y_res(480)
132    test_utils.configure_display_name(display_2_name)
133    test_utils.save_project_configure()
134
135    # close message dialog when create new and delete default_folder
136    test_utils.close_message_dialog()
137    test_utils.select_project_tree_node("default_folder")
138    test_utils.delete_folder(0)
139
140    # create folder
141    test_utils.select_project_tree_node(display_1_name)
142    if project_name == 'test_project_import_source':
143        test_utils.insert_folder()
144        test_utils.rename_folder(source_folder_1)
145    else:
146        test_utils.insert_folder()
147        test_utils.rename_folder(target_folder_1)
148
149    test_utils.select_project_tree_node(display_2_name)
150    if project_name == 'test_project_import_source':
151        test_utils.insert_folder()
152        test_utils.rename_folder(source_folder_2)
153    else:
154        test_utils.insert_folder()
155        test_utils.rename_folder(target_folder_2)
156
157    test_utils.select_project_tree_node(display_1_name)
158
159    # configure themes
160    test_utils.configure_themes()
161    test_utils.select_display_name('display_1')
162    test_utils.add_theme()
163    test_utils.add_theme()
164    test_utils.save_theme_configure()
165
166    # add fonts
167    test_utils.click_resource_group('FONT_GROUP')
168
169    test_utils.add_font()
170    test_utils.set_font_path('..\\..\\fonts\\Vera.ttf')
171    test_utils.set_font_name('NORMAL_FONT')
172    test_utils.set_font_format('GX_FONT_FORMAT_8BPP')
173    test_utils.set_font_height(28)
174    test_utils.save_font_edit()
175
176    test_utils.add_font()
177    test_utils.set_font_path('..\\..\\fonts\\Vera.ttf')
178    test_utils.set_font_name('MIDDLE_FONT')
179    test_utils.set_font_format('GX_FONT_FORMAT_8BPP')
180    test_utils.set_font_height(30)
181    test_utils.save_font_edit()
182
183    test_utils.click_resource_group('FONT_GROUP')
184
185    test_utils.add_pixelmaps('Custom', '..\\pixelmaps\\', 'red_apple.png')
186
187def edit_source_display_1():
188    #---------------------------------------#
189    #edit display 1                         #
190    #---------------------------------------#
191
192    test_utils.select_project_tree_node(source_folder_1)
193    test_utils.add_widget('GX_TYPE_WINDOW')
194    test_utils.edit_widget_props("ID_XPOS", 0)
195    test_utils.edit_widget_props("ID_YPOS", 0)
196    test_utils.edit_widget_props("ID_WIDTH", 640)
197    test_utils.edit_widget_props("ID_HEIGHT", 480)
198    test_utils.edit_widget_props("ID_PIXELMAP_0", "RED_APPLE")
199    test_utils.edit_widget_props("ID_WIDGET_NAME","base")
200    test_utils.edit_widget_props("ID_TEMPLATE", 1)
201
202    test_utils.select_project_tree_node(source_folder_1)
203    test_utils.add_template("base")
204    test_utils.edit_widget_props("ID_WIDGET_NAME","base_0")
205    test_utils.edit_widget_props("ID_TEMPLATE", 1)
206
207    test_utils.select_project_tree_node("base_0")
208    test_utils.add_widget('GX_TYPE_TEXT_BUTTON')
209    test_utils.edit_widget_props("ID_BORDER_COMBO", test_constants.BORDER_TYPE_RAISED)
210    test_utils.edit_widget_props("ID_XPOS", 293)
211    test_utils.edit_widget_props("ID_YPOS", 31)
212    test_utils.edit_widget_props("ID_WIDTH", 279)
213    test_utils.edit_widget_props("ID_HEIGHT", 151)
214    test_utils.edit_widget_props("ID_FONT_SELECT_0", "NORMAL_FONT")
215    test_utils.edit_widget_props("ID_NORMAL_COLOR", "green")
216    test_utils.edit_widget_props("ID_SELECTED_COLOR", "red")
217    test_utils.edit_widget_props("ID_STRING_ID", "TEST_STRING_ID_1")
218
219    test_utils.select_project_tree_node(source_folder_1)
220    test_utils.add_template("base_0")
221    test_utils.edit_widget_props("ID_WIDGET_NAME","base_1")
222    test_utils.edit_widget_props("ID_TEMPLATE", 1)
223
224    test_utils.select_project_tree_node("base_1")
225    test_utils.add_widget('GX_TYPE_TEXT_BUTTON')
226    test_utils.edit_widget_props("ID_BORDER_COMBO", test_constants.BORDER_TYPE_RAISED)
227    test_utils.edit_widget_props("ID_XPOS", 288)
228    test_utils.edit_widget_props("ID_YPOS", 235)
229    test_utils.edit_widget_props("ID_WIDTH", 304)
230    test_utils.edit_widget_props("ID_HEIGHT", 178)
231    test_utils.edit_widget_props("ID_FONT_SELECT_0", "MIDDLE_FONT")
232    test_utils.edit_widget_props("ID_STRING_ID", "TEST_STRING_ID_2")
233
234    test_utils.select_project_tree_node(source_folder_1)
235    test_utils.add_template("base_1")
236    test_utils.edit_widget_props("ID_WIDGET_NAME","derived_1")
237
238    test_utils.select_project_tree_node(source_folder_1)
239    test_utils.add_template("base_1")
240    test_utils.edit_widget_props("ID_WIDGET_NAME","derived_2")
241
242def edit_source_display_2():
243    #---------------------------------------#
244    #edit display 2                         #
245    #---------------------------------------#
246
247    test_utils.select_project_tree_node(source_folder_2)
248    test_utils.add_widget('GX_TYPE_WINDOW')
249    test_utils.edit_widget_props("ID_XPOS", 160)
250    test_utils.edit_widget_props("ID_YPOS", 120)
251    test_utils.edit_widget_props("ID_WIDTH", 320)
252    test_utils.edit_widget_props("ID_HEIGHT", 240)
253    test_utils.add_widget('GX_TYPE_BUTTON')
254    test_utils.edit_widget_props("ID_BORDER_COMBO", test_constants.BORDER_TYPE_RAISED)
255
256def edit_target_display_1():
257    import_project_name = os.path.abspath(test_utils.DEFAULT_OUTPUT_FILE_PATH) + '\\test_project_import_source.gxp'
258    test_utils.select_project_tree_node(display_1_name)
259    test_utils.select_project_tree_node(target_folder_1)
260    test_utils.import_project(import_project_name)
261    test_utils.save_project_import_dialog(test_utils.CLOSE_NO_WAIT)
262    test_utils.select_option(0)
263    test_utils.select_option(1)
264    test_utils.wait_dialog_close('IMPORT_PROJECT_DIALOG')
265    test_utils.select_project_tree_node("base")
266    test_utils.compare_result()
267    test_utils.select_project_tree_node("base_0")
268    test_utils.compare_result()
269    test_utils.select_project_tree_node("base_1")
270    test_utils.compare_result()
271    test_utils.select_project_tree_node("derived_1")
272    test_utils.compare_result()
273    test_utils.select_project_tree_node("derived_2")
274    test_utils.compare_result()
275
276    test_utils.select_project_tree_node(target_folder_1)
277    test_utils.import_project(import_project_name)
278    test_utils.check_import_screen("main_display", "base", 0)
279    test_utils.check_import_screen("main_display", "base_0", 0)
280    test_utils.check_import_screen("main_display", "base_1", 0)
281    test_utils.check_import_screen("main_display", "derived_1", 0)
282    test_utils.save_project_import_dialog(test_utils.CLOSE_NO_WAIT)
283    test_utils.select_option(2)
284    test_utils.wait_dialog_close('IMPORT_PROJECT_DIALOG')
285
286    # select window to make sure the import is success and screenshot will not be changed if studio is changed.
287    test_utils.select_project_tree_node('window_1')
288    test_utils.compare_result()
289
290def edit_target_display_2():
291    import_project_name = os.path.abspath(test_utils.DEFAULT_OUTPUT_FILE_PATH) + '\\test_project_import_source.gxp'
292    test_utils.select_project_tree_node(target_folder_2)
293    test_utils.import_project(import_project_name)
294    test_utils.check_import_screen("main_display", "base", 0)
295    test_utils.check_import_screen("main_display", "base_0", 0)
296    test_utils.check_import_screen("main_display", "base_1", 0)
297    test_utils.check_import_screen("main_display", "derived_1", 0)
298    test_utils.save_project_import_dialog()
299
300    # select window to make sure the import is success and screenshot will not be changed if studio is changed.
301    test_utils.select_project_tree_node('window_1')
302    test_utils.compare_result()
303
304def test_compile_imported_output():
305    # create a new project
306    test_utils.toolbar_create()
307    test_utils.set_new_project_path(test_utils.DEFAULT_OUTPUT_FILE_PATH)
308    test_utils.set_new_project_name("test_compile_imported_output")
309    test_utils.save_new_project_create()
310
311    # configure project
312    test_utils.configure_project()
313    test_utils.configure_display_num(1)
314    test_utils.select_display_index(1)
315    test_utils.configure_x_res(640)
316    test_utils.configure_y_res(480)
317    test_utils.configure_display_name(display_1_name)
318    test_utils.save_project_configure()
319
320    # create folder
321    test_utils.close_message_dialog()
322    test_utils.select_project_tree_node("window")
323    test_utils.delete_widget(0)
324
325    test_utils.select_project_tree_node("default_folder")
326    test_utils.add_widget('GX_TYPE_WINDOW')
327    test_utils.edit_widget_props("ID_XPOS", 0)
328    test_utils.edit_widget_props("ID_YPOS", 0)
329    test_utils.edit_widget_props("ID_WIDTH", 320)
330    test_utils.edit_widget_props("ID_HEIGHT", 240)
331    test_utils.select_project_tree_node("default_folder")
332    test_utils.add_widget('GX_TYPE_WINDOW')
333    test_utils.edit_widget_props("ID_XPOS", 160)
334    test_utils.edit_widget_props("ID_YPOS", 120)
335    test_utils.edit_widget_props("ID_WIDTH", 320)
336    test_utils.edit_widget_props("ID_HEIGHT", 240)
337    test_utils.edit_widget_props("ID_WIDGET_NAME","window_2")
338    test_utils.toolbar_save()
339
340    import_project_name = os.path.abspath(test_utils.DEFAULT_OUTPUT_FILE_PATH) + "\\test_compile_imported_output.gxp"
341    test_utils.select_project_tree_node("default_folder")
342    test_utils.import_project(import_project_name)
343    test_utils.save_project_import_dialog()
344    test_utils.toolbar_save()
345    test_utils.generate_all()
346    test_utils.click_generate_button()
347    test_utils.cmp_output_files(project_import_output_files_test2)
348
349
350def run_project_import_tests(generate, screenshot):
351    test_utils.output_test_header(get_test_header())
352    test_utils.setup(generate, screenshot, 'test_project_import_golden_file')
353
354    print('create source project')
355    run_new_project_create("test_project_import_source")
356    add_source_colors()
357    add_source_strings()
358
359    edit_source_display_1()
360    edit_source_display_2()
361
362    test_utils.toolbar_save()
363
364    print('create target project')
365    run_new_project_create("test_project_import_target")
366    add_target_colors()
367    add_target_strings()
368
369    #just to help with testing
370    test_utils.toolbar_save();
371
372    edit_target_display_1()
373    edit_target_display_2()
374
375    #test undo project import
376    test_utils.undo()
377    test_utils.undo()
378
379    #test if template info is deleted when delete a folder
380    test_utils.select_project_tree_node("target_folder_1")
381    test_utils.delete_folder(0)
382    test_utils.select_project_tree_node("target_folder_2")
383    test_utils.undo()
384
385    test_utils.toolbar_save()
386    test_utils.generate_all()
387    test_utils.click_generate_button()
388    test_utils.cmp_output_files(project_import_output_files_test1)
389
390    #test of compile the output after import: test bug fixed in revistion 12591
391    test_compile_imported_output()
392
393    test_utils.write_end('Project Import Tests')