Rewrite ksh edit mode regression tests.
authoranton <anton@openbsd.org>
Mon, 5 Jun 2017 13:54:39 +0000 (13:54 +0000)
committeranton <anton@openbsd.org>
Mon, 5 Jun 2017 13:54:39 +0000 (13:54 +0000)
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
regress/bin/ksh/vi/Makefile [deleted file]
regress/bin/ksh/vi/config.h [deleted file]
regress/bin/ksh/vi/edit.h [deleted file]
regress/bin/ksh/vi/sh.h [deleted file]
regress/bin/ksh/vi/test_vi.c [deleted file]
regress/bin/ksh/vi/vi.sh [deleted file]

index e2dee90..4335ac5 100644 (file)
@@ -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 <bsd.subdir.mk>
diff --git a/regress/bin/ksh/vi/Makefile b/regress/bin/ksh/vi/Makefile
deleted file mode 100644 (file)
index cdf4503..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-# $OpenBSD: Makefile,v 1.2 2016/09/27 11:08:32 otto Exp $
-#
-# Author: Ingo Schwarze <schwarze@openbsd.org>, 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 <bsd.regress.mk>
diff --git a/regress/bin/ksh/vi/config.h b/regress/bin/ksh/vi/config.h
deleted file mode 100644 (file)
index cf13af7..0000000
+++ /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 (file)
index ebf17d7..0000000
+++ /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 <schwarze@openbsd.org> (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 (file)
index 51f944a..0000000
+++ /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 <schwarze@openbsd.org> (2016),
- * who places the additions in the public domain, too.
- */
-
-#include <stdlib.h>    /* for malloc(3) */
-#include <stdio.h>     /* for snprintf(3) */
-#include <err.h>
-
-/* 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 (file)
index c229861..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (c) 2016 Ingo Schwarze <schwarze@openbsd.org>
- *
- * 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 <err.h>
-#include <stdio.h>
-#include <string.h>
-
-#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 (file)
index 7a4603a..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-#!/bin/sh
-#
-# Copyright (c) 2016 Ingo Schwarze <schwarze@openbsd.org>
-#
-# 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"