tests: rework tytest.c/tyfuzz.c to no longer #include one in the other
This commit is contained in:
parent
bb09c80ab4
commit
392bfdb4a7
|
@ -38,7 +38,6 @@ terminology_sources = ['private.h',
|
||||||
'extns.c', 'extns.h',
|
'extns.c', 'extns.h',
|
||||||
'gravatar.c', 'gravatar.h',
|
'gravatar.c', 'gravatar.h',
|
||||||
'tty_keys.h',
|
'tty_keys.h',
|
||||||
'tytest.c', 'tytest.h',
|
|
||||||
'sb.c', 'sb.h']
|
'sb.c', 'sb.h']
|
||||||
|
|
||||||
tybg_sources = ['tycommon.c', 'tycommon.h', 'tybg.c']
|
tybg_sources = ['tycommon.c', 'tycommon.h', 'tybg.c']
|
||||||
|
@ -62,6 +61,7 @@ tyfuzz_sources = ['termptyesc.c', 'termptyesc.h',
|
||||||
'sb.c', 'sb.h',
|
'sb.c', 'sb.h',
|
||||||
'utf8.c', 'utf8.h',
|
'utf8.c', 'utf8.h',
|
||||||
'utils.c', 'utils.h',
|
'utils.c', 'utils.h',
|
||||||
|
'tytest_common.c', 'tytest_common.h',
|
||||||
'tyfuzz.c']
|
'tyfuzz.c']
|
||||||
tytest_sources = ['termptyesc.c', 'termptyesc.h',
|
tytest_sources = ['termptyesc.c', 'termptyesc.h',
|
||||||
'backlog.c', 'backlog.h',
|
'backlog.c', 'backlog.h',
|
||||||
|
@ -78,6 +78,7 @@ tytest_sources = ['termptyesc.c', 'termptyesc.h',
|
||||||
'utf8.c', 'utf8.h',
|
'utf8.c', 'utf8.h',
|
||||||
'utils.c', 'utils.h',
|
'utils.c', 'utils.h',
|
||||||
'md5/md5.c', 'md5/md5.h',
|
'md5/md5.c', 'md5/md5.h',
|
||||||
|
'tytest_common.c', 'tytest_common.h',
|
||||||
'tytest.c', 'tytest.h']
|
'tytest.c', 'tytest.h']
|
||||||
|
|
||||||
executable('terminology',
|
executable('terminology',
|
||||||
|
|
|
@ -10,7 +10,9 @@
|
||||||
#include "termptyops.h"
|
#include "termptyops.h"
|
||||||
#include "termiointernals.h"
|
#include "termiointernals.h"
|
||||||
#include "utf8.h"
|
#include "utf8.h"
|
||||||
|
#if defined(ENABLE_TESTS) || defined(ENABLE_TEST_UI)
|
||||||
#include "tytest.h"
|
#include "tytest.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
/* {{{ Selection */
|
/* {{{ Selection */
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,9 @@
|
||||||
#include "termpty.h"
|
#include "termpty.h"
|
||||||
#include "termptyops.h"
|
#include "termptyops.h"
|
||||||
#include "termiointernals.h"
|
#include "termiointernals.h"
|
||||||
|
#if defined(ENABLE_TESTS) || defined(ENABLE_TEST_UI)
|
||||||
#include "tytest.h"
|
#include "tytest.h"
|
||||||
|
#endif
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
#undef CRITICAL
|
#undef CRITICAL
|
||||||
|
@ -32,6 +34,25 @@
|
||||||
|
|
||||||
#if defined(ENABLE_TESTS) || defined(ENABLE_TEST_UI)
|
#if defined(ENABLE_TESTS) || defined(ENABLE_TEST_UI)
|
||||||
|
|
||||||
|
static int _mx;
|
||||||
|
static int _my;
|
||||||
|
|
||||||
|
void
|
||||||
|
test_set_mouse_pointer(int mx, int my)
|
||||||
|
{
|
||||||
|
_mx = mx;
|
||||||
|
_my = my;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
test_pointer_canvas_xy_get(int *mx, int *my)
|
||||||
|
{
|
||||||
|
if (mx)
|
||||||
|
*mx = _mx;
|
||||||
|
if (my)
|
||||||
|
*my = _my;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
_tytest_arg_get(const Eina_Unicode *buf, int *value)
|
_tytest_arg_get(const Eina_Unicode *buf, int *value)
|
||||||
{
|
{
|
||||||
|
|
373
src/bin/tyfuzz.c
373
src/bin/tyfuzz.c
|
@ -5,388 +5,35 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
#include "private.h"
|
#include "private.h"
|
||||||
#include <Elementary.h>
|
#include <Elementary.h>
|
||||||
|
#include "config.h"
|
||||||
#include "termpty.h"
|
#include "termpty.h"
|
||||||
#include "termptyops.h"
|
#include "termptyops.h"
|
||||||
#include "termiointernals.h"
|
#include "termiointernals.h"
|
||||||
#include <assert.h>
|
#include "tytest_common.h"
|
||||||
|
|
||||||
#ifdef TYTEST
|
|
||||||
#include "col.h"
|
|
||||||
#include "tytest.h"
|
|
||||||
#include "md5/md5.h"
|
|
||||||
|
|
||||||
static void
|
|
||||||
_tytest_checksum(Termpty *ty);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define TY_H 24
|
|
||||||
#define TY_W 80
|
|
||||||
#define TY_CH_H 15
|
|
||||||
#define TY_CH_W 7
|
|
||||||
#define TY_OFFSET_X 1
|
|
||||||
#define TY_OFFSET_Y 1
|
|
||||||
#define TY_BACKSIZE 50
|
|
||||||
|
|
||||||
|
|
||||||
/* {{{ stub */
|
|
||||||
int _log_domain = -1;
|
int _log_domain = -1;
|
||||||
|
|
||||||
static Config *_config = NULL;
|
|
||||||
static Termpty _ty;
|
|
||||||
static Termio _sd = {
|
|
||||||
.font = {
|
|
||||||
.name = "",
|
|
||||||
.size = 10,
|
|
||||||
.chw = TY_CH_W,
|
|
||||||
.chh = TY_CH_H,
|
|
||||||
},
|
|
||||||
.grid = {
|
|
||||||
.w = TY_W,
|
|
||||||
.h = TY_H,
|
|
||||||
},
|
|
||||||
.sel = {},
|
|
||||||
.cursor = {
|
|
||||||
.obj = NULL,
|
|
||||||
.x = 0,
|
|
||||||
.y = 0,
|
|
||||||
.shape = CURSOR_SHAPE_BLOCK,
|
|
||||||
},
|
|
||||||
.mouse = {},
|
|
||||||
.link = {},
|
|
||||||
.pty = &_ty,
|
|
||||||
.config = NULL,
|
|
||||||
};
|
|
||||||
|
|
||||||
void
|
|
||||||
main_config_sync(const Config *config EINA_UNUSED)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Termio *
|
|
||||||
termio_get_from_obj(Evas_Object *obj EINA_UNUSED)
|
|
||||||
{
|
|
||||||
return &_sd;
|
|
||||||
}
|
|
||||||
|
|
||||||
Config *
|
|
||||||
termio_config_get(const Evas_Object *obj EINA_UNUSED)
|
|
||||||
{
|
|
||||||
return _config;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
termio_take_selection_text(Termio *sd EINA_UNUSED,
|
|
||||||
Elm_Sel_Type type EINA_UNUSED,
|
|
||||||
const char *text EINA_UNUSED)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
termio_paste_selection(Evas_Object *obj EINA_UNUSED,
|
|
||||||
Elm_Sel_Type type EINA_UNUSED)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
termio_smart_update_queue(Termio *sd EINA_UNUSED)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
termio_handle_right_click(Evas_Event_Mouse_Down *ev EINA_UNUSED,
|
|
||||||
Termio *sd EINA_UNUSED,
|
|
||||||
int cx EINA_UNUSED, int cy EINA_UNUSED)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
termio_smart_cb_mouse_move_job(void *data EINA_UNUSED)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
miniview_position_offset(const Evas_Object *obj EINA_UNUSED,
|
|
||||||
int by EINA_UNUSED,
|
|
||||||
Eina_Bool sanitize EINA_UNUSED)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
Evas_Object *
|
|
||||||
term_miniview_get(const Term *term EINA_UNUSED)
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
int
|
||||||
termio_scroll_get(const Evas_Object *obj EINA_UNUSED)
|
main(int argc, char **argv)
|
||||||
{
|
|
||||||
return _sd.scroll;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
termio_size_get(const Evas_Object *obj EINA_UNUSED,
|
|
||||||
int *w, int *h)
|
|
||||||
{
|
|
||||||
if (w) *w = _sd.grid.w;
|
|
||||||
if (h) *h = _sd.grid.h;
|
|
||||||
}
|
|
||||||
|
|
||||||
Termpty *
|
|
||||||
termio_pty_get(const Evas_Object *obj EINA_UNUSED)
|
|
||||||
{
|
|
||||||
return &_ty;
|
|
||||||
}
|
|
||||||
|
|
||||||
Eina_Bool
|
|
||||||
termio_cwd_get(const Evas_Object *obj EINA_UNUSED,
|
|
||||||
char *buf,
|
|
||||||
size_t size)
|
|
||||||
{
|
|
||||||
assert (size >= 2);
|
|
||||||
|
|
||||||
buf[0] = '\0';
|
|
||||||
buf[1] = '\0';
|
|
||||||
|
|
||||||
return EINA_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
termio_sel_set(Termio *sd, Eina_Bool enable)
|
|
||||||
{
|
|
||||||
sd->pty->selection.is_active = enable;
|
|
||||||
if (!enable)
|
|
||||||
{
|
|
||||||
sd->pty->selection.by_word = EINA_FALSE;
|
|
||||||
sd->pty->selection.by_line = EINA_FALSE;
|
|
||||||
free(sd->pty->selection.codepoints);
|
|
||||||
sd->pty->selection.codepoints = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void
|
|
||||||
termio_object_geometry_get(Termio *sd,
|
|
||||||
Evas_Coord *x, Evas_Coord *y,
|
|
||||||
Evas_Coord *w, Evas_Coord *h)
|
|
||||||
{
|
|
||||||
if (x)
|
|
||||||
*x = TY_OFFSET_X;
|
|
||||||
if (y)
|
|
||||||
*y = TY_OFFSET_Y;
|
|
||||||
if (w)
|
|
||||||
*w = TY_OFFSET_X + sd->font.chw * sd->grid.w;
|
|
||||||
if (h)
|
|
||||||
*h = TY_OFFSET_Y + sd->font.chh * sd->grid.h;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
termio_font_size_set(Evas_Object *obj EINA_UNUSED,
|
|
||||||
int size)
|
|
||||||
{
|
|
||||||
_sd.font.size = size;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *
|
|
||||||
term_preedit_str_get(Term *term EINA_UNUSED)
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
termio_block_activate(Evas_Object *obj EINA_UNUSED,
|
|
||||||
Termblock *blk EINA_UNUSED)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
Eina_Bool
|
|
||||||
termio_take_selection(Evas_Object *obj,
|
|
||||||
Elm_Sel_Type type EINA_UNUSED)
|
|
||||||
{
|
|
||||||
Termio *sd;
|
|
||||||
const char *s;
|
|
||||||
size_t len;
|
|
||||||
|
|
||||||
sd = termio_get_from_obj(obj);
|
|
||||||
s = termio_internal_get_selection(sd, &len);
|
|
||||||
if (s)
|
|
||||||
{
|
|
||||||
eina_stringshare_del(s);
|
|
||||||
return EINA_TRUE;
|
|
||||||
}
|
|
||||||
return EINA_FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
termio_remove_links(Termio *sd)
|
|
||||||
{
|
|
||||||
sd->link.string = NULL;
|
|
||||||
sd->link.x1 = -1;
|
|
||||||
sd->link.y1 = -1;
|
|
||||||
sd->link.x2 = -1;
|
|
||||||
sd->link.y2 = -1;
|
|
||||||
sd->link.suspend = EINA_FALSE;
|
|
||||||
sd->link.id = 0;
|
|
||||||
sd->link.objs = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef TYTEST
|
|
||||||
void
|
|
||||||
termio_set_cursor_shape(Evas_Object *obj EINA_UNUSED,
|
|
||||||
Cursor_Shape shape EINA_UNUSED)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int
|
|
||||||
termpty_color_class_get(Termpty *ty EINA_UNUSED, const char *key,
|
|
||||||
int *r, int *g, int *b, int *a)
|
|
||||||
{
|
|
||||||
if (strncmp(key, "BG", strlen("BG")) == 0)
|
|
||||||
{
|
|
||||||
if (r)
|
|
||||||
*r = 131;
|
|
||||||
if (g)
|
|
||||||
*g = 132;
|
|
||||||
if (b)
|
|
||||||
*b = 133;
|
|
||||||
if (a)
|
|
||||||
*a = 134;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
/* }}} */
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
_termpty_init(Termpty *ty, Config *config)
|
|
||||||
{
|
|
||||||
memset(ty, '\0', sizeof(*ty));
|
|
||||||
ty->config = config;
|
|
||||||
ty->w = TY_W;
|
|
||||||
ty->h = TY_H;
|
|
||||||
ty->backsize = TY_BACKSIZE;
|
|
||||||
termpty_resize_tabs(ty, 0, ty->w);
|
|
||||||
termpty_reset_state(ty);
|
|
||||||
ty->screen = calloc(1, sizeof(Termcell) * ty->w * ty->h);
|
|
||||||
ty->screen2 = calloc(1, sizeof(Termcell) * ty->w * ty->h);
|
|
||||||
assert(ty->screen);
|
|
||||||
assert(ty->screen2);
|
|
||||||
ty->circular_offset = 0;
|
|
||||||
ty->fd = STDIN_FILENO;
|
|
||||||
ty->hl.bitmap = calloc(1, HL_LINKS_MAX / 8); /* bit map for 1 << 16 elements */
|
|
||||||
assert(ty->hl.bitmap);
|
|
||||||
/* Mark id 0 as set */
|
|
||||||
ty->hl.bitmap[0] = 1;
|
|
||||||
ty->backlog_beacon.backlog_y = 0;
|
|
||||||
ty->backlog_beacon.screen_y = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
|
|
||||||
{
|
{
|
||||||
eina_init();
|
eina_init();
|
||||||
|
|
||||||
#ifdef TYTEST
|
_log_domain = eina_log_domain_register("tyfuzz", NULL);
|
||||||
tytest_init();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
tytest_common_init();
|
||||||
_log_domain = eina_log_domain_register(
|
|
||||||
#ifdef TYTEST
|
|
||||||
"tytest",
|
|
||||||
#else
|
|
||||||
"tyfuzz",
|
|
||||||
#endif
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
_config = config_new();
|
|
||||||
_sd.config = _config;
|
|
||||||
|
|
||||||
_termpty_init(&_ty, _config);
|
|
||||||
|
|
||||||
if (argc > 1)
|
if (argc > 1)
|
||||||
{
|
{
|
||||||
_ty.fd = open(argv[1], O_RDONLY);
|
tytest_common_set_fd(open(argv[1], O_RDONLY));
|
||||||
assert(_ty.fd >= 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
do
|
tytest_common_main_loop();
|
||||||
{
|
|
||||||
char buf[4097];
|
|
||||||
Eina_Unicode codepoint[4097];
|
|
||||||
int i, j;
|
|
||||||
char *rbuf = buf;
|
|
||||||
int len = sizeof(buf) - 1;
|
|
||||||
|
|
||||||
for (i = 0; i < (int)sizeof(_ty.oldbuf) && _ty.oldbuf[i] & 0x80; i++)
|
tytest_common_shutdown();
|
||||||
{
|
|
||||||
*rbuf = _ty.oldbuf[i];
|
|
||||||
rbuf++;
|
|
||||||
len--;
|
|
||||||
}
|
|
||||||
len = read(_ty.fd, rbuf, len);
|
|
||||||
if (len < 0 && errno != EAGAIN)
|
|
||||||
{
|
|
||||||
ERR("error while reading from tty slave fd");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (len <= 0) break;
|
|
||||||
|
|
||||||
for (i = 0; i < (int)sizeof(_ty.oldbuf); i++)
|
|
||||||
_ty.oldbuf[i] = 0;
|
|
||||||
|
|
||||||
len += rbuf - buf;
|
|
||||||
|
|
||||||
buf[len] = 0;
|
|
||||||
// convert UTF8 to codepoint integers
|
|
||||||
j = 0;
|
|
||||||
for (i = 0; i < len;)
|
|
||||||
{
|
|
||||||
int g = 0, prev_i = i;
|
|
||||||
|
|
||||||
if (buf[i])
|
|
||||||
{
|
|
||||||
g = eina_unicode_utf8_next_get(buf, &i);
|
|
||||||
if ((0xdc80 <= g) && (g <= 0xdcff) &&
|
|
||||||
(len - prev_i) <= (int)sizeof(_ty.oldbuf))
|
|
||||||
{
|
|
||||||
int k;
|
|
||||||
for (k = 0;
|
|
||||||
(k < (int)sizeof(_ty.oldbuf)) &&
|
|
||||||
(k < (len - prev_i));
|
|
||||||
k++)
|
|
||||||
{
|
|
||||||
_ty.oldbuf[k] = buf[prev_i+k];
|
|
||||||
}
|
|
||||||
DBG("failure at %d/%d/%d", prev_i, i, len);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
g = 0;
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
codepoint[j] = g;
|
|
||||||
j++;
|
|
||||||
}
|
|
||||||
codepoint[j] = 0;
|
|
||||||
termpty_handle_buf(&_ty, codepoint, j);
|
|
||||||
}
|
|
||||||
while (1);
|
|
||||||
|
|
||||||
#ifdef TYTEST
|
|
||||||
_tytest_checksum(&_ty);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef TYTEST
|
|
||||||
tytest_shutdown();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
config_del(_config);
|
|
||||||
eina_shutdown();
|
eina_shutdown();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
151
src/bin/tytest.c
151
src/bin/tytest.c
|
@ -1,10 +1,24 @@
|
||||||
#include "private.h"
|
#include "private.h"
|
||||||
#if defined(ENABLE_TESTS)
|
#include <stdio.h>
|
||||||
#define TYTEST 1
|
#include <limits.h>
|
||||||
#include "tyfuzz.c"
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
static const char *_cursor_shape = "undefined";
|
#include "private.h"
|
||||||
static Evas_Textgrid_Cell *_cells;
|
#include <Elementary.h>
|
||||||
|
#include "config.h"
|
||||||
|
#include "termpty.h"
|
||||||
|
#include "termptyops.h"
|
||||||
|
#include "termiointernals.h"
|
||||||
|
#include "tytest_common.h"
|
||||||
|
|
||||||
|
#include "md5/md5.h"
|
||||||
|
|
||||||
|
int _log_domain = -1;
|
||||||
|
|
||||||
typedef struct _Termpty_Tests
|
typedef struct _Termpty_Tests
|
||||||
{
|
{
|
||||||
|
@ -20,59 +34,6 @@ typedef struct _Termpty_Tests
|
||||||
unsigned int bracketed_paste : 1;
|
unsigned int bracketed_paste : 1;
|
||||||
} Termpty_Tests;
|
} Termpty_Tests;
|
||||||
|
|
||||||
Evas_Object *
|
|
||||||
termio_textgrid_get(const Evas_Object *obj EINA_UNUSED)
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
test_textgrid_palette_get(const Evas_Object *obj EINA_UNUSED,
|
|
||||||
Evas_Textgrid_Palette pal,
|
|
||||||
int idx,
|
|
||||||
int *r,
|
|
||||||
int *g,
|
|
||||||
int *b,
|
|
||||||
int *a)
|
|
||||||
{
|
|
||||||
if (pal == EVAS_TEXTGRID_PALETTE_EXTENDED)
|
|
||||||
{
|
|
||||||
colors_256_get(idx,
|
|
||||||
(unsigned char *)r,
|
|
||||||
(unsigned char *)g,
|
|
||||||
(unsigned char *)b,
|
|
||||||
(unsigned char *)a);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
int set = idx / 12;
|
|
||||||
int col = idx % 12;
|
|
||||||
colors_standard_get(set, col,
|
|
||||||
(unsigned char*)r,
|
|
||||||
(unsigned char*)g,
|
|
||||||
(unsigned char*)b,
|
|
||||||
(unsigned char*)a);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
termio_set_cursor_shape(Evas_Object *obj EINA_UNUSED,
|
|
||||||
Cursor_Shape shape EINA_UNUSED)
|
|
||||||
{
|
|
||||||
switch (shape)
|
|
||||||
{
|
|
||||||
case CURSOR_SHAPE_UNDERLINE:
|
|
||||||
_cursor_shape = "underline";
|
|
||||||
break;
|
|
||||||
case CURSOR_SHAPE_BAR:
|
|
||||||
_cursor_shape = "bar";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
case CURSOR_SHAPE_BLOCK:
|
|
||||||
_cursor_shape = "block";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_termpty_to_termpty_tests(Termpty *ty, Termpty_Tests *tt)
|
_termpty_to_termpty_tests(Termpty *ty, Termpty_Tests *tt)
|
||||||
{
|
{
|
||||||
|
@ -138,8 +99,9 @@ _tytest_checksum(Termpty *ty)
|
||||||
MD5Update(&ctx, (unsigned char const*)"(NULL)", 6);
|
MD5Update(&ctx, (unsigned char const*)"(NULL)", 6);
|
||||||
}
|
}
|
||||||
/* Cursor shape */
|
/* Cursor shape */
|
||||||
MD5Update(&ctx, (unsigned char const*)_cursor_shape,
|
const char *cursor_shape = tytest_cursor_shape_get();
|
||||||
strlen(_cursor_shape));
|
MD5Update(&ctx, (unsigned char const*)cursor_shape,
|
||||||
|
strlen(cursor_shape));
|
||||||
/* Write buffer */
|
/* Write buffer */
|
||||||
if (ty->write_buffer.buf)
|
if (ty->write_buffer.buf)
|
||||||
{
|
{
|
||||||
|
@ -158,56 +120,23 @@ _tytest_checksum(Termpty *ty)
|
||||||
printf("%s", md5out);
|
printf("%s", md5out);
|
||||||
}
|
}
|
||||||
|
|
||||||
Evas_Textgrid_Cell *
|
|
||||||
test_textgrid_cellrow_get(Evas_Object *obj EINA_UNUSED, int y)
|
int
|
||||||
|
main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
|
||||||
{
|
{
|
||||||
assert (y >= 0 && y < _sd.pty->h);
|
eina_init();
|
||||||
return &_cells[y * _sd.pty->w];
|
|
||||||
|
_log_domain = eina_log_domain_register("tytest", NULL);
|
||||||
|
|
||||||
|
tytest_common_init();
|
||||||
|
|
||||||
|
tytest_common_main_loop();
|
||||||
|
|
||||||
|
_tytest_checksum(tytest_termpty_get());
|
||||||
|
|
||||||
|
tytest_common_shutdown();
|
||||||
|
|
||||||
|
eina_shutdown();
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
tytest_termio_resize(int w, int h)
|
|
||||||
{
|
|
||||||
Evas_Textgrid_Cell *cells = realloc(_cells,
|
|
||||||
w * h * sizeof(Evas_Textgrid_Cell));
|
|
||||||
assert (cells);
|
|
||||||
_sd.grid.w = w;
|
|
||||||
_sd.grid.h = h;
|
|
||||||
_cells = cells;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
tytest_init(void)
|
|
||||||
{
|
|
||||||
_cells = calloc(TY_H * TY_W, sizeof(Evas_Textgrid_Cell));
|
|
||||||
assert(_cells != NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
tytest_shutdown(void)
|
|
||||||
{
|
|
||||||
free(_cells);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(ENABLE_TESTS) || defined(ENABLE_TEST_UI)
|
|
||||||
static int _mx;
|
|
||||||
static int _my;
|
|
||||||
|
|
||||||
void
|
|
||||||
test_set_mouse_pointer(int mx, int my)
|
|
||||||
{
|
|
||||||
_mx = mx;
|
|
||||||
_my = my;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
test_pointer_canvas_xy_get(int *mx, int *my)
|
|
||||||
{
|
|
||||||
if (mx)
|
|
||||||
*mx = _mx;
|
|
||||||
if (my)
|
|
||||||
*my = _my;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -12,16 +12,12 @@ test_textgrid_palette_get(const Evas_Object *obj,
|
||||||
int *b,
|
int *b,
|
||||||
int *a);
|
int *a);
|
||||||
|
|
||||||
#define evas_object_textgrid_cellrow_get test_textgrid_cellrow_get
|
#define evas_object_textgrid_cellrow_get tytest_textgrid_cellrow_get
|
||||||
Evas_Textgrid_Cell *
|
Evas_Textgrid_Cell *
|
||||||
test_textgrid_cellrow_get(Evas_Object *obj, int y);
|
tytest_textgrid_cellrow_get(Evas_Object *obj, int y);
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
tytest_termio_resize(int w, int h);
|
tytest_termio_resize(int w, int h);
|
||||||
|
|
||||||
void tytest_init(void);
|
|
||||||
void tytest_shutdown(void);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(ENABLE_TESTS) || defined(ENABLE_TEST_UI)
|
#if defined(ENABLE_TESTS) || defined(ENABLE_TEST_UI)
|
||||||
|
|
|
@ -0,0 +1,447 @@
|
||||||
|
#include "private.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include "private.h"
|
||||||
|
#include <Elementary.h>
|
||||||
|
#include "termpty.h"
|
||||||
|
#include "termptyops.h"
|
||||||
|
#include "termiointernals.h"
|
||||||
|
#include "tytest_common.h"
|
||||||
|
#if defined(ENABLE_TESTS)
|
||||||
|
#include "col.h"
|
||||||
|
#include "tytest.h"
|
||||||
|
#endif
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
static Config *_config = NULL;
|
||||||
|
static Termpty _ty;
|
||||||
|
static Termio _sd = {
|
||||||
|
.font = {
|
||||||
|
.name = "",
|
||||||
|
.size = 10,
|
||||||
|
.chw = TY_CH_W,
|
||||||
|
.chh = TY_CH_H,
|
||||||
|
},
|
||||||
|
.grid = {
|
||||||
|
.w = TY_W,
|
||||||
|
.h = TY_H,
|
||||||
|
},
|
||||||
|
.sel = {},
|
||||||
|
.cursor = {
|
||||||
|
.obj = NULL,
|
||||||
|
.x = 0,
|
||||||
|
.y = 0,
|
||||||
|
.shape = CURSOR_SHAPE_BLOCK,
|
||||||
|
},
|
||||||
|
.mouse = {},
|
||||||
|
.link = {},
|
||||||
|
.pty = &_ty,
|
||||||
|
.config = NULL,
|
||||||
|
};
|
||||||
|
static const char *_cursor_shape = "undefined";
|
||||||
|
#if defined(ENABLE_TESTS)
|
||||||
|
static Evas_Textgrid_Cell *_cells;
|
||||||
|
|
||||||
|
const char *
|
||||||
|
tytest_cursor_shape_get(void)
|
||||||
|
{
|
||||||
|
return _cursor_shape;
|
||||||
|
}
|
||||||
|
|
||||||
|
Evas_Textgrid_Cell *
|
||||||
|
tytest_textgrid_cellrow_get(Evas_Object *obj EINA_UNUSED, int y)
|
||||||
|
{
|
||||||
|
assert (y >= 0 && y < _sd.pty->h);
|
||||||
|
return &_cells[y * _sd.pty->w];
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
tytest_termio_resize(int w, int h)
|
||||||
|
{
|
||||||
|
Evas_Textgrid_Cell *cells = realloc(_cells,
|
||||||
|
w * h * sizeof(Evas_Textgrid_Cell));
|
||||||
|
assert (cells);
|
||||||
|
_sd.grid.w = w;
|
||||||
|
_sd.grid.h = h;
|
||||||
|
_cells = cells;
|
||||||
|
}
|
||||||
|
|
||||||
|
Termpty *
|
||||||
|
tytest_termpty_get(void)
|
||||||
|
{
|
||||||
|
return &_ty;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
main_config_sync(const Config *config EINA_UNUSED)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Termio *
|
||||||
|
termio_get_from_obj(Evas_Object *obj EINA_UNUSED)
|
||||||
|
{
|
||||||
|
return &_sd;
|
||||||
|
}
|
||||||
|
|
||||||
|
Config *
|
||||||
|
termio_config_get(const Evas_Object *obj EINA_UNUSED)
|
||||||
|
{
|
||||||
|
return _config;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
termio_take_selection_text(Termio *sd EINA_UNUSED,
|
||||||
|
Elm_Sel_Type type EINA_UNUSED,
|
||||||
|
const char *text EINA_UNUSED)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
termio_paste_selection(Evas_Object *obj EINA_UNUSED,
|
||||||
|
Elm_Sel_Type type EINA_UNUSED)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
termio_smart_update_queue(Termio *sd EINA_UNUSED)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
termio_handle_right_click(Evas_Event_Mouse_Down *ev EINA_UNUSED,
|
||||||
|
Termio *sd EINA_UNUSED,
|
||||||
|
int cx EINA_UNUSED, int cy EINA_UNUSED)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
termio_smart_cb_mouse_move_job(void *data EINA_UNUSED)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
miniview_position_offset(const Evas_Object *obj EINA_UNUSED,
|
||||||
|
int by EINA_UNUSED,
|
||||||
|
Eina_Bool sanitize EINA_UNUSED)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
Evas_Object *
|
||||||
|
term_miniview_get(const Term *term EINA_UNUSED)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
termio_scroll_get(const Evas_Object *obj EINA_UNUSED)
|
||||||
|
{
|
||||||
|
return _sd.scroll;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
termio_size_get(const Evas_Object *obj EINA_UNUSED,
|
||||||
|
int *w, int *h)
|
||||||
|
{
|
||||||
|
if (w) *w = _sd.grid.w;
|
||||||
|
if (h) *h = _sd.grid.h;
|
||||||
|
}
|
||||||
|
|
||||||
|
Termpty *
|
||||||
|
termio_pty_get(const Evas_Object *obj EINA_UNUSED)
|
||||||
|
{
|
||||||
|
return &_ty;
|
||||||
|
}
|
||||||
|
|
||||||
|
Eina_Bool
|
||||||
|
termio_cwd_get(const Evas_Object *obj EINA_UNUSED,
|
||||||
|
char *buf,
|
||||||
|
size_t size)
|
||||||
|
{
|
||||||
|
assert (size >= 2);
|
||||||
|
|
||||||
|
buf[0] = '\0';
|
||||||
|
buf[1] = '\0';
|
||||||
|
|
||||||
|
return EINA_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
termio_sel_set(Termio *sd, Eina_Bool enable)
|
||||||
|
{
|
||||||
|
sd->pty->selection.is_active = enable;
|
||||||
|
if (!enable)
|
||||||
|
{
|
||||||
|
sd->pty->selection.by_word = EINA_FALSE;
|
||||||
|
sd->pty->selection.by_line = EINA_FALSE;
|
||||||
|
free(sd->pty->selection.codepoints);
|
||||||
|
sd->pty->selection.codepoints = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void
|
||||||
|
termio_object_geometry_get(Termio *sd,
|
||||||
|
Evas_Coord *x, Evas_Coord *y,
|
||||||
|
Evas_Coord *w, Evas_Coord *h)
|
||||||
|
{
|
||||||
|
if (x)
|
||||||
|
*x = TY_OFFSET_X;
|
||||||
|
if (y)
|
||||||
|
*y = TY_OFFSET_Y;
|
||||||
|
if (w)
|
||||||
|
*w = TY_OFFSET_X + sd->font.chw * sd->grid.w;
|
||||||
|
if (h)
|
||||||
|
*h = TY_OFFSET_Y + sd->font.chh * sd->grid.h;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
termio_font_size_set(Evas_Object *obj EINA_UNUSED,
|
||||||
|
int size)
|
||||||
|
{
|
||||||
|
_sd.font.size = size;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *
|
||||||
|
term_preedit_str_get(Term *term EINA_UNUSED)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
termio_block_activate(Evas_Object *obj EINA_UNUSED,
|
||||||
|
Termblock *blk EINA_UNUSED)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
Eina_Bool
|
||||||
|
termio_take_selection(Evas_Object *obj,
|
||||||
|
Elm_Sel_Type type EINA_UNUSED)
|
||||||
|
{
|
||||||
|
Termio *sd;
|
||||||
|
const char *s;
|
||||||
|
size_t len;
|
||||||
|
|
||||||
|
sd = termio_get_from_obj(obj);
|
||||||
|
s = termio_internal_get_selection(sd, &len);
|
||||||
|
if (s)
|
||||||
|
{
|
||||||
|
eina_stringshare_del(s);
|
||||||
|
return EINA_TRUE;
|
||||||
|
}
|
||||||
|
return EINA_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
termio_remove_links(Termio *sd)
|
||||||
|
{
|
||||||
|
sd->link.string = NULL;
|
||||||
|
sd->link.x1 = -1;
|
||||||
|
sd->link.y1 = -1;
|
||||||
|
sd->link.x2 = -1;
|
||||||
|
sd->link.y2 = -1;
|
||||||
|
sd->link.suspend = EINA_FALSE;
|
||||||
|
sd->link.id = 0;
|
||||||
|
sd->link.objs = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
termio_set_cursor_shape(Evas_Object *obj EINA_UNUSED,
|
||||||
|
Cursor_Shape shape EINA_UNUSED)
|
||||||
|
{
|
||||||
|
switch (shape)
|
||||||
|
{
|
||||||
|
case CURSOR_SHAPE_UNDERLINE:
|
||||||
|
_cursor_shape = "underline";
|
||||||
|
break;
|
||||||
|
case CURSOR_SHAPE_BAR:
|
||||||
|
_cursor_shape = "bar";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
case CURSOR_SHAPE_BLOCK:
|
||||||
|
_cursor_shape = "block";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
termpty_color_class_get(Termpty *ty EINA_UNUSED, const char *key,
|
||||||
|
int *r, int *g, int *b, int *a)
|
||||||
|
{
|
||||||
|
if (strncmp(key, "BG", strlen("BG")) == 0)
|
||||||
|
{
|
||||||
|
if (r)
|
||||||
|
*r = 131;
|
||||||
|
if (g)
|
||||||
|
*g = 132;
|
||||||
|
if (b)
|
||||||
|
*b = 133;
|
||||||
|
if (a)
|
||||||
|
*a = 134;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
Evas_Object *
|
||||||
|
termio_textgrid_get(const Evas_Object *obj EINA_UNUSED)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(ENABLE_TESTS)
|
||||||
|
void
|
||||||
|
test_textgrid_palette_get(const Evas_Object *obj EINA_UNUSED,
|
||||||
|
Evas_Textgrid_Palette pal,
|
||||||
|
int idx,
|
||||||
|
int *r,
|
||||||
|
int *g,
|
||||||
|
int *b,
|
||||||
|
int *a)
|
||||||
|
{
|
||||||
|
if (pal == EVAS_TEXTGRID_PALETTE_EXTENDED)
|
||||||
|
{
|
||||||
|
colors_256_get(idx,
|
||||||
|
(unsigned char *)r,
|
||||||
|
(unsigned char *)g,
|
||||||
|
(unsigned char *)b,
|
||||||
|
(unsigned char *)a);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int set = idx / 12;
|
||||||
|
int col = idx % 12;
|
||||||
|
colors_standard_get(set, col,
|
||||||
|
(unsigned char*)r,
|
||||||
|
(unsigned char*)g,
|
||||||
|
(unsigned char*)b,
|
||||||
|
(unsigned char*)a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static void
|
||||||
|
_termpty_init(Termpty *ty, Config *config)
|
||||||
|
{
|
||||||
|
memset(ty, '\0', sizeof(*ty));
|
||||||
|
ty->config = config;
|
||||||
|
ty->w = TY_W;
|
||||||
|
ty->h = TY_H;
|
||||||
|
ty->backsize = TY_BACKSIZE;
|
||||||
|
termpty_resize_tabs(ty, 0, ty->w);
|
||||||
|
termpty_reset_state(ty);
|
||||||
|
ty->screen = calloc(1, sizeof(Termcell) * ty->w * ty->h);
|
||||||
|
ty->screen2 = calloc(1, sizeof(Termcell) * ty->w * ty->h);
|
||||||
|
assert(ty->screen);
|
||||||
|
assert(ty->screen2);
|
||||||
|
ty->circular_offset = 0;
|
||||||
|
ty->fd = STDIN_FILENO;
|
||||||
|
ty->hl.bitmap = calloc(1, HL_LINKS_MAX / 8); /* bit map for 1 << 16 elements */
|
||||||
|
assert(ty->hl.bitmap);
|
||||||
|
/* Mark id 0 as set */
|
||||||
|
ty->hl.bitmap[0] = 1;
|
||||||
|
ty->backlog_beacon.backlog_y = 0;
|
||||||
|
ty->backlog_beacon.screen_y = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
tytest_common_main_loop(void)
|
||||||
|
{
|
||||||
|
do
|
||||||
|
{
|
||||||
|
char buf[4097];
|
||||||
|
Eina_Unicode codepoint[4097];
|
||||||
|
int i, j;
|
||||||
|
char *rbuf = buf;
|
||||||
|
int len = sizeof(buf) - 1;
|
||||||
|
|
||||||
|
for (i = 0; i < (int)sizeof(_ty.oldbuf) && _ty.oldbuf[i] & 0x80; i++)
|
||||||
|
{
|
||||||
|
*rbuf = _ty.oldbuf[i];
|
||||||
|
rbuf++;
|
||||||
|
len--;
|
||||||
|
}
|
||||||
|
len = read(_ty.fd, rbuf, len);
|
||||||
|
if (len < 0 && errno != EAGAIN)
|
||||||
|
{
|
||||||
|
ERR("error while reading from tty slave fd");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (len <= 0) break;
|
||||||
|
|
||||||
|
for (i = 0; i < (int)sizeof(_ty.oldbuf); i++)
|
||||||
|
_ty.oldbuf[i] = 0;
|
||||||
|
|
||||||
|
len += rbuf - buf;
|
||||||
|
|
||||||
|
buf[len] = 0;
|
||||||
|
// convert UTF8 to codepoint integers
|
||||||
|
j = 0;
|
||||||
|
for (i = 0; i < len;)
|
||||||
|
{
|
||||||
|
int g = 0, prev_i = i;
|
||||||
|
|
||||||
|
if (buf[i])
|
||||||
|
{
|
||||||
|
g = eina_unicode_utf8_next_get(buf, &i);
|
||||||
|
if ((0xdc80 <= g) && (g <= 0xdcff) &&
|
||||||
|
(len - prev_i) <= (int)sizeof(_ty.oldbuf))
|
||||||
|
{
|
||||||
|
int k;
|
||||||
|
for (k = 0;
|
||||||
|
(k < (int)sizeof(_ty.oldbuf)) &&
|
||||||
|
(k < (len - prev_i));
|
||||||
|
k++)
|
||||||
|
{
|
||||||
|
_ty.oldbuf[k] = buf[prev_i+k];
|
||||||
|
}
|
||||||
|
DBG("failure at %d/%d/%d", prev_i, i, len);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g = 0;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
codepoint[j] = g;
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
codepoint[j] = 0;
|
||||||
|
termpty_handle_buf(&_ty, codepoint, j);
|
||||||
|
}
|
||||||
|
while (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
tytest_common_init(void)
|
||||||
|
{
|
||||||
|
_config = config_new();
|
||||||
|
_sd.config = _config;
|
||||||
|
_termpty_init(&_ty, _config);
|
||||||
|
#if defined(ENABLE_TESTS)
|
||||||
|
_cells = calloc(TY_H * TY_W, sizeof(Evas_Textgrid_Cell));
|
||||||
|
assert(_cells != NULL);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
tytest_common_shutdown(void)
|
||||||
|
{
|
||||||
|
config_del(_config);
|
||||||
|
#if defined(ENABLE_TESTS)
|
||||||
|
free(_cells);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
tytest_common_set_fd(int fd)
|
||||||
|
{
|
||||||
|
_ty.fd = fd;
|
||||||
|
assert(_ty.fd >= 0);
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
#ifndef _TYTEST_COMMON_H__
|
||||||
|
#define _TYTEST_COMMON_H__ 1
|
||||||
|
|
||||||
|
#define TY_H 24
|
||||||
|
#define TY_W 80
|
||||||
|
#define TY_CH_H 15
|
||||||
|
#define TY_CH_W 7
|
||||||
|
#define TY_OFFSET_X 1
|
||||||
|
#define TY_OFFSET_Y 1
|
||||||
|
#define TY_BACKSIZE 50
|
||||||
|
|
||||||
|
void tytest_common_main_loop(void);
|
||||||
|
void tytest_common_init(void);
|
||||||
|
void tytest_common_shutdown(void);
|
||||||
|
void tytest_common_set_fd(int fd);
|
||||||
|
#if defined(ENABLE_TESTS)
|
||||||
|
const char *tytest_cursor_shape_get(void);
|
||||||
|
Termpty *tytest_termpty_get(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue