1# -*- coding: utf-8 -*-
2import os
3import sys
4import time
5import test_utils
6import test_constants
7
8project_name = "test_font"
9display_name = "main_display"
10folder_name = 'default_folder'
11test_font_output_files = [
12"test_font_custom_output_file.c",
13"test_font_resources.c",
14"test_font_resources.h",
15"test_font_specifications.c",
16"test_font_specifications.h"]
17
18def run_font_add():
19    # open font folder
20    test_utils.click_resource_group('FONT_GROUP')
21
22    # test cancel button
23    test_utils.add_font()
24    test_utils.cancel_font_edit()
25
26    # add font 1bit raw
27    test_utils.add_font()
28    test_utils.set_font_path('..\\..\\fonts\\Vera.ttf')
29    test_utils.set_font_name('FONT_1BIT_RAW')
30    test_utils.set_font_format('GX_FONT_FORMAT_1BPP')
31    test_utils.set_font_height(200)
32    test_utils.check_font_custom_output(1)
33    test_utils.set_font_custom_output_file('test_font_custom_output_file.c')
34    test_utils.save_font_edit()
35
36    # add font 1bit compressed
37    test_utils.add_font()
38    test_utils.set_font_path('..\\..\\fonts\\Vera.ttf')
39    test_utils.set_font_name('FONT_1BIT_COMPRESSED')
40    test_utils.set_font_compression(1)
41    test_utils.set_font_format('GX_FONT_FORMAT_1BPP')
42    test_utils.set_font_height_post(256, True)
43    test_utils.set_font_height(200)
44    test_utils.check_font_custom_output(1)
45    test_utils.set_font_custom_output_file('test_font_custom_output_file.c')
46    test_utils.save_font_edit()
47
48    test_utils.edit_font('FONT_1BIT_COMPRESSED')
49    test_utils.check_font_custom_output(0)
50    test_utils.save_font_edit()
51
52    test_utils.edit_font('FONT_1BIT_COMPRESSED')
53    test_utils.check_font_custom_output(1)
54    test_utils.set_font_custom_output_file('test_font_custom_output_file.c')
55    test_utils.cancel_font_edit()
56
57    # save and close project to test custom output file information write to project file
58    test_utils.toolbar_save()
59    test_utils.close_project(0)
60
61    # reopen project to test custom output file information read from project file
62    test_utils.open_project(test_utils.DEFAULT_OUTPUT_FILE_PATH + '\\' + project_name + '.gxp', 0)
63
64    # add font 4bit raw
65    test_utils.add_font()
66    test_utils.set_font_path('..\\..\\fonts\\VeraBd.ttf')
67    test_utils.set_font_name('FONT_4BIT_RAW')
68    test_utils.set_font_format('GX_FONT_FORMAT_4BPP')
69    test_utils.set_font_height(100)
70    test_utils.save_font_edit()
71
72    # add font 4bit compressed
73    test_utils.add_font()
74    test_utils.set_font_path('..\\..\\fonts\\VeraBd.ttf')
75    test_utils.set_font_name('FONT_4BIT_COMPRESSED')
76    test_utils.set_font_compression(1)
77    test_utils.set_font_format('GX_FONT_FORMAT_4BPP')
78    test_utils.set_font_height(100)
79    test_utils.save_font_edit()
80
81    # add font 8bit raw
82    test_utils.add_font()
83    test_utils.set_font_path('..\\..\\fonts\\VeraBI.ttf')
84    test_utils.set_font_name('FONT_8BIT_RAW')
85    test_utils.set_font_format('GX_FONT_FORMAT_8BPP')
86    test_utils.save_font_edit()
87
88    # add font 8bit compressed
89    test_utils.add_font()
90    test_utils.set_font_path('..\\..\\fonts\\VeraBI.ttf')
91    test_utils.set_font_name('FONT_8BIT_COMPRESSED')
92    test_utils.set_font_compression(1)
93    test_utils.set_font_format('GX_FONT_FORMAT_8BPP')
94    test_utils.save_font_edit()
95
96    # add font that contain extended characters
97    test_utils.add_font()
98    test_utils.set_font_path('..\\..\\fonts\\Italica Vetus 1-201.otf')
99    test_utils.set_font_name('FONT_OLD_ITALIC')
100    test_utils.check_extended_unicode(1)
101    test_utils.set_font_height(20)
102    test_utils.set_page_range(46, 1, '10300', '10323')
103    test_utils.set_page_range(47, 1, '10fffd', '10fffd')
104    test_utils.save_font_edit()
105
106    # cloce font folder
107    test_utils.click_resource_group('FONT_GROUP')
108
109def run_new_project_create(project_name):
110
111    # create a new project
112    test_utils.toolbar_create()
113    test_utils.set_new_project_path(test_utils.DEFAULT_OUTPUT_FILE_PATH)
114    test_utils.set_new_project_name(project_name)
115    test_utils.save_new_project_create()
116
117    # configure project
118    test_utils.configure_project()
119    test_utils.configure_x_res(640)
120    test_utils.configure_y_res(480)
121    test_utils.configure_display_name(display_name)
122    test_utils.configure_display_color_format('GX_COLOR_FORMAT_24XRGB')
123    test_utils.configure_cpu_type('synergy')
124    test_utils.save_project_configure()
125
126    # close message dialog when create new
127    test_utils.close_message_dialog()
128
129def run_widgets_add():
130    test_utils.select_project_tree_node("window")
131    screen_name = "main_window"
132
133    test_utils.edit_widget_props("ID_WIDGET_NAME", screen_name)
134    test_utils.edit_widget_props("ID_XPOS", 0)
135    test_utils.edit_widget_props("ID_YPOS", 0)
136    test_utils.edit_widget_props("ID_WIDTH", 640)
137    test_utils.edit_widget_props("ID_HEIGHT", 480)
138
139    #Add a prompt and set it's font to FONT_1BIT_RAW
140    test_utils.select_project_tree_node(screen_name)
141    test_utils.add_widget('GX_TYPE_PROMPT')
142    test_utils.edit_widget_props("ID_XPOS", 0)
143    test_utils.edit_widget_props("ID_YPOS", 0)
144    test_utils.edit_widget_props("ID_WIDTH", 640)
145    test_utils.edit_widget_props("ID_HEIGHT", 165)
146    test_utils.edit_widget_props("ID_TEXT_ALIGN", 'Left')
147    test_utils.edit_widget_props("ID_STRING_VAL", "1 bit raw")
148    test_utils.edit_widget_props("ID_FONT_SELECT_0", "FONT_1BIT_RAW")
149
150    #Add a prompt and set it's font to FONT_1BIT_COMPRESSED
151    test_utils.select_project_tree_node(screen_name)
152    test_utils.add_widget('GX_TYPE_PROMPT')
153    test_utils.edit_widget_props("ID_XPOS", 0)
154    test_utils.edit_widget_props("ID_YPOS", 145)
155    test_utils.edit_widget_props("ID_WIDTH", 640)
156    test_utils.edit_widget_props("ID_HEIGHT", 136)
157    test_utils.edit_widget_props("ID_TEXT_ALIGN", 'Left')
158    test_utils.edit_widget_props("ID_STRING_VAL", "200height")
159    test_utils.edit_widget_props("ID_FONT_SELECT_0", "FONT_1BIT_COMPRESSED")
160
161    #Add a prompt and set it's font to FONT_4BIT_RAW
162    test_utils.select_project_tree_node(screen_name)
163    test_utils.add_widget('GX_TYPE_PROMPT')
164    test_utils.edit_widget_props("ID_XPOS", 0)
165    test_utils.edit_widget_props("ID_YPOS", 269)
166    test_utils.edit_widget_props("ID_WIDTH", 640)
167    test_utils.edit_widget_props("ID_HEIGHT", 81)
168    test_utils.edit_widget_props("ID_TEXT_ALIGN", 'Left')
169    test_utils.edit_widget_props("ID_STRING_VAL", "4 bit raw")
170    test_utils.edit_widget_props("ID_FONT_SELECT_0", "FONT_4BIT_RAW")
171
172    #Add a prompt and set it's font to FONT_4BIT_COMPRESSED
173    test_utils.select_project_tree_node(screen_name)
174    test_utils.add_widget('GX_TYPE_PROMPT')
175    test_utils.edit_widget_props("ID_XPOS", 0)
176    test_utils.edit_widget_props("ID_YPOS", 331)
177    test_utils.edit_widget_props("ID_WIDTH", 640)
178    test_utils.edit_widget_props("ID_HEIGHT", 90)
179    test_utils.edit_widget_props("ID_TEXT_ALIGN", 'Left')
180    test_utils.edit_widget_props("ID_STRING_VAL", "4 bit compressed")
181    test_utils.edit_widget_props("ID_FONT_SELECT_0", "FONT_4BIT_COMPRESSED")
182
183    #Add a prompt and set it's font to FONT_8BIT_RAW
184    test_utils.select_project_tree_node(screen_name)
185    test_utils.add_widget('GX_TYPE_PROMPT')
186    test_utils.edit_widget_props("ID_XPOS", 3)
187    test_utils.edit_widget_props("ID_YPOS", 421)
188    test_utils.edit_widget_props("ID_WIDTH", 189)
189    test_utils.edit_widget_props("ID_HEIGHT", 56)
190    test_utils.edit_widget_props("ID_STRING_VAL", "font 8 bit raw")
191    test_utils.edit_widget_props("ID_FONT_SELECT_0", "FONT_8BIT_RAW")
192
193    #Add a prompt and set it's font to FONT_8BIT_COMPRESSED
194    test_utils.select_project_tree_node(screen_name)
195    test_utils.add_widget('GX_TYPE_PROMPT')
196    test_utils.edit_widget_props("ID_XPOS", 197)
197    test_utils.edit_widget_props("ID_YPOS", 421)
198    test_utils.edit_widget_props("ID_WIDTH", 267)
199    test_utils.edit_widget_props("ID_HEIGHT", 56)
200    test_utils.edit_widget_props("ID_STRING_VAL", "font 8 bit compressed")
201    test_utils.edit_widget_props("ID_FONT_SELECT_0", "FONT_8BIT_COMPRESSED")
202
203    #Add a prompt to test extended unicode support feature
204    test_utils.select_project_tree_node(screen_name)
205    test_utils.add_widget('GX_TYPE_PROMPT')
206    test_utils.edit_widget_props("ID_XPOS", 467)
207    test_utils.edit_widget_props("ID_YPOS", 421)
208    test_utils.edit_widget_props("ID_WIDTH", 170)
209    test_utils.edit_widget_props("ID_HEIGHT", 56)
210    test_utils.edit_widget_props("ID_STRING_VAL", "��������������������������")
211    test_utils.edit_widget_props("ID_FONT_SELECT_0", "FONT_OLD_ITALIC")
212
213def add_text_color():
214    # open color group folder
215    test_utils.click_resource_group('COLOR_GROUP')
216
217    # test cancel button
218    test_utils.add_color()
219    test_utils.set_color_name('TEXT_COLOR')
220    test_utils.set_color_red(0)
221    test_utils.set_color_green(0)
222    test_utils.set_color_blue(0)
223    test_utils.save_color_edit()
224
225    test_utils.edit_color('TEXT')
226    test_utils.set_color_red(0)
227    test_utils.set_color_green(0)
228    test_utils.set_color_blue(0)
229    test_utils.save_color_edit()
230
231    # close color group folder
232    test_utils.click_resource_group('COLOR_GROUP')
233
234def run_kerning_font_test():
235    # open font folder
236    test_utils.click_resource_group('FONT_GROUP')
237
238    #Add new font which doesn't contain a kerning table but the checkbox 'include kerning info' is selected on.
239    test_utils.add_font()
240    test_utils.set_font_path('..\\..\\fonts\\Italica Vetus 1-201.otf')
241    test_utils.set_font_name('FONT_WITHOUT_KERNING_INFO')
242    test_utils.set_font_compression(0)
243    test_utils.set_font_format('GX_FONT_FORMAT_8BPP')
244    test_utils.set_font_generate_kerning(1)
245    test_utils.save_font_edit()
246    test_utils.close_message_dialog()
247    test_utils.delete_font('FONT_WITHOUT_KERNING_INFO')
248
249    #edit font and set kerning true to make font generate kerning table
250    test_utils.add_font()
251    test_utils.set_font_path('..\\..\\fonts\\Vera.ttf')
252    test_utils.set_font_name('FONT_1BIT')
253    test_utils.set_font_format('GX_FONT_FORMAT_1BPP')
254    test_utils.set_font_generate_kerning(0)
255    test_utils.save_font_edit()
256
257    test_utils.add_font()
258    test_utils.set_font_path('..\\..\\fonts\\Vera.ttf')
259    test_utils.set_font_name('FONT_1BIT_KERNING')
260    test_utils.set_font_format('GX_FONT_FORMAT_1BPP')
261    test_utils.set_font_generate_kerning(1)
262    test_utils.save_font_edit()
263
264    test_utils.add_font()
265    test_utils.set_font_path('..\\..\\fonts\\Vera.ttf')
266    test_utils.set_font_name('FONT_4BIT')
267    test_utils.set_font_format('GX_FONT_FORMAT_4BPP')
268    test_utils.set_font_height(50)
269    test_utils.set_font_generate_kerning(0)
270    test_utils.save_font_edit()
271
272    test_utils.add_font()
273    test_utils.set_font_path('..\\..\\fonts\\Vera.ttf')
274    test_utils.set_font_name('FONT_4BIT_KERNING')
275    test_utils.set_font_format('GX_FONT_FORMAT_4BPP')
276    test_utils.set_font_height(50)
277    test_utils.set_font_generate_kerning(1)
278    test_utils.save_font_edit()
279
280    test_utils.add_font()
281    test_utils.set_font_path('..\\..\\fonts\\Vera.ttf')
282    test_utils.set_font_name('FONT_8BIT')
283    test_utils.set_font_format('GX_FONT_FORMAT_8BPP')
284    test_utils.set_font_height(150)
285    test_utils.set_font_generate_kerning(0)
286    test_utils.save_font_edit()
287
288    test_utils.add_font()
289    test_utils.set_font_path('..\\..\\fonts\\Vera.ttf')
290    test_utils.set_font_name('FONT_8BIT_KERNING')
291    test_utils.set_font_format('GX_FONT_FORMAT_8BPP')
292    test_utils.set_font_height(150)
293    test_utils.set_font_generate_kerning(1)
294    test_utils.save_font_edit()
295
296    #Add widget to test the kerning glyph draw
297    test_utils.select_project_tree_node(folder_name)
298    test_utils.add_widget('GX_TYPE_WINDOW')
299    screen_name = "Font_kerning_test_window"
300
301    test_utils.edit_widget_props("ID_WIDGET_NAME", screen_name)
302    test_utils.edit_widget_props("ID_XPOS", 0)
303    test_utils.edit_widget_props("ID_YPOS", 0)
304    test_utils.edit_widget_props("ID_WIDTH", 640)
305    test_utils.edit_widget_props("ID_HEIGHT", 480)
306    test_utils.edit_widget_props("ID_BORDER_COMBO", test_constants.BORDER_TYPE_NONE)
307
308    #Add a prompt and set it's font to FONT_8BIT
309    test_utils.select_project_tree_node(screen_name)
310    test_utils.add_widget('GX_TYPE_PROMPT')
311    test_utils.edit_widget_props("ID_XPOS", 0)
312    test_utils.edit_widget_props("ID_YPOS", 0)
313    test_utils.edit_widget_props("ID_WIDTH", 640)
314    test_utils.edit_widget_props("ID_HEIGHT", 160)
315    test_utils.edit_widget_props("ID_TEXT_ALIGN", 'Left')
316    test_utils.edit_widget_props("ID_BORDER_COMBO", test_constants.BORDER_TYPE_NONE)
317    test_utils.edit_widget_props("ID_STRING_VAL", "FAWAVAYLTLV_8BIT")
318    test_utils.edit_widget_props("ID_FONT_SELECT_0", "FONT_8BIT")
319
320    #Add a prompt and set it's font to FONT_8BIT_KERNING
321    test_utils.select_project_tree_node(screen_name)
322    test_utils.add_widget('GX_TYPE_PROMPT')
323    test_utils.edit_widget_props("ID_XPOS", 0)
324    test_utils.edit_widget_props("ID_YPOS", 160)
325    test_utils.edit_widget_props("ID_WIDTH", 640)
326    test_utils.edit_widget_props("ID_HEIGHT", 160)
327    test_utils.edit_widget_props("ID_TEXT_ALIGN", 'Left')
328    test_utils.edit_widget_props("ID_BORDER_COMBO", test_constants.BORDER_TYPE_NONE)
329    test_utils.edit_widget_props("ID_STRING_VAL", "FAWAVAYLTLV_8BIT_KERNING")
330    test_utils.edit_widget_props("ID_FONT_SELECT_0", "FONT_8BIT_KERNING")
331
332    #Add a prompt and set it's font to FONT_4BIT
333    test_utils.select_project_tree_node(screen_name)
334    test_utils.add_widget('GX_TYPE_PROMPT')
335    test_utils.edit_widget_props("ID_XPOS", 0)
336    test_utils.edit_widget_props("ID_YPOS", 320)
337    test_utils.edit_widget_props("ID_WIDTH", 640)
338    test_utils.edit_widget_props("ID_HEIGHT", 60)
339    test_utils.edit_widget_props("ID_TEXT_ALIGN", 'Left')
340    test_utils.edit_widget_props("ID_BORDER_COMBO", test_constants.BORDER_TYPE_NONE)
341    test_utils.edit_widget_props("ID_STRING_VAL", "FAWAVAYLTLV_4BIT")
342    test_utils.edit_widget_props("ID_FONT_SELECT_0", "FONT_4BIT")
343
344    #Add a prompt and set it's font to FONT_4BIT_KERNING
345    test_utils.select_project_tree_node(screen_name)
346    test_utils.add_widget('GX_TYPE_PROMPT')
347    test_utils.edit_widget_props("ID_XPOS", 0)
348    test_utils.edit_widget_props("ID_YPOS", 380)
349    test_utils.edit_widget_props("ID_WIDTH", 640)
350    test_utils.edit_widget_props("ID_HEIGHT", 60)
351    test_utils.edit_widget_props("ID_TEXT_ALIGN", 'Left')
352    test_utils.edit_widget_props("ID_BORDER_COMBO", test_constants.BORDER_TYPE_NONE)
353    test_utils.edit_widget_props("ID_STRING_VAL", "FAWAVAYLTLV_4BIT_KERNING")
354    test_utils.edit_widget_props("ID_FONT_SELECT_0", "FONT_4BIT_KERNING")
355
356    #Add a prompt and set it's font to FONT_1BIT
357    test_utils.select_project_tree_node(screen_name)
358    test_utils.add_widget('GX_TYPE_PROMPT')
359    test_utils.edit_widget_props("ID_XPOS", 0)
360    test_utils.edit_widget_props("ID_YPOS", 440)
361    test_utils.edit_widget_props("ID_WIDTH", 640)
362    test_utils.edit_widget_props("ID_HEIGHT", 20)
363    test_utils.edit_widget_props("ID_TEXT_ALIGN", 'Left')
364    test_utils.edit_widget_props("ID_BORDER_COMBO", test_constants.BORDER_TYPE_NONE)
365    test_utils.edit_widget_props("ID_STRING_VAL", "FAWAVAYLTLV_1BIT")
366    test_utils.edit_widget_props("ID_FONT_SELECT_0", "FONT_1BIT")
367
368    #Add a prompt and set it's font to FONT_1BIT_KERNING
369    test_utils.select_project_tree_node(screen_name)
370    test_utils.add_widget('GX_TYPE_PROMPT')
371    test_utils.edit_widget_props("ID_XPOS", 0)
372    test_utils.edit_widget_props("ID_YPOS", 460)
373    test_utils.edit_widget_props("ID_WIDTH", 640)
374    test_utils.edit_widget_props("ID_HEIGHT", 20)
375    test_utils.edit_widget_props("ID_TEXT_ALIGN", 'Left')
376    test_utils.edit_widget_props("ID_BORDER_COMBO", test_constants.BORDER_TYPE_NONE)
377    test_utils.edit_widget_props("ID_STRING_VAL", "FAWAVAYLTLV_1BIT_KERNING")
378    test_utils.edit_widget_props("ID_FONT_SELECT_0", "FONT_1BIT_KERNING")
379    test_utils.compare_result()
380
381    #test the output will not be changed
382    print('save project')
383    test_utils.toolbar_save()
384    test_utils.generate_all()
385    test_utils.click_generate_button(1)
386    test_utils.cmp_output_files(test_font_output_files)
387
388def test_custom_system_font():
389    test_utils.open_project("test_system_font.gxp")
390    test_utils.compare_result()
391
392def test_font_height():
393    test_utils.open_project("test_font_height.gxp")
394    test_utils.compare_result()
395
396def get_test_header():
397    notes =  "*          Studio Add/Edit Font Test                  *\n"
398    notes += "*                                                     *\n"
399    notes += "* Test compressed font                                *\n"
400    notes += "* Test extended unicode support                       *\n"
401    notes += "* Test font height                                    *\n"
402    return notes
403
404def run_font_tests(generate, screenshot):
405
406    test_utils.output_test_header(get_test_header())
407    test_utils.setup(generate, screenshot, 'test_font_golden_file')
408
409    print('create new project')
410    run_new_project_create(project_name)
411
412    print('add fonts')
413    run_font_add()
414
415    print('add widgets')
416    run_widgets_add()
417    test_utils.compare_result()
418
419    screen_name = "main_window"
420
421    # change color format to 8
422    test_utils.configure_project()
423    test_utils.configure_display_color_format('GX_COLOR_FORMAT_8BIT_PALETTE')
424    test_utils.set_aa_text_colors(16)
425    test_utils.save_project_configure()
426    add_text_color()
427    test_utils.select_project_tree_node('prompt_2')
428    test_utils.edit_widget_props("ID_NORMAL_TEXT_COLOR", 'TEXT_COLOR')
429    test_utils.select_project_tree_node(screen_name)
430    test_utils.compare_result()
431
432    # disable dave2d drawing
433    test_utils.configure_project()
434    test_utils.open_advanced_settings()
435    test_utils.check_2d_drawing_engine(0)
436    test_utils.save_synergy_settings_dialog()
437    test_utils.save_project_configure()
438    test_utils.select_project_tree_node(screen_name)
439    test_utils.compare_result()
440
441    # change cpu type to generic
442    test_utils.configure_project()
443    test_utils.configure_cpu_type('generic')
444    test_utils.save_project_configure()
445    test_utils.select_project_tree_node(screen_name)
446    test_utils.compare_result()
447
448    print('run kerning font test')
449    test_utils.configure_project()
450    #Change display color format to 16bpp first.
451    test_utils.configure_display_color_format('GX_COLOR_FORMAT_565RGB')
452    test_utils.save_project_configure()
453    test_utils.select_project_tree_node(screen_name)
454    run_kerning_font_test()
455
456    print('run custom system font test')
457    test_custom_system_font()
458
459    print('run font height test')
460    test_font_height()
461
462    test_utils.write_end('Font Tests')
463