1import os
2import sys
3import subprocess
4import argparse
5import test_utils
6import logging
7import time
8import atexit
9from test_color_formats import run_color_format_tests
10from test_resources_edit import run_resources_edit_tests
11from test_add_widget import run_add_widget_tests
12from test_toolbar import run_toolbar_tests
13from test_copy_paste import run_copy_paste_tests
14from test_copy_paste_between_projects import run_copy_paste_between_projects_tests
15from test_copy_paste_color import run_copy_paste_color_tests
16from test_copy_paste_multi import run_copy_paste_multi_tests
17from test_font import run_font_tests
18from test_multi_themes import run_multi_themes_tests
19from test_scroll_wheel_widget import run_scroll_wheel_widget_tests
20from test_menu_widget import run_menu_widget_tests
21from test_project_import import run_project_import_tests
22from test_trigger_edit import run_trigger_edit_tests
23from test_bidi_text import run_bidi_text_tests
24from test_undo import run_undo_tests
25from test_lock_unlock_widget_pos import run_lock_unlock_widget_pos_tests
26from test_widget_name import run_widget_name_tests
27from test_app_run import run_app_tests
28from test_text_input_text_set import run_text_input_text_set_tests
29from test_pixelmap_edit import run_pixelmap_edit_tests
30from test_radial_slider_widget import run_radial_slider_widget_tests
31from test_project_display_configure import run_project_display_configure_tests
32from test_string_import_export import run_string_import_export_tests
33from test_template import run_template_tests
34from test_synergy_setting import run_synergy_setting_tests
35from test_trigger_target_rename import run_trigger_target_rename_tests
36from test_theme_edit import run_theme_edit_tests
37from test_language_edit import run_language_edit_tests
38from test_guix_lib_version_set import run_guix_lib_version_set_tests
39from test_rich_text_view import run_rich_text_view_tests
40from test_sprite import run_sprite_tests
41from test_gauge import run_gauge_tests
42from test_ml_view import run_ml_view_tests
43from test_generic_scroll_wheel import run_generic_scroll_wheel_tests
44from test_unique_bidi_text_reference_check import run_unique_bidi_text_reference_check_tests
45from test_range_check import run_range_check_tests
46from test_list_resize import run_list_resize_tests
47from test_kerning_flag import run_kerning_flag_tests
48from test_resource_xml import run_resource_xml_tests
49try:
50    from junit_xml import TestSuite
51except ImportError:
52    print("junit_xml module not found. Please install it by running 'pip install junit_xml' if you want to generate JUnit XML report.")
53
54def exit_handler():
55    test_utils.close_project()
56    test_utils.close_window("main_frame")
57    test_utils.delete_temp_files()
58
59atexit.register(exit_handler)
60
61def output_file_header():
62    logging.info("*****************************************************")
63    logging.info("*       Studio application usage/view test          *")
64    logging.info("*                                                   *")
65    logging.info("*                                                   *")
66    logging.info("*****************************************************")
67    logging.info("  Test date: %s", time.asctime())
68    logging.info("  Test directory: %s", os.getcwd())
69
70def __main__():
71
72    Format = '%(message)s'
73    logging.basicConfig(stream=test_utils.test_log_stream, level=logging.DEBUG, format=Format)
74
75    msbuild_exe_path = "C:/Windows/Microsoft.NET/Framework64/v4.0.30319/MSBuild.exe"
76    project_sln_path = "../../../guix_studio/build/vs_2019/studiox.sln"
77
78    parser = argparse.ArgumentParser(description = "Test Studio UI")
79    parser.add_argument('-b', action='store_true', dest='build_studio', help='Build Studio')
80    parser.add_argument('-c', action='store_true', dest='run_color_format_tests', help = 'Run color format tests')
81    parser.add_argument('--resources_edit', action='store_true', dest='run_resources_edit_tests', help = 'Run resources edit tests')
82    parser.add_argument('-w', action='store_true', dest='run_widget_tests', help = 'Run Widget tests')
83    parser.add_argument('--menu_widget', action='store_true', dest='run_menu_widget_tests', help = 'Run menu widget tests')
84    parser.add_argument('--project_import', action='store_true', dest='run_project_import_tests', help = 'Run project import tests')
85    parser.add_argument('--scroll_wheel_widget', action='store_true', dest='run_scroll_wheel_widget_tests', help = 'Run scroll wheel widget tests')
86    parser.add_argument('-t', action='store_true', dest='run_toolbar_tests', help = 'Run toolbar tests')
87    parser.add_argument('-g', action='store_true', dest='generate', help = 'Generate golden files')
88    parser.add_argument('-s', action='store_true', dest="screenshot", help = "Generate canvas screen shot")
89    parser.add_argument('-p', action='store_true', dest='run_copy_paste_tests', help = 'Run copy/paste tests')
90    parser.add_argument('--copy_paste_between_projects', action='store_true', dest='run_copy_paste_between_projects_tests', help = 'Run copy/paste between projects tests')
91    parser.add_argument('--copy_paste_color', action='store_true', dest='run_copy_paste_color_tests', help = 'Run copy/paste color tests')
92    parser.add_argument('--copy_paste_multi', action='store_true', dest='run_copy_paste_multi_tests', help = 'Run copy/paste multi tests')
93    parser.add_argument('-f', action='store_true', dest='run_font_tests', help = 'Run font tests')
94    parser.add_argument('-m', action='store_true', dest='run_multi_themes_tests', help = 'Run Multi-Themes Tests')
95    parser.add_argument('--trigger_edit', action='store_true', dest='run_trigger_edit_tests', help = 'Run trigger edit tests')
96    parser.add_argument('--trigger_target_rename', action='store_true', dest='run_trigger_target_rename_tests', help = 'Run trigger target rename tests')
97    parser.add_argument('--bidi_text', action='store_true', dest='run_bidi_text_tests', help = 'Run bidi text')
98    parser.add_argument('-u', action='store_true', dest='run_undo_tests', help = 'Run undo tests')
99    parser.add_argument('--lock_unlock_widget_pos', action='store_true', dest='run_lock_unlock_widget_pos_tests', help='Run lock/unlock widget pos tests')
100    parser.add_argument('--widget_name', action='store_true', dest='run_widget_name_tests', help = 'Run widget name tests')
101    parser.add_argument('--run_app', action='store_true', dest='run_app_tests', help='Run app tests')
102    parser.add_argument('--input_text_set', action='store_true', dest='run_text_input_text_set_tests', help = 'Run text input text set tests')
103    parser.add_argument('--pixelmap_edit', action='store_true', dest='run_pixelmap_edit_tests', help='Run pixelmap edit tests')
104    parser.add_argument('--radial_slider_widget', action='store_true', dest='run_radial_slider_widget_tests', help='Run radial slider widget tests')
105    parser.add_argument('--display_configure', action='store_true', dest='run_project_display_configure_tests', help='Run project display configure tests')
106    parser.add_argument('--string_import_export', action='store_true', dest='run_string_import_export_tests', help='Run string import export tests')
107    parser.add_argument('--template', action='store_true', dest='run_template_tests', help='Run template tests')
108    parser.add_argument('--synergy_setting', action='store_true', dest='run_synergy_setting_tests', help='Run synergy setting tests')
109    parser.add_argument('--theme_edit', action='store_true', dest='run_theme_edit_tests', help='Run theme edit tests')
110    parser.add_argument('--language_edit', action='store_true', dest='run_language_edit_tests', help='Run language edit tests')
111    parser.add_argument('--guix_lib_version', action='store_true', dest='run_guix_lib_version_set_tests', help='Run Guix Lib Version Set Tests')
112    parser.add_argument('--rich_text_view', action='store_true', dest='run_rich_text_view_tests', help='Run Rich Text View Tests')
113    parser.add_argument('--sprite', action='store_true', dest='run_sprite_tests', help='Run Sprite Tests')
114    parser.add_argument('--gauge', action='store_true', dest='run_gauge_tests', help='Run Gauge Tests')
115    parser.add_argument('--ml_view', action='store_true', dest='run_ml_view_tests', help='Run Multi Line Text View Tests')
116    parser.add_argument('--generic_scroll_wheel', action='store_true', dest='run_generic_scroll_wheel_tests', help='Run Generic Scroll Wheel Tests')
117    parser.add_argument('--unique_bidi_text_reference', action='store_true', dest='run_unique_bidi_text_reference_check_tests', help='Run Unique Bidi-Text Reference Check Tests')
118    parser.add_argument('--range_check', action='store_true', dest='run_range_check_tests', help='Run Range Check Tests')
119    parser.add_argument('--list_resize', action='store_true', dest='run_list_resize_tests', help='Run List Resize Tests')
120    parser.add_argument('--kerning_flag', action='store_true', dest='run_kerning_flag_tests', help='Run Kerning Flag Tests')
121    parser.add_argument('--resource_xml', action='store_true', dest='run_resource_xml_tests', help='Run Resource XML Tests')
122    parser.add_argument('--output_junit', action='store_true', dest='output_junit', help='Output JUnit XML file')
123    args = parser.parse_args()
124
125    # if the user doesn't specify tests to run, then run them all:
126    if (args.run_color_format_tests is False and
127        args.run_resources_edit_tests is False and
128        args.run_widget_tests is False and
129        args.run_scroll_wheel_widget_tests is False and
130        args.run_menu_widget_tests is False and
131        args.run_toolbar_tests is False and
132        args.run_copy_paste_tests is False and
133        args.run_copy_paste_between_projects_tests is False and
134        args.run_font_tests is False and
135        args.run_multi_themes_tests is False and
136        args.run_project_import_tests is False and
137        args.run_copy_paste_color_tests is False and
138        args.run_copy_paste_multi_tests is False and
139        args.run_trigger_edit_tests is False and
140        args.run_trigger_target_rename_tests is False and
141        args.run_bidi_text_tests is False and
142        args.run_undo_tests is False and
143        args.run_lock_unlock_widget_pos_tests is False and
144        args.run_widget_name_tests is False and
145        args.run_app_tests is False and
146        args.run_widget_name_tests is False and
147        args.run_text_input_text_set_tests is False and
148        args.run_pixelmap_edit_tests is False and
149        args.run_radial_slider_widget_tests is False and
150        args.run_project_display_configure_tests is False and
151        args.run_string_import_export_tests is False and
152        args.run_template_tests is False and
153        args.run_synergy_setting_tests is False and
154        args.run_theme_edit_tests is False and
155        args.run_language_edit_tests is False and
156        args.run_guix_lib_version_set_tests is False and
157        args.run_rich_text_view_tests is False and
158        args.run_sprite_tests is False and
159        args.run_gauge_tests is False and
160        args.run_ml_view_tests is False and
161        args.run_generic_scroll_wheel_tests is False and
162        args.run_unique_bidi_text_reference_check_tests is False and
163        args.run_range_check_tests is False and
164        args.run_list_resize_tests is False and
165        args.run_kerning_flag_tests is False and
166        args.run_resource_xml_tests is False):
167        args.run_color_format_tests = True
168        args.run_resources_edit_tests = True
169        args.run_widget_tests = True
170        args.run_scroll_wheel_widget_tests = True
171        args.run_menu_widget_tests = True
172        args.run_toolbar_tests = True
173        args.run_copy_paste_tests = True
174        args.run_copy_paste_between_projects_tests = True
175        args.run_font_tests = True
176        args.run_multi_themes_tests = True
177        args.run_project_import_tests = True
178        args.run_copy_paste_color_tests = True
179        args.run_copy_paste_multi_tests = True
180        args.run_trigger_edit_tests = True
181        args.run_trigger_target_rename_tests = True
182        args.run_bidi_text_tests = True
183        args.run_undo_tests = True
184        args.run_lock_unlock_widget_pos_tests = True
185        args.run_widget_name_tests = True
186        args.run_app_tests = True
187        args.run_text_input_text_set_tests = True
188        args.run_pixelmap_edit_tests = True
189        args.run_radial_slider_widget_tests= True
190        args.run_project_display_configure_tests = True
191        args.run_string_import_export_tests = True
192        args.run_template_tests = True
193        args.run_synergy_setting_tests = True
194        args.run_theme_edit_tests = True
195        args.run_language_edit_tests = True
196        args.run_guix_lib_version_set_tests = True
197        args.run_rich_text_view_tests = True
198        args.run_sprite_tests = True
199        args.run_gauge_tests = True
200        args.run_ml_view_tests = True
201        args.run_generic_scroll_wheel_tests = True
202        args.run_unique_bidi_text_reference_check_tests = True
203        args.run_range_check_tests = True
204        args.run_list_resize_tests = True
205        args.run_kerning_flag_tests = True
206        args.run_resource_xml_tests = True
207
208    output_file_header()
209
210    if args.build_studio:
211        test_utils.studio_compile(msbuild_exe_path, project_sln_path)
212
213    time_start = time.time()
214    if not test_utils.find_studio_handles():
215        test_utils.run_studio()
216        while not test_utils.find_studio_handles():
217            interval = time.time() - time_start
218            if interval > 300:
219                raise Exception("Unable to start and find Studio application")
220                break
221
222    test_utils.read_constants()
223
224    if args.output_junit is True:
225        test_utils.test_log_xml = open("studio_view_test_log.xml", "w")
226
227    test_utils.test_log_txt = open("studio_view_test_log.txt", "w")
228    test_utils.test_log_txt.write(test_utils.test_log_stream.getvalue())
229
230    #test_utils.clean_up()
231    #run tests
232
233    if args.run_app_tests is True:
234        run_app_tests(args.generate, args.screenshot)
235
236    if args.run_color_format_tests is True:
237        run_color_format_tests(args.generate, args.screenshot)
238
239    if args.run_resources_edit_tests is True:
240        run_resources_edit_tests(args.generate, args.screenshot)
241
242    if args.run_widget_tests is True:
243        run_add_widget_tests(args.generate, args.screenshot)
244
245    if args.run_scroll_wheel_widget_tests is True:
246        run_scroll_wheel_widget_tests(args.generate, args.screenshot)
247
248    if args.run_menu_widget_tests is True:
249        run_menu_widget_tests(args.generate, args.screenshot)
250
251    if args.run_toolbar_tests is True:
252        run_toolbar_tests(args.generate, args.screenshot)
253
254    if args.run_copy_paste_tests is True:
255        run_copy_paste_tests(args.generate, args.screenshot)
256
257    if args.run_copy_paste_between_projects_tests is True:
258        run_copy_paste_between_projects_tests(args.generate, args.screenshot)
259
260    if args.run_copy_paste_color_tests is True:
261        run_copy_paste_color_tests(args.generate, args.screenshot)
262
263    if args.run_copy_paste_multi_tests is True:
264        run_copy_paste_multi_tests(args.generate, args.screenshot)
265
266    if args.run_font_tests is True:
267        run_font_tests(args.generate, args.screenshot)
268
269    if args.run_multi_themes_tests is True:
270        run_multi_themes_tests(args.generate, args.screenshot)
271
272    if args.run_project_import_tests is True:
273        run_project_import_tests(args.generate, args.screenshot)
274
275    if args.run_trigger_edit_tests is True:
276        run_trigger_edit_tests(args.generate, args.screenshot)
277
278    if args.run_trigger_target_rename_tests is True:
279        run_trigger_target_rename_tests(args.generate, args.screenshot)
280
281    if args.run_bidi_text_tests is True:
282        run_bidi_text_tests(args.generate, args.screenshot)
283
284    if args.run_undo_tests is True:
285        run_undo_tests(args.generate, args.screenshot)
286
287    if args.run_lock_unlock_widget_pos_tests is True:
288        run_lock_unlock_widget_pos_tests(args.generate, args.screenshot)
289
290    if args.run_widget_name_tests is True:
291        run_widget_name_tests(args.generate, args.screenshot)
292
293    if args.run_text_input_text_set_tests is True:
294        run_text_input_text_set_tests(args.generate, args.screenshot)
295
296    if args.run_pixelmap_edit_tests is True:
297        run_pixelmap_edit_tests(args.generate, args.screenshot)
298
299    if args.run_radial_slider_widget_tests is True:
300        run_radial_slider_widget_tests(args.generate, args.screenshot)
301
302    if args.run_project_display_configure_tests is True:
303        run_project_display_configure_tests(args.generate, args.screenshot)
304
305    if args.run_string_import_export_tests is True:
306        run_string_import_export_tests(args.generate, args.screenshot)
307
308    if args.run_template_tests is True:
309        run_template_tests(args.generate, args.screenshot)
310
311    if args.run_synergy_setting_tests is True:
312        run_synergy_setting_tests(args.generate, args.screenshot)
313
314    if args.run_theme_edit_tests is True:
315        run_theme_edit_tests(args.generate, args.screenshot)
316
317    if args.run_language_edit_tests is True:
318        run_language_edit_tests(args.generate, args.screenshot)
319
320    if args.run_guix_lib_version_set_tests is True:
321        run_guix_lib_version_set_tests(args.generate, args.screenshot)
322
323    if args.run_rich_text_view_tests is True:
324        run_rich_text_view_tests(args.generate, args.screenshot)
325
326    if args.run_sprite_tests is True:
327        run_sprite_tests(args.generate, args.screenshot)
328
329    if args.run_gauge_tests is True:
330        run_gauge_tests(args.generate, args.screenshot)
331
332    if args.run_ml_view_tests is True:
333        run_ml_view_tests(args.generate, args.screenshot)
334
335    if args.run_generic_scroll_wheel_tests is True:
336        run_generic_scroll_wheel_tests(args.generate, args.screenshot)
337
338    if args.run_unique_bidi_text_reference_check_tests is True:
339        run_unique_bidi_text_reference_check_tests(args.generate, args.screenshot)
340
341    if args.run_range_check_tests is True:
342        run_range_check_tests(args.generate, args.screenshot)
343
344    if args.run_list_resize_tests is True:
345        run_list_resize_tests(args.generate, args.screenshot)
346
347    if args.run_kerning_flag_tests is True:
348        run_kerning_flag_tests(args.generate, args.screenshot)
349
350    if args.run_resource_xml_tests is True:
351        run_resource_xml_tests(args.generate, args.screenshot)
352
353    if args.output_junit is True:
354        ts = TestSuite("my test suite", test_utils.test_cases)
355        test_utils.test_log_xml.write(TestSuite.to_xml_string([ts]))
356        test_utils.test_log_xml.close()
357
358    test_utils.test_log_txt.close()
359
360    if test_utils.get_total_failures() != 0:
361        exit(-1)
362
363    exit(0)
364
365
366
367__main__()
368
369