From d4a880ce03554448ac86507d9e918952512c59a4 Mon Sep 17 00:00:00 2001 From: anton Date: Mon, 5 Jun 2017 13:54:39 +0000 Subject: [PATCH] Rewrite ksh edit mode regression tests. Instead of calling x_vi() directly, run ksh in a pseudo tty. This makes the process of adding tests for emacs mode simpler since the code can be shared. With feedback and help from millert@ and schwarze@ --- regress/bin/ksh/Makefile | 4 +- regress/bin/ksh/vi/Makefile | 17 ---- regress/bin/ksh/vi/config.h | 3 - regress/bin/ksh/vi/edit.h | 39 ------- regress/bin/ksh/vi/sh.h | 58 ----------- regress/bin/ksh/vi/test_vi.c | 85 ---------------- regress/bin/ksh/vi/vi.sh | 190 ----------------------------------- 7 files changed, 2 insertions(+), 394 deletions(-) delete mode 100644 regress/bin/ksh/vi/Makefile delete mode 100644 regress/bin/ksh/vi/config.h delete mode 100644 regress/bin/ksh/vi/edit.h delete mode 100644 regress/bin/ksh/vi/sh.h delete mode 100644 regress/bin/ksh/vi/test_vi.c delete mode 100644 regress/bin/ksh/vi/vi.sh diff --git a/regress/bin/ksh/Makefile b/regress/bin/ksh/Makefile index e2dee90c682..4335ac5853b 100644 --- a/regress/bin/ksh/Makefile +++ b/regress/bin/ksh/Makefile @@ -1,5 +1,5 @@ -# $OpenBSD: Makefile,v 1.10 2016/09/29 11:04:45 schwarze Exp $ +# $OpenBSD: Makefile,v 1.11 2017/06/05 13:54:39 anton Exp $ -SUBDIR += main vi +SUBDIR += main edit .include diff --git a/regress/bin/ksh/vi/Makefile b/regress/bin/ksh/vi/Makefile deleted file mode 100644 index cdf45032e33..00000000000 --- a/regress/bin/ksh/vi/Makefile +++ /dev/null @@ -1,17 +0,0 @@ -# $OpenBSD: Makefile,v 1.2 2016/09/27 11:08:32 otto Exp $ -# -# Author: Ingo Schwarze , 2016. Public Domain. - -REGRESS_TARGETS = check -PROG = test_vi -SRCS = vi.c test_vi.c -CPPFLAGS = -iquote ${.CURDIR} -CLEANFILES = vi.c - -check test: test_vi - sh ${.CURDIR}/vi.sh - -vi.c: ${.CURDIR}/../../../../bin/ksh/vi.c - cp ${.CURDIR}/../../../../bin/ksh/vi.c . - -.include diff --git a/regress/bin/ksh/vi/config.h b/regress/bin/ksh/vi/config.h deleted file mode 100644 index cf13af79db5..00000000000 --- a/regress/bin/ksh/vi/config.h +++ /dev/null @@ -1,3 +0,0 @@ -#define VI 1 -#define EDIT 1 -#define HISTORY 1 diff --git a/regress/bin/ksh/vi/edit.h b/regress/bin/ksh/vi/edit.h deleted file mode 100644 index ebf17d79e63..00000000000 --- a/regress/bin/ksh/vi/edit.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * This file is in the public domain. - * It contains parts from ksh/config.h, which is in the public domain, - * and additions by Ingo Schwarze (2016), - * who places the additions in the public domain, too. - */ - -#define BEL 0x07 - -/* tty driver characters we are interested in */ -typedef struct { - int erase; - int kill; - int werase; - int intr; - int quit; - int eof; -} X_chars; - -/* edit.c */ -extern X_chars edchars; - -#define x_getc() getchar() -#define x_flush() -#define x_putc(c) putchar(c) -#define x_puts(s) fputs(s, stdout) -#define x_mode(a) -#define x_do_comment(a, b, c) -1 -#define x_print_expansions(a, b, c) -#define x_cf_glob(a, b, c, d, e, f, g, h) 0 -#define x_longest_prefix(a, b) 0 -#define x_basename(a, b) 0 -#define x_free_words(a, b) -#define x_escape(a, b, c) -1 - -int x_vi(char *, size_t); - -/* lex.c */ -int promptlen(const char *, const char **); diff --git a/regress/bin/ksh/vi/sh.h b/regress/bin/ksh/vi/sh.h deleted file mode 100644 index 51f944aa608..00000000000 --- a/regress/bin/ksh/vi/sh.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * This file is in the public domain. - * It contains parts from ksh/*.h, which are in the public domain, - * and additions by Ingo Schwarze (2016), - * who places the additions in the public domain, too. - */ - -#include /* for malloc(3) */ -#include /* for snprintf(3) */ -#include - -/* sh.h */ -#define Flag(f) 0 -#define letnum(c) (isalnum((unsigned char)(c))) -#define MIN_EDIT_SPACE 7 -#define x_cols 80 - -/* sh.h version.c */ -extern const char ksh_version[]; - -/* shf.h shf.c */ -#define shf_snprintf snprintf - -/* table.h table.c */ -struct tbl { /* table item */ - int flag; /* flags */ - union { - char *s; /* string */ - } val; /* value */ -}; -#define ISSET 0 -extern const char *prompt; -#define ktsearch(a, b, c) NULL - -/* lex.h lex.c */ -struct source { int line; }; -extern struct source *source; -void pprompt(const char *, int); - -/* sh.h alloc.c */ -#define alloc(s, a) malloc(s) -#define aresize(p, s, a) realloc(p, s) -#define afree(p, a) free(p) - -/* sh.h history.c */ -#define histsave(a, b, c) -char **histpos(void); -#define histnum(a) 0 -#define findhist(a, b, c, d) -1 - -/* sh.h io.c */ -#define internal_errorf(i, s) warnx(s) - -/* sh.h main.c */ -#define unwind(a) errx(1, "unwind") - -/* sh.h trap.c */ -#define trapsig(a) errx(1, "trapsig") diff --git a/regress/bin/ksh/vi/test_vi.c b/regress/bin/ksh/vi/test_vi.c deleted file mode 100644 index c229861086d..00000000000 --- a/regress/bin/ksh/vi/test_vi.c +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (c) 2016 Ingo Schwarze - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -/* - * Glue for unit tests of ksh(1) vi line editing mode. - * Takes input keystrokes from stdin. - * Only checks the final content of the line buffer - * and the bytes sent down to edit.c and shf.c, - * but not the operation of those low-level output routines. - */ - -#include -#include -#include - -#include "edit.h" -#include "sh.h" - -/* sh.h version.c */ -const char ksh_version[] = "@(#)PD KSH v5.2.14 99/07/13.2"; - -/* table.h table.c */ -const char *prompt = " $ "; - -/* lex.h lex.c */ -static struct source __source; -struct source *source = &__source; - -/* sh.h history.c */ -static char *history = NULL; - -/* edit.h edit.c */ -X_chars edchars = { 0x7f, 0x15, 0x17, 0x03, 0x1c, 0x04 }; - -int -main(void) -{ - char buf[2048]; /* vi.c CMDLEN */ - int len; - - if ((len = x_vi(buf, sizeof(buf))) == -1) - errx(1, "x_vi failed"); - - buf[len] = '\0'; - fputs(buf, stdout); - - return 0; -} - -/* edit.h lex.c, used in edit_reset() */ -int -promptlen(const char *cp, const char **spp) -{ - *spp = cp; - return strlen(cp); -} - -/* lex.h lex.c, used in vi_pprompt() */ -void -pprompt(const char *cp, int ntruncate) -{ - while (ntruncate-- > 0 && *cp != '\0') - cp++; - fputs(cp, stdout); -} - -/* sh.h history.c, used in vi_cmd() grabhist() grabsearch() */ -char ** -histpos(void) -{ - return &history; -} diff --git a/regress/bin/ksh/vi/vi.sh b/regress/bin/ksh/vi/vi.sh deleted file mode 100644 index 7a4603ac00e..00000000000 --- a/regress/bin/ksh/vi/vi.sh +++ /dev/null @@ -1,190 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2016 Ingo Schwarze -# -# Permission to use, copy, modify, and distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -testseq() -{ - stdin=$1 - expected=`echo "$2"` - result=`echo "$stdin" | ./test_vi` - if [ "$result" != "${expected}" ]; then - echo input: - echo ">>>$stdin<<<" - echo -n "$stdin" | hexdump -C - echo expected: - echo ">>>$expected<<<" - echo -n "$expected" | hexdump -C - echo result: - echo ">>>$result<<<" - echo -n "$result" | hexdump -C - exit 1; - fi -} - -# ^H, ^?: Erase. -testseq "ab\bc" " $ ab\b \bc\r\nac" -testseq "ab\0177c" " $ ab\b \bc\r\nac" - -# ^J, ^M: End of line. -testseq "a\nab" " $ a\r\na" -testseq "a\rab" " $ a\r\na" -testseq "a\0033\nab" " $ a\b\r\na" -testseq "a\0033\rab" " $ a\b\r\na" - -# ^U: Kill. -testseq "ab\0033ic\0025d" " $ ab\bcb\b\b\bb \b\b\bdb\b\r\ndb" - -# ^V: Literal next. -testseq "a\0026\0033b" " $ a^\b^[b\r\na\0033b" - -# ^W: Word erase. -testseq "one two\0027rep" " $ one two\b\b\b \b\b\brep\r\none rep" - -# A: Append at end of line. -# 0: Move to column 0. -testseq "one\00330A two" " $ one\b\b\bone two\r\none two" -testseq "one\003302A two\0033" " $ one\b\b\bone two two\b\r\none two two" - -# a: Append. -# .: Redo. -testseq "ab\00330axy" " $ ab\b\baxb\byb\b\r\naxyb" -testseq "ab\003302axy\0033" " $ ab\b\baxb\byb\bxyb\b\b\r\naxyxyb" -testseq "ab\00330axy\0033." " $ ab\b\baxb\byb\b\byxyb\b\b\r\naxyxyb" - -# B: Move back big word. -testseq "one 2.0\0033BD" " $ one 2.0\b\b\b \b\b\b\b\r\none " - -# b: Move back word. -# C: Change to end of line. -# D: Delete to end of line. -testseq "one ab.cd\0033bDa.\00332bD" \ - " $ one ab.cd\b\b \b\b\b..\b\b\b\b \b\b\b\b\b\r\none " -testseq "one two\0033bCrep" " $ one two\b\b\b \b\b\brep\r\none rep" - -# c: Change region. -testseq "one two\0033cbrep" " $ one two\b\b\bo \b\b\bro\beo\bpo\b\r\none repo" -testseq "one two\00332chx" " $ one two\b\b\bo \b\b\bxo\b\r\none xo" - -# d: Delete region. -testseq "one two\0033db" " $ one two\b\b\bo \b\b\b\r\none o" -testseq "one two xy\00332db" \ - " $ one two xy\b\b\b\b\b\by \b\b\b\b\b\b\r\none y" - -# E: Move to end of big word. -testseq "1.00 two\00330ED" " $ 1.00 two\b\r $ 1.0 \b\b\b\b\b\b\r\n1.0" - -# e: Move to end of word. -testseq "onex two\00330eD" " $ onex two\b\r $ one \b\b\b\b\b\b\r\none" - -# F: Find character backward. -# ;: Repeat last search. -# ,: Repeat last search in opposite direction. -testseq "hello\00332FlD" " $ hello\b\b\b \b\b\b\b\r\nhe" -testseq "hello\0033Flix\0033;ix" \ - " $ hello\b\bxlo\b\b\b\bxlxlo\b\b\b\b\r\nhexlxlo" -testseq "hello\00332Flix\00332,ix" \ - " $ hello\b\b\bxllo\b\b\b\bxlxlo\b\b\r\nhexlxlo" - -# f: Find character forward. -testseq "hello\003302flD" " $ hello\b\b\b\b\bhel \b\b\b\r\nhel" - -# h, ^H: Move left. -# i: Insert. -testseq "hello\00332hix" " $ hello\b\b\bxllo\b\b\b\r\nhexllo" -testseq "hello\00332\b2ix\0033" \ - " $ hello\b\b\bxllo\b\b\bxllo\b\b\b\b\r\nhexxllo" - -# I: Insert before first non-blank. -# ^: Move to the first non-whitespace character. -testseq " ab\0033Ixy" " $ ab\b\bxab\b\byab\b\b\r\n xyab" -testseq " ab\00332Ixy\0033" " $ ab\b\bxab\b\byab\b\bxyab\b\b\b\r\n xyxyab" -testseq " ab\0033^ixy" " $ ab\b\bxab\b\byab\b\b\r\n xyab" - -# L: Undefined command (beep). -testseq "ab\0033Lx" " $ ab\b\a \b\b\r\na" - -# l, space: Move right. -# ~: Change case. -testseq "abc\003302l~" " $ abc\b\b\babC\b\r\nabC" -testseq "abc\00330 rx" " $ abc\b\b\bax\b\r\naxc" - -# P: Paste at current position. -testseq "abcde\0033hDhP" " $ abcde\b\b \b\b\b\bdebc\b\b\r\nadebc" -testseq "abcde\0033hDh2P" " $ abcde\b\b \b\b\b\bdedebc\b\b\b\r\nadedebc" - -# p: Paste after current position. -testseq "abcd\0033hDhp" " $ abcd\b\b \b\b\b\bacdb\b\b\r\nacdb" -testseq "abcd\0033hDh2p" " $ abcd\b\b \b\b\b\bacdcdb\b\b\r\nacdcdb" - -# R: Replace. -testseq "abcd\00332h2Rx\0033" " $ abcd\b\b\bxx\b\r\naxxd" -testseq "abcdef\00334h2Rxy\0033" " $ abcdef\b\b\b\b\bxyxy\b\r\naxyxyf" - -# r: Replace character. -testseq "abcd\00332h2rxiy" " $ abcd\b\b\bxx\byxd\b\b\r\naxyxd" -testseq "\0303\0266\0033ro" " $ \0303\0266\bo \b\b\r\no" -testseq "\0342\0202\0254\0033ro" " $ \0342\0202\0254\bo \b\b\b\r\no" -testseq "\0303\0266\00332ro" " $ \0303\0266\b\a\r\n\0303\0266" - -# S: Substitute whole line. -testseq "oldst\0033Snew" " $ oldst\b\b\b\b\b \r $ new\r\nnew" -testseq "oldstr\033Snew" " $ oldstr\b\r $ \r $ new\r\nnew" - -# s: Substitute. -testseq "abcd\00332h2sx" " $ abcd\b\b\bd \b\b\bxd\b\r\naxd" - -# T: Move backward after character. -testseq "helloo\0033TlD" " $ helloo\b\b \b\b\b\r\nhell" -testseq "hello\00332TlD" " $ hello\b\b \b\b\b\r\nhel" - -# t: Move forward before character. -testseq "abc\00330tcD" " $ abc\b\b\ba \b\b\b\r\na" -testseq "hello\003302tlD" " $ hello\b\b\b\b\bhe \b\b\b\b\r\nhe" - -# U: Undo all changes. -testseq "test\0033U" " $ test\b\b\b\b \b\b\b\b\r\n" - -# u: Undo. -testseq "test\0033hxu" " $ test\b\bt \b\bst\b\b\r\ntest" - -# W: Move forward big word. -testseq "1.0 two\00330WD" " $ 1.0 two\b\r $ 1.0 \b\b\b\b\r\n1.0 " - -# w: Move forward word. -testseq "ab cd ef\003302wD" " $ ab cd ef\b\r $ ab cd \b\b\b\r\nab cd " - -# X: Delete previous character. -testseq "abcd\00332X" " $ abcd\b\b\bd \b\b\b\r\nad" - -# x: Delete character. -# |: Move to column. -testseq "abcd\00332|2x" " $ abcd\b\b\bd \b\b\b\r\nad" -testseq "\0303\0266a\0033xx" " $ \0303\0266a\b \b\b \b\b\r" - -# Y: Yank to end of line. -testseq "abcd\0033hYp" " $ abcd\b\bccdd\b\b\r\nabccdd" - -# y: Yank region. -# $: Move to the last character. -testseq "abcd\00332h2ylp" " $ abcd\b\b\bbbccd\b\b\b\r\nabbccd" -testseq "abcd\00332h2yl\$p" " $ abcd\b\b\bbcdbc\b\r\nabcdbc" - -# %: Find match. -testseq "(x)\0033%lrc" " $ (x)\b\b\b(c\b\r\n(c)" -testseq "(x)\00330%hrc" " $ (x)\b\b\b(x\bc\b\r\n(c)" - -# ^L, ^R: Redraw. -testseq "test\0033\0014" " $ test\b\r\n $ test\b\r\ntest" -testseq "test\0033h\0022" " $ test\b\b\r\n $ test\b\b\r\ntest" -- 2.20.1