forked from enlightenment/edi
Add tests PASSED and FAILED to elm_code statuses
and the widget rendering. Use this in EDI to add a test summarising panel. Tests are executed in verbose mode so we can list all the tests that have been run - can summarise later if we wish...
This commit is contained in:
parent
5a7f736d95
commit
a82431c627
|
@ -7,6 +7,7 @@
|
|||
|
||||
#include <elm_code_common.h>
|
||||
#include <elm_code_file.h>
|
||||
#include <elm_code_parse.h>
|
||||
#include <elm_code_widget.h>
|
||||
|
||||
#ifdef EAPI
|
||||
|
|
|
@ -17,6 +17,9 @@ typedef enum {
|
|||
ELM_CODE_STATUS_TYPE_REMOVED,
|
||||
ELM_CODE_STATUS_TYPE_CHANGED,
|
||||
|
||||
ELM_CODE_STATUS_TYPE_PASSED,
|
||||
ELM_CODE_STATUS_TYPE_FAILED,
|
||||
|
||||
ELM_CODE_STATUS_TYPE_COUNT
|
||||
} Elm_Code_Status_Type;
|
||||
|
||||
|
|
|
@ -119,6 +119,21 @@ EAPI const char *elm_code_file_path_get(Elm_Code_File *file)
|
|||
return eina_file_filename_get(file->file);
|
||||
}
|
||||
|
||||
EAPI void elm_code_file_clear(Elm_Code_File *file)
|
||||
{
|
||||
Elm_Code_Line *l;
|
||||
|
||||
EINA_LIST_FREE(file->lines, l)
|
||||
{
|
||||
if (l->content)
|
||||
free(l->content);
|
||||
free(l);
|
||||
}
|
||||
|
||||
if (file->parent)
|
||||
elm_code_callback_fire(file->parent, &ELM_CODE_EVENT_FILE_LOAD_DONE, file);
|
||||
}
|
||||
|
||||
EAPI unsigned int elm_code_file_lines_get(Elm_Code_File *file)
|
||||
{
|
||||
return eina_list_count(file->lines);
|
||||
|
|
|
@ -76,6 +76,8 @@ EAPI const char *elm_code_file_path_get(Elm_Code_File *file);
|
|||
*
|
||||
*/
|
||||
|
||||
EAPI void elm_code_file_clear(Elm_Code_File *file);
|
||||
|
||||
EAPI unsigned int elm_code_file_lines_get(Elm_Code_File *file);
|
||||
|
||||
EAPI void elm_code_file_line_append(Elm_Code_File *file, const char *line);
|
||||
|
|
|
@ -176,6 +176,11 @@ EAPI Evas_Object *elm_code_widget_add(Evas_Object *parent, Elm_Code *code)
|
|||
evas_object_textgrid_palette_set(o, EVAS_TEXTGRID_PALETTE_STANDARD, ELM_CODE_STATUS_TYPE_CHANGED,
|
||||
36, 36, 96, 255);
|
||||
|
||||
evas_object_textgrid_palette_set(o, EVAS_TEXTGRID_PALETTE_STANDARD, ELM_CODE_STATUS_TYPE_PASSED,
|
||||
54, 96, 54, 255);
|
||||
evas_object_textgrid_palette_set(o, EVAS_TEXTGRID_PALETTE_STANDARD, ELM_CODE_STATUS_TYPE_FAILED,
|
||||
96, 54, 54, 255);
|
||||
|
||||
// setup token colors
|
||||
evas_object_textgrid_palette_set(o, EVAS_TEXTGRID_PALETTE_STANDARD, ELM_CODE_TOKEN_TYPE_DEFAULT,
|
||||
205, 205, 205, 255);
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
|
||||
#include <Eina.h>
|
||||
#include <Ecore.h>
|
||||
#include <Elm_Code.h>
|
||||
#include <Elementary.h>
|
||||
#include <Elementary_Cursor.h>
|
||||
#include <regex.h>
|
||||
|
@ -18,6 +19,13 @@
|
|||
static Evas_Object *_console_box;
|
||||
static const char *_current_dir = NULL;
|
||||
|
||||
static int _edi_test_count;
|
||||
static int _edi_test_pass;
|
||||
static int _edi_test_fail;
|
||||
|
||||
static Elm_Code *_edi_test_code;
|
||||
static void _edi_test_line_callback(const char *content);
|
||||
|
||||
static const char *_edi_consolepanel_icon_for_line(const char *line)
|
||||
{
|
||||
if (strstr(line, " error:") != NULL)
|
||||
|
@ -153,6 +161,8 @@ static void _edi_consolepanel_append_line_type(const char *line, Eina_Bool err)
|
|||
|
||||
elm_box_pack_end(_console_box, box);
|
||||
_edi_consolepanel_scroll_to_bottom();
|
||||
|
||||
_edi_test_line_callback(line);
|
||||
}
|
||||
|
||||
void edi_consolepanel_append_line(const char *line)
|
||||
|
@ -168,6 +178,11 @@ void edi_consolepanel_append_error_line(const char *line)
|
|||
void edi_consolepanel_clear()
|
||||
{
|
||||
elm_box_clear(_console_box);
|
||||
|
||||
elm_code_file_clear(_edi_test_code->file);
|
||||
_edi_test_count = 0;
|
||||
_edi_test_pass = 0;
|
||||
_edi_test_fail = 0;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
|
@ -196,6 +211,87 @@ _exe_error(void *d EINA_UNUSED, int t EINA_UNUSED, void *event_info)
|
|||
return ECORE_CALLBACK_RENEW;
|
||||
}
|
||||
|
||||
static void _edi_test_append(const char *content, Elm_Code_Status_Type type)
|
||||
{
|
||||
elm_code_file_line_append(_edi_test_code->file, content);
|
||||
elm_code_file_line_status_set(_edi_test_code->file, elm_code_file_lines_get(_edi_test_code->file), type);
|
||||
}
|
||||
|
||||
static void _edi_test_line_parse_suite(const char *path)
|
||||
{
|
||||
Eina_File *file;
|
||||
Eina_File_Line *line;
|
||||
Eina_Iterator *it;
|
||||
char logfile[PATH_MAX], *tmp;
|
||||
int pathlength;
|
||||
Elm_Code_Status_Type status;
|
||||
|
||||
pathlength = strlen(path);
|
||||
snprintf(logfile, pathlength + 4 + 1, "%s.log", path);
|
||||
|
||||
file = eina_file_open(logfile, EINA_FALSE);
|
||||
|
||||
it = eina_file_map_lines(file);
|
||||
EINA_ITERATOR_FOREACH(it, line)
|
||||
{
|
||||
status = ELM_CODE_STATUS_TYPE_DEFAULT;
|
||||
tmp = malloc(line->length + 1);
|
||||
strncpy(tmp, line->start, line->length);
|
||||
tmp[line->length] = 0;
|
||||
|
||||
if (strstr(tmp, ":P:"))
|
||||
status = ELM_CODE_STATUS_TYPE_PASSED;
|
||||
else if (strstr(tmp, ":F:"))
|
||||
status = ELM_CODE_STATUS_TYPE_FAILED;
|
||||
|
||||
_edi_test_append(tmp, status);
|
||||
free(tmp);
|
||||
}
|
||||
eina_iterator_free(it);
|
||||
}
|
||||
|
||||
static void _edi_test_line_parse_suite_pass_line(const char *line)
|
||||
{
|
||||
_edi_test_line_parse_suite(line);
|
||||
_edi_test_append("Suite passed", ELM_CODE_STATUS_TYPE_DEFAULT);
|
||||
}
|
||||
|
||||
static void _edi_test_line_parse_suite_fail_line(const char *line)
|
||||
{
|
||||
_edi_test_line_parse_suite(line);
|
||||
_edi_test_append("Suite failed", ELM_CODE_STATUS_TYPE_DEFAULT);
|
||||
}
|
||||
|
||||
static void _edi_test_line_parse_summary_line(const char *line)
|
||||
{
|
||||
_edi_test_append(line, ELM_CODE_STATUS_TYPE_DEFAULT);
|
||||
}
|
||||
|
||||
static void _edi_test_line_callback(const char *content)
|
||||
{
|
||||
if (!content)
|
||||
return;
|
||||
|
||||
if (content[0] == '#')
|
||||
{
|
||||
_edi_test_line_parse_summary_line(content + 2);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!strncmp(content, "PASS:", 5))
|
||||
{
|
||||
_edi_test_count++;
|
||||
_edi_test_pass++;
|
||||
_edi_test_line_parse_suite_pass_line(content + 6);
|
||||
}
|
||||
else if (!strncmp(content, "FAIL:", 5))
|
||||
{
|
||||
_edi_test_count++;
|
||||
_edi_test_fail++;
|
||||
_edi_test_line_parse_suite_fail_line(content + 6);
|
||||
}
|
||||
}
|
||||
|
||||
void edi_consolepanel_add(Evas_Object *parent)
|
||||
{
|
||||
Evas_Object *scroll, *vbx;
|
||||
|
@ -217,3 +313,22 @@ void edi_consolepanel_add(Evas_Object *parent)
|
|||
ecore_event_handler_add(ECORE_EXE_EVENT_DATA, _exe_data, NULL);
|
||||
ecore_event_handler_add(ECORE_EXE_EVENT_ERROR, _exe_error, NULL);
|
||||
}
|
||||
|
||||
void edi_testpanel_add(Evas_Object *parent)
|
||||
{
|
||||
Elm_Code *code;
|
||||
Evas_Object *widget;
|
||||
|
||||
code = elm_code_create();
|
||||
_edi_test_code = code;
|
||||
elm_code_file_new(code);
|
||||
|
||||
widget = elm_code_widget_add(parent, code);
|
||||
|
||||
evas_object_size_hint_weight_set(widget, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||
evas_object_size_hint_align_set(widget, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
||||
evas_object_show(widget);
|
||||
|
||||
elm_object_content_set(parent, widget);
|
||||
}
|
||||
|
||||
|
|
|
@ -38,6 +38,10 @@ EAPI void edi_consolepanel_add(Evas_Object *parent);
|
|||
*/
|
||||
EAPI void edi_consolepanel_show();
|
||||
|
||||
EAPI void edi_testpanel_add(Evas_Object *parent);
|
||||
|
||||
EAPI void edi_testpanel_show();
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
|
||||
#define COPYRIGHT "Copyright © 2014 Andy Williams <andy@andyilliams.me> and various contributors (see AUTHORS)."
|
||||
|
||||
static Evas_Object *_edi_filepanel, *_edi_logpanel, *_edi_consolepanel;
|
||||
static Evas_Object *_edi_filepanel, *_edi_logpanel, *_edi_consolepanel, *_edi_testpanel;
|
||||
static Evas_Object *_edi_main_win, *_edi_new_popup, *_edi_goto_popup;
|
||||
|
||||
static void
|
||||
|
@ -58,6 +58,11 @@ void edi_consolepanel_show()
|
|||
elm_panel_hidden_set(_edi_consolepanel, EINA_FALSE);
|
||||
}
|
||||
|
||||
void edi_testpanel_show()
|
||||
{
|
||||
elm_panel_hidden_set(_edi_testpanel, EINA_FALSE);
|
||||
}
|
||||
|
||||
static Evas_Object *
|
||||
edi_content_setup(Evas_Object *win, const char *path)
|
||||
{
|
||||
|
@ -69,6 +74,7 @@ edi_content_setup(Evas_Object *win, const char *path)
|
|||
_edi_filepanel = elm_panel_add(win);
|
||||
_edi_logpanel = elm_panel_add(win);
|
||||
_edi_consolepanel = elm_panel_add(win);
|
||||
_edi_testpanel = elm_panel_add(win);
|
||||
|
||||
// add main content
|
||||
content_out = elm_box_add(win);
|
||||
|
@ -119,6 +125,7 @@ edi_content_setup(Evas_Object *win, const char *path)
|
|||
|
||||
elm_toolbar_item_append(tb, NULL, "Logs", _edi_toggle_panel, _edi_logpanel);
|
||||
elm_toolbar_item_append(tb, NULL, "Console", _edi_toggle_panel, _edi_consolepanel);
|
||||
elm_toolbar_item_append(tb, NULL, "Tests", _edi_toggle_panel, _edi_testpanel);
|
||||
|
||||
elm_panel_orient_set(_edi_logpanel, ELM_PANEL_ORIENT_BOTTOM);
|
||||
evas_object_size_hint_weight_set(_edi_logpanel, EVAS_HINT_EXPAND, 0.15);
|
||||
|
@ -142,6 +149,17 @@ edi_content_setup(Evas_Object *win, const char *path)
|
|||
elm_table_pack(panes, _edi_consolepanel, 0, 4, 6, 1);
|
||||
evas_object_show(_edi_consolepanel);
|
||||
|
||||
elm_panel_orient_set(_edi_testpanel, ELM_PANEL_ORIENT_BOTTOM);
|
||||
evas_object_size_hint_weight_set(_edi_testpanel, EVAS_HINT_EXPAND, 0.15);
|
||||
evas_object_size_hint_align_set(_edi_testpanel, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
||||
evas_object_show(_edi_testpanel);
|
||||
|
||||
elm_panel_hidden_set(_edi_testpanel, EINA_FALSE);
|
||||
elm_panel_hidden_set(_edi_testpanel, EINA_TRUE);
|
||||
edi_testpanel_add(_edi_testpanel);
|
||||
elm_table_pack(panes, _edi_testpanel, 0, 4, 6, 1);
|
||||
evas_object_show(_edi_testpanel);
|
||||
|
||||
evas_object_show(panes);
|
||||
return panes;
|
||||
}
|
||||
|
@ -331,8 +349,12 @@ static void
|
|||
_tb_test_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
|
||||
{
|
||||
if (_edi_build_prep(obj))
|
||||
{
|
||||
elm_panel_hidden_set(_edi_consolepanel, EINA_TRUE);
|
||||
edi_testpanel_show();
|
||||
edi_builder_test();
|
||||
}
|
||||
}
|
||||
/*
|
||||
static void
|
||||
_tb_run_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
|
||||
|
|
|
@ -54,7 +54,7 @@ EAPI void
|
|||
edi_builder_test(void)
|
||||
{
|
||||
chdir(edi_project_get());
|
||||
ecore_exe_pipe_run("make check", ECORE_EXE_PIPE_READ_LINE_BUFFERED | ECORE_EXE_PIPE_READ |
|
||||
ecore_exe_pipe_run("CK_VERBOSITY=verbose make check", ECORE_EXE_PIPE_READ_LINE_BUFFERED | ECORE_EXE_PIPE_READ |
|
||||
ECORE_EXE_PIPE_ERROR_LINE_BUFFERED | ECORE_EXE_PIPE_ERROR, NULL);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue