#include #include #include #include #include #include #include /* We don't initialize the test result fields below */ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wmissing-field-initializers" ft_list headers_libc[] = { { "", (ft_test*[]){ &ft_ctype_trivial_success, &ft_ctype_trivial_failure, &ft_ctype_trivial_empty, NULL, }}, { "", NULL }, { "", NULL }, { "", NULL }, { "", NULL },/*(ft_test[]){ { "Formatted printing basics", NULL, NULL }, { "Format types and options", NULL, NULL }, { NULL }, }}, */ { "", NULL }, { "", (ft_test*[]){ &ft_string_memset, &ft_string_memcpy, &ft_string_memmove, NULL, }}, { "", NULL }, { "", NULL }, { "", NULL }, { "", NULL }, { NULL } }; ft_list headers_posix[] = { { "", NULL }, { NULL } }; #pragma GCC diagnostic pop int main(void) { // Initialize test results for(int i = 0; headers_libc[i].name; i++) ft_list_init(&headers_libc[i]); for(int i = 0; headers_posix[i].name; i++) ft_list_init(&headers_posix[i]); // Create GUI gscreen *scr = gscreen_create2("FxLibc tests", NULL, "FxLibc regression and performance tests", "/LIBC;/POSIX;;;;#RUN"); fbrowser *browser = fbrowser_create(NULL); int selected_set = 0; gscreen_add_tab(scr, browser, NULL); fbrowser_set_headers(browser, headers_libc, false); jwidget *results = jwidget_create(NULL); gscreen_add_tab(scr, results, NULL); gscreen_set_tab_fkeys_visible(scr, 1, false); // Event handling while(1) { jevent e = jscene_run(scr->scene); int tab = gscreen_current_tab(scr); int key = 0; if(e.type == JSCENE_KEY || e.key.type == KEYEV_DOWN) key = e.key.key; if(e.type == JSCENE_PAINT) { dclear(C_WHITE); jscene_render(scr->scene); dupdate(); } // Switch lists on F1/F2 if(tab == 0 && key == KEY_F1 && selected_set != 0) { fbrowser_set_headers(browser, headers_libc, false); selected_set = 0; } if(tab == 0 && key == KEY_F2 && selected_set != 1) { fbrowser_set_headers(browser, headers_posix, false); selected_set = 1; } // Run tests if(tab == 0 && key == KEY_F6) { ft_list *header = fbrowser_current_header(browser); ft_test *test = fbrowser_current_test(browser); if(test) { ft_test_run(test); ft_list_aggregate(header); browser->widget.update = 1; } else if(header) { ft_list_run(header); browser->widget.update = 1; } else { for(int i = 0; headers_libc[i].name; i++) ft_list_run(&headers_libc[i]); for(int i = 0; headers_posix[i].name; i++) ft_list_run(&headers_posix[i]); browser->widget.update = 1; } } // Browse test results if(tab == 0 && e.type == FBROWSER_VALIDATED && e.source == browser) { ft_test *test = fbrowser_current_test(browser); if(ft_test_done(test) && test->widget) { jwidget *w = test->widget(test); if(w) { jwidget_add_child(results, w); gscreen_show_tab(scr, 1); jscene_set_focused_widget(scr->scene, w); } } } // Close test results if(tab == 1 && key == KEY_EXIT) { jscene_set_focused_widget(scr->scene, browser->tests); gscreen_show_tab(scr, 0); while(results->child_count > 0) { jwidget_destroy(results->children[0]); } } } gscreen_destroy(scr); return 1; }