diff options
Diffstat (limited to 'test/boot/cedit.c')
| -rw-r--r-- | test/boot/cedit.c | 217 | 
1 files changed, 213 insertions, 4 deletions
| diff --git a/test/boot/cedit.c b/test/boot/cedit.c index 4d1b99bc2ea..dbf781902fb 100644 --- a/test/boot/cedit.c +++ b/test/boot/cedit.c @@ -5,11 +5,13 @@   */  #include <cedit.h> +#include <dm.h>  #include <env.h>  #include <expo.h>  #include <mapmem.h>  #include <dm/ofnode.h>  #include <test/ut.h> +#include <test/video.h>  #include "bootstd_common.h"  #include <test/cedit-test.h>  #include "../../boot/scene_internal.h" @@ -46,7 +48,7 @@ static int cedit_base(struct unit_test_state *uts)  	txt = scene_obj_find(scn, menu->title_id, SCENEOBJT_NONE);  	ut_assertnonnull(txt); -	ut_asserteq_str("AC Power", expo_get_str(exp, txt->str_id)); +	ut_asserteq_str("AC Power", expo_get_str(exp, txt->gen.str_id));  	ut_asserteq(ID_AC_ON, menu->cur_item_id); @@ -61,6 +63,7 @@ static int cedit_fdt(struct unit_test_state *uts)  	struct video_priv *vid_priv;  	extern struct expo *cur_exp;  	struct scene_obj_menu *menu; +	struct udevice *dev;  	ulong addr = 0x1000;  	struct ofprop prop;  	struct scene *scn; @@ -70,9 +73,12 @@ static int cedit_fdt(struct unit_test_state *uts)  	void *fdt;  	int i; +	ut_assertok(uclass_first_device_err(UCLASS_VIDEO, &dev)); +	vid_priv = dev_get_uclass_priv(dev); +  	ut_assertok(run_command("cedit load hostfs - cedit.dtb", 0)); -	ut_asserteq(ID_SCENE1, cedit_prepare(cur_exp, &vid_priv, &scn)); +	ut_asserteq(ID_SCENE1, cedit_prepare(cur_exp, dev, &scn));  	/* get a menu to fiddle with */  	menu = scene_obj_find(scn, ID_CPU_SPEED, SCENEOBJT_MENU); @@ -132,12 +138,16 @@ static int cedit_env(struct unit_test_state *uts)  	struct video_priv *vid_priv;  	extern struct expo *cur_exp;  	struct scene_obj_menu *menu; +	struct udevice *dev;  	struct scene *scn;  	char *str;  	ut_assertok(run_command("cedit load hostfs - cedit.dtb", 0)); -	ut_asserteq(ID_SCENE1, cedit_prepare(cur_exp, &vid_priv, &scn)); +	ut_assertok(uclass_first_device_err(UCLASS_VIDEO, &dev)); +	vid_priv = dev_get_uclass_priv(dev); + +	ut_asserteq(ID_SCENE1, cedit_prepare(cur_exp, dev, &scn));  	/* get a menu to fiddle with */  	menu = scene_obj_find(scn, ID_CPU_SPEED, SCENEOBJT_MENU); @@ -187,11 +197,14 @@ static int cedit_cmos(struct unit_test_state *uts)  	struct scene_obj_menu *menu, *menu2;  	struct video_priv *vid_priv;  	extern struct expo *cur_exp; +	struct udevice *dev;  	struct scene *scn;  	ut_assertok(run_command("cedit load hostfs - cedit.dtb", 0)); -	ut_asserteq(ID_SCENE1, cedit_prepare(cur_exp, &vid_priv, &scn)); +	ut_assertok(uclass_first_device_err(UCLASS_VIDEO, &dev)); +	vid_priv = dev_get_uclass_priv(dev); +	ut_asserteq(ID_SCENE1, cedit_prepare(cur_exp, dev, &scn));  	/* get the menus to fiddle with */  	menu = scene_obj_find(scn, ID_CPU_SPEED, SCENEOBJT_MENU); @@ -220,3 +233,199 @@ static int cedit_cmos(struct unit_test_state *uts)  	return 0;  }  BOOTSTD_TEST(cedit_cmos, UTF_CONSOLE); + +/* Check the cedit displays correctly */ +static int cedit_render(struct unit_test_state *uts) +{ +	struct scene_obj_menu *menu; +	struct video_priv *vid_priv; +	extern struct expo *cur_exp; +	struct expo_action evt; +	struct expo_action act; +	struct udevice *dev, *con; +	struct stdio_dev *sdev; +	struct scene *scn; +	struct expo *exp; +	int i; + +	ut_assertok(run_command("cedit load hostfs - cedit.dtb", 0)); + +	exp = cur_exp; +	sdev = stdio_get_by_name("vidconsole"); +	ut_assertnonnull(sdev); +	con = sdev->priv; + +	dev = dev_get_parent(con); +	vid_priv = dev_get_uclass_priv(dev); +	ut_asserteq(ID_SCENE1, cedit_prepare(exp, dev, &scn)); + +	menu = scene_obj_find(scn, ID_POWER_LOSS, SCENEOBJT_MENU); +	ut_assertnonnull(menu); +	ut_asserteq(ID_AC_OFF, menu->cur_item_id); + +	ut_assertok(expo_render(exp)); +	ut_asserteq(4929, video_compress_fb(uts, dev, false)); +	ut_assertok(video_check_copy_fb(uts, dev)); + +	/* move to the second menu */ +	act.type = EXPOACT_POINT_OBJ; +	act.select.id = ID_POWER_LOSS; +	ut_assertok(cedit_do_action(exp, scn, vid_priv, &act)); +	ut_assertok(expo_render(exp)); +	ut_asserteq(4986, video_compress_fb(uts, dev, false)); + +	/* open the menu */ +	act.type = EXPOACT_OPEN; +	act.select.id = ID_POWER_LOSS; +	ut_assertok(cedit_do_action(exp, scn, vid_priv, &act)); +	ut_assertok(expo_render(exp)); +	ut_asserteq(5393, video_compress_fb(uts, dev, false)); + +	/* close the menu */ +	act.type = EXPOACT_CLOSE; +	act.select.id = ID_POWER_LOSS; +	ut_assertok(cedit_do_action(exp, scn, vid_priv, &act)); +	ut_assertok(expo_render(exp)); +	ut_asserteq(4986, video_compress_fb(uts, dev, false)); + +	/* open the menu again to check it looks the same */ +	act.type = EXPOACT_OPEN; +	act.select.id = ID_POWER_LOSS; +	ut_assertok(cedit_do_action(exp, scn, vid_priv, &act)); +	ut_assertok(expo_render(exp)); +	ut_asserteq(5393, video_compress_fb(uts, dev, false)); + +	/* close the menu */ +	act.type = EXPOACT_CLOSE; +	act.select.id = ID_POWER_LOSS; +	ut_assertok(cedit_do_action(exp, scn, vid_priv, &act)); +	ut_assertok(expo_render(exp)); +	ut_asserteq(4986, video_compress_fb(uts, dev, false)); + +	act.type = EXPOACT_OPEN; +	act.select.id = ID_POWER_LOSS; +	ut_assertok(cedit_do_action(exp, scn, vid_priv, &act)); +	ut_assertok(expo_render(exp)); +	ut_asserteq(5393, video_compress_fb(uts, dev, false)); + +	act.type = EXPOACT_POINT_ITEM; +	act.select.id = ID_AC_ON; +	ut_assertok(cedit_do_action(exp, scn, vid_priv, &act)); +	ut_assertok(expo_render(exp)); +	ut_asserteq(5365, video_compress_fb(uts, dev, false)); + +	/* select it */ +	act.type = EXPOACT_SELECT; +	act.select.id = ID_AC_ON; +	ut_assertok(cedit_do_action(exp, scn, vid_priv, &act)); +	ut_assertok(expo_render(exp)); +	ut_asserteq(4980, video_compress_fb(uts, dev, false)); + +	ut_asserteq(ID_AC_ON, menu->cur_item_id); + +	/* move to the line-edit field */ +	act.type = EXPOACT_POINT_OBJ; +	act.select.id = ID_MACHINE_NAME; +	ut_assertok(cedit_do_action(exp, scn, vid_priv, &act)); +	ut_assertok(expo_render(exp)); +	ut_asserteq(4862, video_compress_fb(uts, dev, false)); + +	/* open it */ +	act.type = EXPOACT_OPEN; +	act.select.id = ID_MACHINE_NAME; +	ut_assertok(cedit_do_action(exp, scn, vid_priv, &act)); +	ut_assertok(expo_render(exp)); +	ut_asserteq(4851, video_compress_fb(uts, dev, false)); + +	/* +	 * Send some keypresses. Note that the console must be enabled so that +	 * the characters actually reach the putc_xy() in console_truetype, +	 * since in scene_textline_send_key(), the lineedit restores the +	 * vidconsole state, outputs the character and then saves the state +	 * again. If the character is never output, then the state won't be +	 * updated and the lineedit will be inconsistent. +	 */ +	ut_unsilence_console(uts); +	for (i = 'a'; i < 'd'; i++) +		ut_assertok(scene_send_key(scn, i, &evt)); +	ut_silence_console(uts); +	ut_assertok(cedit_arange(exp, vid_priv, scn->id)); +	ut_assertok(expo_render(exp)); +	ut_asserteq(4996, video_compress_fb(uts, dev, false)); + +	expo_destroy(exp); +	cur_exp = NULL; + +	return 0; +} +BOOTSTD_TEST(cedit_render, UTF_DM | UTF_SCAN_FDT); + +/* Check the cedit displays lineedits correctly */ +static int cedit_render_lineedit(struct unit_test_state *uts) +{ +	struct scene_obj_textline *tline; +	struct video_priv *vid_priv; +	extern struct expo *cur_exp; +	struct expo_action evt; +	struct expo_action act; +	struct udevice *dev, *con; +	struct stdio_dev *sdev; +	struct scene *scn; +	struct expo *exp; +	char *str; +	int i; + +	ut_assertok(run_command("cedit load hostfs - cedit.dtb", 0)); + +	exp = cur_exp; +	sdev = stdio_get_by_name("vidconsole"); +	ut_assertnonnull(sdev); +	con = sdev->priv; + +	dev = dev_get_parent(con); +	vid_priv = dev_get_uclass_priv(dev); +	ut_asserteq(ID_SCENE1, cedit_prepare(exp, dev, &scn)); + +	/* set up an initial value for the textline */ +	tline = scene_obj_find(scn, ID_MACHINE_NAME, SCENEOBJT_TEXTLINE); +	ut_assertnonnull(tline); +	str = abuf_data(&tline->buf); +	strcpy(str, "my-machine"); +	ut_asserteq(20, tline->pos); + +	ut_assertok(expo_render(exp)); +	ut_asserteq(5336, video_compress_fb(uts, dev, false)); +	ut_assertok(video_check_copy_fb(uts, dev)); + +	/* move to the line-edit field */ +	act.type = EXPOACT_POINT_OBJ; +	act.select.id = ID_MACHINE_NAME; +	ut_assertok(cedit_do_action(exp, scn, vid_priv, &act)); +	ut_assertok(expo_render(exp)); +	ut_asserteq(5363, video_compress_fb(uts, dev, false)); + +	/* open it */ +	act.type = EXPOACT_OPEN; +	act.select.id = ID_MACHINE_NAME; +	ut_assertok(cedit_do_action(exp, scn, vid_priv, &act)); +	// ut_asserteq(0, tline->pos); +	ut_assertok(expo_render(exp)); +	ut_asserteq(5283, video_compress_fb(uts, dev, false)); + +	/* delete some characters */ +	ut_unsilence_console(uts); +	for (i = 0; i < 3; i++) +		ut_assertok(scene_send_key(scn, '\b', &evt)); +	ut_silence_console(uts); +	ut_asserteq_str("my-mach", str); + +	ut_assertok(cedit_arange(exp, vid_priv, scn->id)); +	ut_assertok(expo_render(exp)); +	ut_asserteq(5170, video_compress_fb(uts, dev, false)); + +	expo_destroy(exp); +	cur_exp = NULL; + +	return 0; +} +BOOTSTD_TEST(cedit_render_lineedit, UTF_DM | UTF_SCAN_FDT); | 
