Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/tests/lib/libcurses Rototill to add complex character support:



details:   https://anonhg.NetBSD.org/src/rev/c2e5e17dc6fd
branches:  trunk
changeset: 965495:c2e5e17dc6fd
user:      blymn <blymn%NetBSD.org@localhost>
date:      Thu Sep 19 11:31:57 2019 +0000

description:
Rototill to add complex character support:

- Add cchar command to director test language to allow a complex character
  to be defined and passed to the slave.
- Removed the distinction between args and returns internally to prevent
  confusing the two which leads to errors and/or crashes.
- Converted mutt_test to use the new cchar definition and fixed the
  check files for the test.

diffstat:

 tests/lib/libcurses/check_files/mutt_test5.chk |    4 +-
 tests/lib/libcurses/check_files/mutt_test6.chk |    2 +-
 tests/lib/libcurses/director/returns.h         |   44 +-
 tests/lib/libcurses/director/testlang_conf.l   |   40 +-
 tests/lib/libcurses/director/testlang_parse.y  |  680 ++++++++++++++++--------
 tests/lib/libcurses/slave/commands.c           |   18 +-
 tests/lib/libcurses/slave/slave.c              |   10 +-
 tests/lib/libcurses/testframe.txt              |   21 +
 tests/lib/libcurses/tests/mutt_test            |   13 +-
 9 files changed, 534 insertions(+), 298 deletions(-)

diffs (truncated from 1567 to 300 lines):

diff -r bf9daf43e0bc -r c2e5e17dc6fd tests/lib/libcurses/check_files/mutt_test5.chk
--- a/tests/lib/libcurses/check_files/mutt_test5.chk    Thu Sep 19 06:09:52 2019 +0000
+++ b/tests/lib/libcurses/check_files/mutt_test5.chk    Thu Sep 19 11:31:57 2019 +0000
@@ -1,4 +1,4 @@
-cup13;1Xjsetaf7Xsetab0XEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
-boldEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEsgr0opj
setaf7Xsetab0XEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEj
+cup13;1Xsetaf7Xsetab0XEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
+boldEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEsgr0op
setaf7Xsetab0XEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEj
 boldEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEsgr0op
setaf7Xsetab0XEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEj
 boldEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEsgr0op
\ No newline at end of file
diff -r bf9daf43e0bc -r c2e5e17dc6fd tests/lib/libcurses/check_files/mutt_test6.chk
--- a/tests/lib/libcurses/check_files/mutt_test6.chk    Thu Sep 19 06:09:52 2019 +0000
+++ b/tests/lib/libcurses/check_files/mutt_test6.chk    Thu Sep 19 11:31:57 2019 +0000
@@ -1,1 +1,1 @@
-jcup15;11Xsetaf7Xsetab0XsmsoRRRRRRRRRRRcup24;1Xrmsoopsetaf7Xsetab0Xjopjcup15;15Xsetaf7Xsetab0XHHHopsetaf7Xsetab0Xjop
\ No newline at end of file
+cup15;11Xsetaf7Xsetab0XsmsoRRRRRRRRRRRcup24;1Xrmsoopsetaf7Xsetab0Xjopcup15;15Xsetaf7Xsetab0XHHHopsetaf7Xsetab0Xjop
\ No newline at end of file
diff -r bf9daf43e0bc -r c2e5e17dc6fd tests/lib/libcurses/director/returns.h
--- a/tests/lib/libcurses/director/returns.h    Thu Sep 19 06:09:52 2019 +0000
+++ b/tests/lib/libcurses/director/returns.h    Thu Sep 19 11:31:57 2019 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: returns.h,v 1.1 2011/04/10 09:55:09 blymn Exp $        */
+/*     $NetBSD: returns.h,v 1.2 2019/09/19 11:31:57 blymn Exp $        */
 
 /*-
  * Copyright 2009 Brett Lymn <blymn%NetBSD.org@localhost>
@@ -33,28 +33,30 @@
 
 
 typedef enum {
-       ret_number = 1,
-       ret_string,
-       ret_byte,
-       ret_err,
-       ret_ok,
-       ret_null,
-       ret_nonnull,
-       ret_var,
-       ret_ref,
-       ret_count,
-       ret_slave_error
-} returns_enum_t;
+       data_number = 1,
+       data_static,
+       data_string,
+       data_byte,
+       data_cchar,
+       data_err,
+       data_ok,
+       data_null,
+       data_nonnull,
+       data_var,
+       data_ref,
+       data_count,
+       data_slave_error
+} data_enum_t;
 
 typedef struct {
-       returns_enum_t  return_type;
-       void            *return_value;  /* used if return_type is ret_num or
-                                          or ret_byte or ret_string */
-       size_t          return_len;     /* number of bytes in return_value iff
-                                          return_type is ret_byte */
-       int             return_index;   /* index into var array for return
-                                          if return_type is ret_var */
-} returns_t;
+       data_enum_t     data_type;
+       void            *data_value;    /* used if data_type is data_num or
+                                          or data_byte or data_string */
+       size_t          data_len;       /* number of bytes in return_value iff
+                                          return_type is data_byte */
+       int             data_index;     /* index into var array for return
+                                          if data_type is data_var */
+} ct_data_t;
 
 typedef struct {
        size_t  count;
diff -r bf9daf43e0bc -r c2e5e17dc6fd tests/lib/libcurses/director/testlang_conf.l
--- a/tests/lib/libcurses/director/testlang_conf.l      Thu Sep 19 06:09:52 2019 +0000
+++ b/tests/lib/libcurses/director/testlang_conf.l      Thu Sep 19 11:31:57 2019 +0000
@@ -1,5 +1,5 @@
 %{
-/*     $NetBSD: testlang_conf.l,v 1.7 2013/11/21 11:06:04 blymn Exp $  */
+/*     $NetBSD: testlang_conf.l,v 1.8 2019/09/19 11:31:57 blymn Exp $  */
 
 /*-
  * Copyright 2009 Brett Lymn <blymn%NetBSD.org@localhost>
@@ -155,10 +155,14 @@
 VARNAME                [A-Za-z][A-Za-z0-9_-]+
 NULL_RET       NULL
 NON_NULL       NON_NULL
+CCHAR          [cC][cC][hH][aA][rR]
 BYTE           BYTE
 OR             \|
 LHB            \(
 RHB            \)
+LHSB           \[
+RHSB           \]
+MULTIPLIER     \*
 
 %x incl
 %option noinput nounput
@@ -286,6 +290,14 @@
                        return ERR_RET;
                }
 
+{MULTIPLIER}   {
+                       return MULTIPLIER;
+               }
+
+{CCHAR}        {
+                       return CCHAR;
+               }
+
 {OR}           {
                        return OR;
                }
@@ -298,6 +310,14 @@
                        return RHB;
                }
 
+{LHSB}         {
+                       return LHSB;
+               }
+
+{RHSB}         {
+                       return RHSB;
+               }
+
 {HEX}          {
                        /* Hex value, convert to decimal and return numeric */
                        unsigned long val;
@@ -342,17 +362,17 @@
                        char *p;
                        size_t len;
 
-                       if ((yylval.retval = malloc(sizeof(returns_t))) == NULL)
+                       if ((yylval.retval = malloc(sizeof(ct_data_t))) == NULL)
                                err(1, "Cannot allocate return struct");
                        p = yytext;
                        p++; /* skip the leading ' */
-                       if ((yylval.retval->return_value = dequote(p, &len))
+                       if ((yylval.retval->data_value = dequote(p, &len))
                             == NULL)
                                err(1, "Cannot allocate string");
 
-                       yylval.retval->return_type = ret_byte;
+                       yylval.retval->data_type = data_byte;
                        /* trim trailing ' */
-                       yylval.retval->return_len = len - 1;
+                       yylval.retval->data_len = len - 1;
                        return BYTE;
                }
 
@@ -362,7 +382,7 @@
                        size_t i;
                        chtype *rv;
 
-                       if ((yylval.retval = malloc(sizeof(returns_t))) == NULL)
+                       if ((yylval.retval = malloc(sizeof(ct_data_t))) == NULL)
                                err(1, "Cannot allocate return struct");
                        p = yytext;
                        p++; /* skip the leading ' */
@@ -373,16 +393,16 @@
                                len--;
 
                        chlen = ((len / 2) + 1) * sizeof(chtype);
-                       if ((yylval.retval->return_value = malloc(chlen))
+                       if ((yylval.retval->data_value = malloc(chlen))
                            == NULL)
                                err(1, "Cannot allocate chtype array");
 
-                       rv = yylval.retval->return_value;
+                       rv = yylval.retval->data_value;
                        for (i = 0; i < len; i += 2)
                                *rv++ = (str[i] << 8) | str[i+1];
                        *rv = __NORMAL | '\0'; /* terminates chtype array */    
-                       yylval.retval->return_type = ret_byte;
-                       yylval.retval->return_len = chlen;
+                       yylval.retval->data_type = data_byte;
+                       yylval.retval->data_len = chlen;
                        return BYTE;
                }
 
diff -r bf9daf43e0bc -r c2e5e17dc6fd tests/lib/libcurses/director/testlang_parse.y
--- a/tests/lib/libcurses/director/testlang_parse.y     Thu Sep 19 06:09:52 2019 +0000
+++ b/tests/lib/libcurses/director/testlang_parse.y     Thu Sep 19 11:31:57 2019 +0000
@@ -1,5 +1,5 @@
 %{
-/*     $NetBSD: testlang_parse.y,v 1.15 2019/06/11 10:22:35 blymn Exp $        */
+/*     $NetBSD: testlang_parse.y,v 1.16 2019/09/19 11:31:57 blymn Exp $        */
 
 /*-
  * Copyright 2009 Brett Lymn <blymn%NetBSD.org@localhost>
@@ -79,27 +79,19 @@
 static char *input_str;        /* string to feed in as input */
 static bool no_input;  /* don't need more input */
 
+static wchar_t *vals = NULL;   /* wchars to attach to a cchar type */
+static unsigned nvals;         /* number of wchars */
+
 #define READ_PIPE  0
 #define WRITE_PIPE 1
 
-const char *returns_enum_names[] = {
-       "unused", "numeric", "string", "byte", "ERR", "OK", "NULL", "not NULL",
-       "variable", "reference", "returns count", "slave error"
-};
-
-typedef enum {
-       arg_static,
-       arg_byte,
-       arg_var,
-       arg_null
-} args_state_t;
-
-static const char *args_enum_names[] = {
-       "static", "byte", "var", "NULL"
+const char *enum_names[] = {
+       "unused", "static", "numeric", "string", "byte", "cchar", "ERR", "OK", "NULL",
+       "not NULL", "variable", "reference", "returns count", "slave error"
 };
 
 typedef struct {
-       args_state_t    arg_type;
+       data_enum_t     arg_type;
        size_t          arg_len;
        char            *arg_string;
        int             var_index;
@@ -108,7 +100,7 @@
 typedef struct {
        char            *function;
        int             nrets;          /* number of returns */
-       returns_t       *returns;       /* array of expected returns */
+       ct_data_t       *returns;       /* array of expected returns */
        int             nargs;          /* number of arguments */
        args_t          *args;          /* arguments for the call */
 } cmd_line_t;
@@ -118,8 +110,9 @@
 typedef struct {
        char *name;
        size_t len;
-       returns_enum_t type;
+       data_enum_t type;
        void *value;
+       cchar_t cchar;
 } var_t;
 
 static size_t nvars;           /* Number of declared variables */
@@ -127,26 +120,28 @@
 
 static int     check_function_table(char *, const char *[], int);
 static int     find_var_index(const char *);
-static void    assign_arg(args_state_t, void *);
+static void    assign_arg(data_enum_t, void *);
 static int     assign_var(char *);
 void           init_parse_variables(int);
 static void    validate(int, void *);
 static void    validate_return(const char *, const char *, int);
-static void    validate_variable(int, returns_enum_t, const void *, int, int);
-static void    validate_byte(returns_t *, returns_t *, int);
+static void    validate_variable(int, data_enum_t, const void *, int, int);
+static void    validate_byte(ct_data_t *, ct_data_t *, int);
 static void    write_cmd_pipe(char *);
-static void    write_cmd_pipe_args(args_state_t, void *);
-static void    read_cmd_pipe(returns_t *);
+static void    write_cmd_pipe_args(data_enum_t, void *);
+static void    read_cmd_pipe(ct_data_t *);
 static void    write_func_and_args(void);
 static void    compare_streams(char *, bool);
 static void    do_function_call(size_t);
 static void    save_slave_output(bool);
-static void    validate_type(returns_enum_t, returns_t *, int);
-static void    set_var(returns_enum_t, char *, void *);
+static void    validate_type(data_enum_t, ct_data_t *, int);
+static void    set_var(data_enum_t, char *, void *);
 static void    validate_reference(int, void *);
 static char    *numeric_or(char *, char *);
 static char    *get_numeric_var(const char *);
 static void    perform_delay(struct timespec *);
+static void    set_cchar(char *, void *);
+static wchar_t *add_to_vals(data_enum_t, void *);
 
 static const char *input_functions[] = {
        "getch", "getnstr", "getstr", "mvgetnstr", "mvgetstr", "mvgetnstr",
@@ -163,7 +158,8 @@
 
 %union {
        char *string;
-       returns_t *retval;
+       ct_data_t *retval;
+       wchar_t *vals;
 }
 
 %token <string> PATH



Home | Main Index | Thread Index | Old Index