1import test_utils
2import test_constants
3
4display_name = "display_1"
5folder_name = "default_folder"
6
7test_copy_paste_output_files = [
8"test_copy_paste_resources.c",
9"test_copy_paste_resources.h",
10"test_copy_paste_specifications.c",
11"test_copy_paste_specifications.h"]
12
13def get_test_header():
14    notes =  "*          Studio Copy/Paste Widgets Test             *\n"
15    notes += "*                                                     *\n"
16    notes += "* Copy and Paste widgets to an empty project with     *\n"
17    notes += "*   pixlemap folder been removed                      *\n"
18    return notes
19
20def run_new_project_create(path, name):
21    # create a new project
22    test_utils.toolbar_create()
23    test_utils.set_new_project_path(path)
24    test_utils.set_new_project_name(name)
25    test_utils.save_new_project_create()
26
27    # configure project
28    test_utils.configure_project()
29    test_utils.configure_x_res(800)
30    test_utils.configure_y_res(480)
31    test_utils.configure_display_name('display_1')
32    test_utils.configure_display_color_format('GX_COLOR_FORMAT_565RGB')
33    test_utils.configure_source_path('output_files')
34    test_utils.configure_header_path('output_files')
35    test_utils.configure_resource_path('output_files')
36    test_utils.save_project_configure()
37
38    # close message dialog when create new and delete default window
39    test_utils.close_message_dialog()
40    test_utils.select_project_tree_node("window")
41    test_utils.delete_widget(0)
42
43    # configure languages
44    test_utils.configure_languages()
45    test_utils.add_language()
46    test_utils.add_language()
47    test_utils.select_language_index(2)
48    test_utils.select_language_id('Latin')
49    test_utils.select_language_index(3)
50    test_utils.select_language_id('French')
51    test_utils.save_language_configure()
52
53    #edit string table
54    test_utils.edit_string()
55
56    test_utils.sort_string(test_constants.STRING_SORT_TYPE_ID)
57    test_utils.save_string_edit()
58
59    test_utils.toolbar_save()
60
61def run_copy_paste_folder():
62    print("test copy-paste with folder")
63    base_screen = 'base_screen'
64    folder_1 = 'default_folder_1'
65    folder_2 = 'default_folder_2'
66    folder_3 = 'default_folder_3'
67    derived_1 = 'derived_1'
68    derived_2 = 'derived_2'
69    test_utils.select_project_tree_node(folder_name)
70    test_utils.toolbar_copy()#copy default folder
71    test_utils.toolbar_paste_no_wait()#paste to default folder
72    test_utils.close_message_dialog()#notify that paste to folder is not allowed
73
74    test_utils.select_project_tree_node(display_name)
75    test_utils.toolbar_paste_no_wait()#paste to display
76
77    test_utils.select_project_tree_node('window')
78    test_utils.toolbar_copy()
79    test_utils.select_project_tree_node(folder_1)
80    test_utils.toolbar_paste()#paste window to default folder 1
81
82    test_utils.select_project_tree_node('window_2')
83    test_utils.edit_widget_props("ID_WIDGET_NAME", base_screen)
84    test_utils.edit_widget_props("ID_TEMPLATE", 1)
85    test_utils.select_project_tree_node(folder_1)
86    test_utils.add_template(base_screen)
87    test_utils.edit_widget_props("ID_WIDGET_NAME",derived_1)
88
89    test_utils.select_project_tree_node(folder_1)
90    test_utils.toolbar_copy()
91    test_utils.select_project_tree_node(display_name)
92    test_utils.toolbar_paste_no_wait()
93    test_utils.close_message_dialog()#notify to skip paste template "base_screen"
94
95    test_utils.select_project_tree_node(derived_1)
96    test_utils.edit_widget_props("ID_TEMPLATE", 1)
97    test_utils.select_project_tree_node(folder_1)
98    test_utils.add_template(derived_1)
99    test_utils.edit_widget_props("ID_WIDGET_NAME",derived_2)
100
101    test_utils.select_project_tree_node(folder_1)
102    test_utils.toolbar_copy()
103    test_utils.select_project_tree_node(display_name)
104    test_utils.toolbar_paste_no_wait()
105    test_utils.close_message_dialog()#notify to skip paste template "derived_1"
106    test_utils.close_message_dialog()#notify to skip paste template "base_screen"
107
108    test_utils.select_project_tree_node(folder_3)
109    test_utils.delete_folder()
110    test_utils.select_project_tree_node(folder_2)
111    test_utils.delete_folder()
112    test_utils.select_project_tree_node(folder_1)
113    test_utils.delete_folder()
114
115    test_utils.select_project_tree_node(display_name)
116    test_utils.insert_folder()
117    test_utils.rename_folder(folder_name)
118    test_utils.close_message_dialog()#notify that folder name already exist
119    test_utils.select_project_tree_node(folder_1)
120    test_utils.toolbar_copy()
121    test_utils.select_project_tree_node(display_name)
122    test_utils.toolbar_paste_no_wait()
123
124    test_utils.select_project_tree_node(display_name)
125    test_utils.insert_folder()
126    test_utils.rename_folder('a_folder')
127    test_utils.select_project_tree_node(display_name)
128    test_utils.insert_folder()
129    test_utils.rename_folder('b_folder')
130    test_utils.select_project_tree_node('b_folder')
131    test_utils.delete_folder()
132    test_utils.select_project_tree_node('a_folder')
133    test_utils.delete_folder()
134
135def run_copy_paste_template():
136    test_utils.select_project_tree_node(folder_name)
137
138    base_name = 'base'
139    derived_name = 'derived'
140
141    # add a template
142    test_utils.add_widget('GX_TYPE_WINDOW');
143    test_utils.edit_widget_props('ID_WIDGET_NAME', base_name)
144    test_utils.edit_widget_props('ID_TEMPLATE', 1)
145
146    # add a child widget to the template
147    test_utils.select_project_tree_node(base_name)
148    test_utils.add_widget('GX_TYPE_BUTTON');
149
150    # copy/paste template as a top level screen
151    test_utils.select_project_tree_node(base_name)
152    test_utils.toolbar_copy()
153    test_utils.select_project_tree_node(folder_name)
154    test_utils.toolbar_paste_no_wait()
155    test_utils.close_message_dialog()#notify template already exist.
156
157    # copy/paste template to a top level screen
158    test_utils.select_project_tree_node(folder_name)
159    test_utils.add_widget('GX_TYPE_WINDOW')
160    test_utils.edit_widget_props('ID_WIDGET_NAME', 'parent_screen')
161    test_utils.toolbar_paste_no_wait();
162    test_utils.close_message_dialog()#notify template can only be pasted to folder node
163
164    # delete template
165    test_utils.select_project_tree_node(base_name)
166    test_utils.delete_widget()
167
168    # paste template widget to default folder
169    test_utils.select_project_tree_node(folder_name)
170    test_utils.toolbar_paste();
171
172    # add a derived widget from template
173    test_utils.select_project_tree_node(folder_name)
174    test_utils.add_template(base_name)
175    test_utils.edit_widget_props("ID_WIDGET_NAME", derived_name)
176    test_utils.add_widget('GX_TYPE_PROMPT')
177    test_utils.edit_widget_props("ID_STRING_VAL", "derived")
178
179    # copy derived widget
180    test_utils.select_project_tree_node(derived_name)
181    test_utils.toolbar_copy()
182
183    # delete derived widget
184    test_utils.select_project_tree_node(derived_name)
185    test_utils.delete_widget()
186
187    # delete base widget
188    test_utils.select_project_tree_node(base_name)
189    test_utils.delete_widget()
190
191    # paste derived widget to default folder
192    test_utils.select_project_tree_node(folder_name)
193    test_utils.toolbar_paste()
194
195    # delete derived widget
196    test_utils.select_project_tree_node(derived_name)
197    test_utils.delete_widget()
198
199    # delete base wiget
200    test_utils.select_project_tree_node(base_name)
201    test_utils.delete_widget()
202
203    # create a widget that duplicate template name
204    test_utils.select_project_tree_node(folder_name)
205    test_utils.add_widget('GX_TYPE_WINDOW')
206    test_utils.edit_widget_props('ID_WIDGET_NAME', base_name)
207
208    # paste derived widget to parent screen
209    test_utils.select_project_tree_node('parent_screen')
210    test_utils.toolbar_paste_no_wait()
211    test_utils.close_message_dialog() # notify template name already exist
212
213    # delete widget that duplicate template name
214    test_utils.select_project_tree_node(base_name)
215    test_utils.delete_widget()
216
217    # paste derived widget to parent screen
218    test_utils.select_project_tree_node('parent_screen')
219    test_utils.toolbar_paste()
220
221    # paste derived widget to parent screen
222    test_utils.select_project_tree_node('parent_screen')
223    test_utils.toolbar_paste()
224
225def run_copy_paste_tests(generate, screenshot):
226    test_utils.output_test_header(get_test_header())
227    test_utils.setup(generate, screenshot, 'test_copy_paste_golden_file')
228
229    test_project = 'test_copy_paste'
230    print('create a new project: %s' %(test_project))
231    run_new_project_create('./', test_project)
232
233    #remove custom pixelmap folder
234    test_utils.click_resource_group('PIXELMAP_GROUP')
235    test_utils.remove_pixelmap_folder('Custom')
236    test_utils.click_resource_group('PIXELMAP_GROUP')
237    test_utils.toolbar_save()
238
239    #copy widgets to empty project with pixelmap folder being removed
240    print('copy from generic_16bpp.gxp to %s.gxp' %(test_project))
241    test_utils.open_project('generic_16bpp.gxp')
242    test_utils.select_project_tree_node('window')
243    test_utils.toolbar_copy()
244    test_utils.open_project(test_project+'.gxp')
245    test_utils.select_project_tree_node(folder_name)
246    test_utils.toolbar_paste()
247
248    #copy "window"
249    test_utils.select_project_tree_node("window")
250    test_utils.toolbar_copy()
251
252    #paste "window" to "display_1"
253    test_utils.select_project_tree_node(folder_name)
254    test_utils.toolbar_paste()
255
256    #copy/paste multiple widgets
257    test_utils.select_multi_widgets("window_1")
258    test_utils.select_multi_widgets("prompt_1")
259    test_utils.select_multi_widgets("text_input_2")
260    test_utils.toolbar_copy()
261    test_utils.select_project_tree_node("window")
262    test_utils.toolbar_paste()
263
264    #test copy/paste folders
265    run_copy_paste_folder()
266
267    #test copy/paste template
268    run_copy_paste_template()
269
270    #generate output files
271    test_utils.generate_all()
272    test_utils.click_generate_button(1)
273    test_utils.cmp_output_files(test_copy_paste_output_files)
274
275    test_utils.toolbar_save()
276
277    test_utils.write_end('Copy/Paste Tests')
278