1# -*- coding: utf-8 -*-
2import os
3import sys
4import time
5import test_utils
6import test_constants
7import filecmp
8
9first_display_name = "main_display"
10second_display_name = "secondary_display"
11
12widget_name_output_files = [
13"test_widget_name_main_display_resources.c",
14"test_widget_name_main_display_resources.h",
15"test_widget_name_secondary_display_resources.c",
16"test_widget_name_secondary_display_resources.h",
17"test_widget_name_specifications.c",
18"test_widget_name_specifications.h"]
19
20def get_test_header():
21    notes =  "*             Widget Name Test                        *\n"
22    notes += "*                                                     *\n"
23    notes += "* Edit duplicate top level and child widget name      *\n"
24    notes += "*   (allowed)                                         *\n"
25    notes += "* Edit duplicate child widget name under different    *\n"
26    notes += "*   top level widget(allowed)                         *\n"
27    notes += "* Edit duplicate top level widget name(not allowed)   *\n"
28    notes += "* Edit duplicate child widget name under same top     *\n"
29    notes += "*   level widget(not allowed)                         *\n"
30    notes += "* Undo delete widget                                  *\n"
31    notes += "* Import existing screens                             *\n"
32    notes += "* Test if we can find base widget correctly when      *\n"
33    notes += "*   base name is duplicated with child widget name    *\n"
34    notes += "*   under other top level widgets                     *\n"
35    return notes
36
37def run_new_project_create(project_name):
38
39    # create a new project
40    test_utils.toolbar_create()
41    test_utils.set_new_project_path(test_utils.DEFAULT_OUTPUT_FILE_PATH)
42    test_utils.set_new_project_name(project_name)
43    test_utils.save_new_project_create()
44    test_utils.close_message_dialog()
45
46    # configure project
47    test_utils.configure_project()
48    test_utils.configure_display_num(2)
49    test_utils.wait_for_key()
50
51    test_utils.select_display_index(1);
52    test_utils.configure_x_res(640)
53    test_utils.configure_y_res(480)
54    test_utils.configure_display_name(first_display_name)
55    test_utils.wait_for_key()
56
57    test_utils.select_display_index(2);
58    test_utils.configure_x_res(320)
59    test_utils.configure_y_res(240)
60    test_utils.configure_display_name(second_display_name)
61    test_utils.wait_for_key()
62
63    test_utils.save_project_configure()
64
65def run_widget_name_tests(generate, screenshot):
66
67    test_utils.output_test_header(get_test_header())
68    test_utils.setup(generate, screenshot, 'test_widget_name_golden_file')
69
70    print('create test widget name project')
71    run_new_project_create("test_widget_name")
72
73    test_utils.select_project_tree_node('window')
74    test_utils.add_widget('GX_TYPE_WINDOW')
75    test_utils.edit_widget_props("ID_WIDGET_NAME", 'window')#make the name the same as its parent
76
77    test_utils.select_project_tree_node('window')
78    test_utils.add_widget('GX_TYPE_WINDOW')
79    test_utils.edit_widget_props_post('ID_WIDGET_NAME', 'window')#duplicate child widget name under the same top level widget, not allowed
80    test_utils.close_error_dialog()
81
82    test_utils.select_project_tree_node('window_1')
83    test_utils.add_widget('GX_TYPE_WINDOW')
84    test_utils.edit_widget_props_post('ID_WIDGET_NAME', 'window_1')#duplicate child widget name under the same top level widget, not allowed
85    test_utils.close_error_dialog()
86
87    test_utils.select_project_tree_node('window_1')
88    test_utils.delete_widget()
89    test_utils.undo()
90
91    test_utils.select_project_tree_node('default_folder')
92    test_utils.add_widget('GX_TYPE_WINDOW')
93    test_utils.edit_widget_props_post("ID_WIDGET_NAME", 'window')#duplicate top level widget name, not allowed
94    test_utils.close_error_dialog()#close message dialog, widge already existing
95
96    test_utils.select_project_tree_node('window_3')
97    test_utils.add_widget('GX_TYPE_WINDOW')
98    test_utils.edit_widget_props('ID_WIDGET_NAME', 'window_2')#duplicate child widget name under different top level widget, allowed
99
100    test_utils.toolbar_save()
101    test_utils.select_project_tree_node('default_folder')
102
103    #import existing screens
104    import_project_name = os.path.abspath(test_utils.DEFAULT_OUTPUT_FILE_PATH) + '\\test_widget_name.gxp'
105    test_utils.import_project(import_project_name)
106    test_utils.save_project_import_dialog()
107
108    test_utils.select_project_tree_node(first_display_name)
109    test_utils.insert_folder()#default_folder_1
110    test_utils.add_widget('GX_TYPE_WINDOW')
111    test_utils.add_widget('GX_TYPE_PROMPT')
112    test_utils.edit_widget_props('ID_WIDGET_NAME', 'base')
113
114    test_utils.select_project_tree_node('default_folder_1')
115    test_utils.add_widget('GX_TYPE_WINDOW')
116    test_utils.edit_widget_props('ID_WIDGET_NAME', 'base')
117    test_utils.edit_widget_props('ID_TEMPLATE', 1)
118
119    test_utils.select_project_tree_node('default_folder_1')
120    test_utils.add_widget('GX_TYPE_WINDOW')
121    test_utils.add_widget('GX_TYPE_PROMPT')
122    test_utils.edit_widget_props('ID_WIDGET_NAME', 'base')
123
124    test_utils.select_project_tree_node('default_folder_1')
125    test_utils.add_template('base')
126    test_utils.edit_widget_props_post('ID_WIDGET_NAME', 'window')#duplicate top level widget name
127    test_utils.close_error_dialog()
128    test_utils.compare_result()
129
130    # test rename widget on second display
131    test_utils.select_project_tree_node(second_display_name)
132    test_utils.wait_for_key('selected secondary display')
133    test_utils.insert_folder() #default_folder
134    test_utils.wait_for_key('inserted default folder')
135    test_utils.add_widget('GX_TYPE_WINDOW')
136    test_utils.add_widget('GX_TYPE_PROMPT')
137    test_utils.wait_for_key('Added window and prompt')
138    test_utils.edit_widget_props('ID_WIDGET_NAME', "secondary_prompt")
139    test_utils.wait_for_key('renamed the prompt')
140
141    test_utils.generate_all()
142    test_utils.click_generate_button()
143    test_utils.cmp_output_files(widget_name_output_files)
144
145    test_utils.write_end('Widget Name Tests')