summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Leferry 2 <alexherbo2@gmail.com>2014-06-30 12:22:50 +0200
committerAlex Leferry 2 <alexherbo2@gmail.com>2014-06-30 12:22:50 +0200
commitd20d43bf3622fc4bb416cf2ca95d5cf0c4c88fcf (patch)
tree42173f19891a452bdf10b8b7769a457068ecbb7a
parent7aa78d726a54fa57a8dc5ed973ab0b30eeba6bf3 (diff)
add testing framework
-rw-r--r--test/README.asciidoc28
-rw-r--r--test/compose/inline-sort/cmd1
-rw-r--r--test/compose/inline-sort/in1
-rw-r--r--test/compose/inline-sort/out1
-rwxr-xr-xtest/run111
-rw-r--r--test/unit/APPEND/cmd1
-rw-r--r--test/unit/APPEND/in1
-rw-r--r--test/unit/APPEND/out1
-rw-r--r--test/unit/DOWN/cmd1
-rw-r--r--test/unit/DOWN/in2
-rw-r--r--test/unit/DOWN/selections2
-rw-r--r--test/unit/END/WORD/cmd1
-rw-r--r--test/unit/END/WORD/in1
-rw-r--r--test/unit/END/WORD/selections1
-rw-r--r--test/unit/END/angle/cmd1
-rw-r--r--test/unit/END/angle/in1
-rw-r--r--test/unit/END/angle/selections1
-rw-r--r--test/unit/END/braces/cmd1
-rw-r--r--test/unit/END/braces/in3
-rw-r--r--test/unit/END/braces/selections2
-rw-r--r--test/unit/END/brackets/cmd1
-rw-r--r--test/unit/END/brackets/in3
-rw-r--r--test/unit/END/brackets/selections2
-rw-r--r--test/unit/END/double_quote/cmd1
-rw-r--r--test/unit/END/double_quote/in1
-rw-r--r--test/unit/END/double_quote/selections1
-rw-r--r--test/unit/END/grave_quote/cmd1
-rw-r--r--test/unit/END/grave_quote/in1
-rw-r--r--test/unit/END/grave_quote/selections1
-rw-r--r--test/unit/END/indent/cmd1
-rw-r--r--test/unit/END/indent/in3
-rw-r--r--test/unit/END/indent/selections3
-rw-r--r--test/unit/END/paragraph/cmd1
-rw-r--r--test/unit/END/paragraph/in8
-rw-r--r--test/unit/END/paragraph/selections4
-rw-r--r--test/unit/END/parenthesis/cmd1
-rw-r--r--test/unit/END/parenthesis/in1
-rw-r--r--test/unit/END/parenthesis/selections1
-rw-r--r--test/unit/END/sentence/cmd1
-rw-r--r--test/unit/END/sentence/in6
-rw-r--r--test/unit/END/sentence/selections2
-rw-r--r--test/unit/END/single_quote/cmd1
-rw-r--r--test/unit/END/single_quote/in1
-rw-r--r--test/unit/END/single_quote/selections1
-rw-r--r--test/unit/END/word/cmd1
-rw-r--r--test/unit/END/word/in1
-rw-r--r--test/unit/END/word/selections1
-rw-r--r--test/unit/FIND-char-backward/cmd1
-rw-r--r--test/unit/FIND-char-backward/in1
-rw-r--r--test/unit/FIND-char-backward/selections1
-rw-r--r--test/unit/FIND-char-forward/cmd1
-rw-r--r--test/unit/FIND-char-forward/in1
-rw-r--r--test/unit/FIND-char-forward/selections1
-rw-r--r--test/unit/GOTO/buffer-bottom/cmd1
-rw-r--r--test/unit/GOTO/buffer-bottom/in3
-rw-r--r--test/unit/GOTO/buffer-bottom/selections2
-rw-r--r--test/unit/GOTO/buffer-end/cmd1
-rw-r--r--test/unit/GOTO/buffer-end/in3
-rw-r--r--test/unit/GOTO/buffer-end/selections3
-rw-r--r--test/unit/GOTO/buffer-top/cmd1
-rw-r--r--test/unit/GOTO/buffer-top/in3
-rw-r--r--test/unit/GOTO/buffer-top/selections2
-rw-r--r--test/unit/GOTO/last-change/cmd1
-rw-r--r--test/unit/GOTO/last-change/in3
-rw-r--r--test/unit/GOTO/last-change/selections3
-rw-r--r--test/unit/GOTO/line-begin/cmd1
-rw-r--r--test/unit/GOTO/line-begin/in1
-rw-r--r--test/unit/GOTO/line-begin/selections1
-rw-r--r--test/unit/GOTO/line-end/cmd1
-rw-r--r--test/unit/GOTO/line-end/in1
-rw-r--r--test/unit/GOTO/line-end/selections1
-rw-r--r--test/unit/GOTO/window-bottom/README0
-rw-r--r--test/unit/GOTO/window-center/README0
-rw-r--r--test/unit/GOTO/window-top/README0
-rw-r--r--test/unit/INSERT/cmd1
-rw-r--r--test/unit/INSERT/in1
-rw-r--r--test/unit/INSERT/out1
-rw-r--r--test/unit/LEFT/cmd1
-rw-r--r--test/unit/LEFT/in1
-rw-r--r--test/unit/LEFT/selections1
-rw-r--r--test/unit/NEXT-WORD/cmd1
-rw-r--r--test/unit/NEXT-WORD/in1
-rw-r--r--test/unit/NEXT-WORD/selections1
-rw-r--r--test/unit/NEXT-match/cmd1
-rw-r--r--test/unit/NEXT-match/in1
-rw-r--r--test/unit/NEXT-match/rc1
-rw-r--r--test/unit/NEXT-match/selections1
-rw-r--r--test/unit/NEXT-word/cmd1
-rw-r--r--test/unit/NEXT-word/in1
-rw-r--r--test/unit/NEXT-word/selections1
-rw-r--r--test/unit/PREVIOUS-WORD/cmd1
-rw-r--r--test/unit/PREVIOUS-WORD/in1
-rw-r--r--test/unit/PREVIOUS-WORD/selections1
-rw-r--r--test/unit/PREVIOUS-word/cmd1
-rw-r--r--test/unit/PREVIOUS-word/in1
-rw-r--r--test/unit/PREVIOUS-word/selections1
-rw-r--r--test/unit/RIGHT/cmd1
-rw-r--r--test/unit/RIGHT/in1
-rw-r--r--test/unit/RIGHT/selections1
-rw-r--r--test/unit/SEARCH-reverse/cmd1
-rw-r--r--test/unit/SEARCH-reverse/in1
-rw-r--r--test/unit/SEARCH-reverse/selections1
-rw-r--r--test/unit/SEARCH/cmd1
-rw-r--r--test/unit/SEARCH/in1
-rw-r--r--test/unit/SEARCH/selections1
-rw-r--r--test/unit/SELECT-line/cmd1
-rw-r--r--test/unit/SELECT-line/in1
-rw-r--r--test/unit/SELECT-line/selections2
-rw-r--r--test/unit/START/WORD/cmd1
-rw-r--r--test/unit/START/WORD/in1
-rw-r--r--test/unit/START/WORD/selections1
-rw-r--r--test/unit/START/angle/cmd1
-rw-r--r--test/unit/START/angle/in1
-rw-r--r--test/unit/START/angle/selections1
-rw-r--r--test/unit/START/braces/cmd1
-rw-r--r--test/unit/START/braces/in3
-rw-r--r--test/unit/START/braces/selections2
-rw-r--r--test/unit/START/brackets/cmd1
-rw-r--r--test/unit/START/brackets/in3
-rw-r--r--test/unit/START/brackets/selections2
-rw-r--r--test/unit/START/double_quote/cmd1
-rw-r--r--test/unit/START/double_quote/in1
-rw-r--r--test/unit/START/double_quote/selections1
-rw-r--r--test/unit/START/grave_quote/cmd1
-rw-r--r--test/unit/START/grave_quote/in1
-rw-r--r--test/unit/START/grave_quote/selections1
-rw-r--r--test/unit/START/indent/cmd1
-rw-r--r--test/unit/START/indent/in3
-rw-r--r--test/unit/START/indent/selections3
-rw-r--r--test/unit/START/paragraph/cmd1
-rw-r--r--test/unit/START/paragraph/in8
-rw-r--r--test/unit/START/paragraph/selections4
-rw-r--r--test/unit/START/parenthesis/cmd1
-rw-r--r--test/unit/START/parenthesis/in1
-rw-r--r--test/unit/START/parenthesis/selections1
-rw-r--r--test/unit/START/sentence/cmd1
-rw-r--r--test/unit/START/sentence/in6
-rw-r--r--test/unit/START/sentence/selections2
-rw-r--r--test/unit/START/single_quote/cmd1
-rw-r--r--test/unit/START/single_quote/in1
-rw-r--r--test/unit/START/single_quote/selections1
-rw-r--r--test/unit/START/word/cmd1
-rw-r--r--test/unit/START/word/in1
-rw-r--r--test/unit/START/word/selections1
-rw-r--r--test/unit/TO-char-backward/cmd1
-rw-r--r--test/unit/TO-char-backward/in1
-rw-r--r--test/unit/TO-char-backward/selections1
-rw-r--r--test/unit/TO-char-forward/cmd1
-rw-r--r--test/unit/TO-char-forward/in1
-rw-r--r--test/unit/TO-char-forward/selections1
-rw-r--r--test/unit/UP/cmd1
-rw-r--r--test/unit/UP/in2
-rw-r--r--test/unit/UP/selections2
-rw-r--r--test/unit/align/cmd1
-rw-r--r--test/unit/align/in3
-rw-r--r--test/unit/align/out3
-rw-r--r--test/unit/all/cmd1
-rw-r--r--test/unit/all/in4
-rw-r--r--test/unit/all/selections5
-rw-r--r--test/unit/append/cmd1
-rw-r--r--test/unit/append/in1
-rw-r--r--test/unit/append/selections2
-rw-r--r--test/unit/around/WORD/cmd1
-rw-r--r--test/unit/around/WORD/in1
-rw-r--r--test/unit/around/WORD/selections1
-rw-r--r--test/unit/around/angle/cmd1
-rw-r--r--test/unit/around/angle/in1
-rw-r--r--test/unit/around/angle/selections1
-rw-r--r--test/unit/around/braces/cmd1
-rw-r--r--test/unit/around/braces/in3
-rw-r--r--test/unit/around/braces/selections3
-rw-r--r--test/unit/around/brackets/cmd1
-rw-r--r--test/unit/around/brackets/in3
-rw-r--r--test/unit/around/brackets/selections3
-rw-r--r--test/unit/around/double_quote/cmd1
-rw-r--r--test/unit/around/double_quote/in1
-rw-r--r--test/unit/around/double_quote/selections1
-rw-r--r--test/unit/around/grave_quote/cmd1
-rw-r--r--test/unit/around/grave_quote/in1
-rw-r--r--test/unit/around/grave_quote/selections1
-rw-r--r--test/unit/around/indent/cmd1
-rw-r--r--test/unit/around/indent/in3
-rw-r--r--test/unit/around/indent/selections4
-rw-r--r--test/unit/around/paragraph/cmd1
-rw-r--r--test/unit/around/paragraph/in8
-rw-r--r--test/unit/around/paragraph/selections4
-rw-r--r--test/unit/around/parenthesis/cmd1
-rw-r--r--test/unit/around/parenthesis/in1
-rw-r--r--test/unit/around/parenthesis/selections1
-rw-r--r--test/unit/around/sentence/cmd1
-rw-r--r--test/unit/around/sentence/in6
-rw-r--r--test/unit/around/sentence/selections2
-rw-r--r--test/unit/around/single_quote/cmd1
-rw-r--r--test/unit/around/single_quote/in1
-rw-r--r--test/unit/around/single_quote/selections1
-rw-r--r--test/unit/around/word/cmd1
-rw-r--r--test/unit/around/word/in1
-rw-r--r--test/unit/around/word/selections1
-rw-r--r--test/unit/change/cmd1
-rw-r--r--test/unit/change/in1
-rw-r--r--test/unit/change/out1
-rw-r--r--test/unit/clear-selections/cmd1
-rw-r--r--test/unit/clear-selections/in1
-rw-r--r--test/unit/clear-selections/selections1
-rw-r--r--test/unit/concat-delete/cmd1
-rw-r--r--test/unit/concat-delete/in1
-rw-r--r--test/unit/concat-delete/out1
-rw-r--r--test/unit/concat-yank/cmd1
-rw-r--r--test/unit/concat-yank/in1
-rw-r--r--test/unit/concat-yank/out1
-rw-r--r--test/unit/convert-tab/cmd1
-rw-r--r--test/unit/convert-tab/in4
-rw-r--r--test/unit/convert-tab/out4
-rw-r--r--test/unit/deindent/cmd1
-rw-r--r--test/unit/deindent/in1
-rw-r--r--test/unit/deindent/out1
-rw-r--r--test/unit/delete/cmd1
-rw-r--r--test/unit/delete/in1
-rw-r--r--test/unit/delete/out1
-rw-r--r--test/unit/down/cmd1
-rw-r--r--test/unit/down/in2
-rw-r--r--test/unit/down/selections1
-rw-r--r--test/unit/end/WORD/cmd1
-rw-r--r--test/unit/end/WORD/in1
-rw-r--r--test/unit/end/WORD/selections1
-rw-r--r--test/unit/end/angle/cmd1
-rw-r--r--test/unit/end/angle/in1
-rw-r--r--test/unit/end/angle/selections1
-rw-r--r--test/unit/end/braces/cmd1
-rw-r--r--test/unit/end/braces/in1
-rw-r--r--test/unit/end/braces/selections1
-rw-r--r--test/unit/end/brackets/cmd1
-rw-r--r--test/unit/end/brackets/in1
-rw-r--r--test/unit/end/brackets/selections1
-rw-r--r--test/unit/end/double_quote/cmd1
-rw-r--r--test/unit/end/double_quote/in1
-rw-r--r--test/unit/end/double_quote/selections1
-rw-r--r--test/unit/end/grave_quote/cmd1
-rw-r--r--test/unit/end/grave_quote/in1
-rw-r--r--test/unit/end/grave_quote/selections1
-rw-r--r--test/unit/end/indent/cmd1
-rw-r--r--test/unit/end/indent/in3
-rw-r--r--test/unit/end/indent/selections3
-rw-r--r--test/unit/end/paragraph/cmd1
-rw-r--r--test/unit/end/paragraph/in8
-rw-r--r--test/unit/end/paragraph/selections4
-rw-r--r--test/unit/end/parenthesis/cmd1
-rw-r--r--test/unit/end/parenthesis/in1
-rw-r--r--test/unit/end/parenthesis/selections1
-rw-r--r--test/unit/end/sentence/cmd1
-rw-r--r--test/unit/end/sentence/in6
-rw-r--r--test/unit/end/sentence/selections2
-rw-r--r--test/unit/end/single_quote/cmd1
-rw-r--r--test/unit/end/single_quote/in1
-rw-r--r--test/unit/end/single_quote/selections1
-rw-r--r--test/unit/end/word/cmd1
-rw-r--r--test/unit/end/word/in1
-rw-r--r--test/unit/end/word/selections1
-rw-r--r--test/unit/find-char-backward/cmd1
-rw-r--r--test/unit/find-char-backward/in1
-rw-r--r--test/unit/find-char-backward/selections1
-rw-r--r--test/unit/find-char-forward/cmd1
-rw-r--r--test/unit/find-char-forward/in1
-rw-r--r--test/unit/find-char-forward/selections1
-rw-r--r--test/unit/goto/buffer-bottom/cmd1
-rw-r--r--test/unit/goto/buffer-bottom/in3
-rw-r--r--test/unit/goto/buffer-bottom/selections1
-rw-r--r--test/unit/goto/buffer-end/cmd1
-rw-r--r--test/unit/goto/buffer-end/in3
-rw-r--r--test/unit/goto/buffer-end/selections2
-rw-r--r--test/unit/goto/buffer-top/cmd1
-rw-r--r--test/unit/goto/buffer-top/in3
-rw-r--r--test/unit/goto/buffer-top/selections1
-rw-r--r--test/unit/goto/file/cmd1
-rw-r--r--test/unit/goto/file/in1
-rw-r--r--test/unit/goto/file/out1
-rw-r--r--test/unit/goto/file/rc1
-rw-r--r--test/unit/goto/last-buffer/cmd1
-rw-r--r--test/unit/goto/last-buffer/out1
-rw-r--r--test/unit/goto/last-buffer/rc3
-rw-r--r--test/unit/goto/last-change/cmd1
-rw-r--r--test/unit/goto/last-change/in3
-rw-r--r--test/unit/goto/last-change/selections2
-rw-r--r--test/unit/goto/line-begin/cmd1
-rw-r--r--test/unit/goto/line-begin/in1
-rw-r--r--test/unit/goto/line-begin/selections1
-rw-r--r--test/unit/goto/line-end/cmd1
-rw-r--r--test/unit/goto/line-end/in1
-rw-r--r--test/unit/goto/line-end/selections1
-rw-r--r--test/unit/goto/window-bottom/README0
-rw-r--r--test/unit/goto/window-center/README0
-rw-r--r--test/unit/goto/window-top/README0
-rw-r--r--test/unit/indent/cmd1
-rw-r--r--test/unit/indent/in1
-rw-r--r--test/unit/indent/out1
-rw-r--r--test/unit/inner/WORD/cmd1
-rw-r--r--test/unit/inner/WORD/in1
-rw-r--r--test/unit/inner/WORD/selections1
-rw-r--r--test/unit/inner/angle/cmd1
-rw-r--r--test/unit/inner/angle/in1
-rw-r--r--test/unit/inner/angle/selections1
-rw-r--r--test/unit/inner/braces/cmd1
-rw-r--r--test/unit/inner/braces/in3
-rw-r--r--test/unit/inner/braces/selections2
-rw-r--r--test/unit/inner/brackets/cmd1
-rw-r--r--test/unit/inner/brackets/in3
-rw-r--r--test/unit/inner/brackets/selections2
-rw-r--r--test/unit/inner/double_quote/cmd1
-rw-r--r--test/unit/inner/double_quote/in1
-rw-r--r--test/unit/inner/double_quote/selections1
-rw-r--r--test/unit/inner/grave_quote/cmd1
-rw-r--r--test/unit/inner/grave_quote/in1
-rw-r--r--test/unit/inner/grave_quote/selections1
-rw-r--r--test/unit/inner/indent/cmd1
-rw-r--r--test/unit/inner/indent/in3
-rw-r--r--test/unit/inner/indent/selections2
-rw-r--r--test/unit/inner/paragraph/cmd1
-rw-r--r--test/unit/inner/paragraph/in8
-rw-r--r--test/unit/inner/paragraph/selections3
-rw-r--r--test/unit/inner/parenthesis/cmd1
-rw-r--r--test/unit/inner/parenthesis/in1
-rw-r--r--test/unit/inner/parenthesis/selections1
-rw-r--r--test/unit/inner/sentence/cmd1
-rw-r--r--test/unit/inner/sentence/in6
-rw-r--r--test/unit/inner/sentence/selections2
-rw-r--r--test/unit/inner/single_quote/cmd1
-rw-r--r--test/unit/inner/single_quote/in1
-rw-r--r--test/unit/inner/single_quote/selections1
-rw-r--r--test/unit/inner/word/cmd1
-rw-r--r--test/unit/inner/word/in1
-rw-r--r--test/unit/inner/word/selections1
-rw-r--r--test/unit/insert/cmd1
-rw-r--r--test/unit/insert/in1
-rw-r--r--test/unit/insert/out1
-rw-r--r--test/unit/left/cmd1
-rw-r--r--test/unit/left/in1
-rw-r--r--test/unit/left/selections1
-rw-r--r--test/unit/lower-case/cmd1
-rw-r--r--test/unit/lower-case/in1
-rw-r--r--test/unit/lower-case/selections1
-rw-r--r--test/unit/match-char/cmd1
-rw-r--r--test/unit/match-char/in3
-rw-r--r--test/unit/match-char/selections1
-rw-r--r--test/unit/next-WORD/cmd1
-rw-r--r--test/unit/next-WORD/in1
-rw-r--r--test/unit/next-WORD/selections1
-rw-r--r--test/unit/next-match/cmd1
-rw-r--r--test/unit/next-match/in1
-rw-r--r--test/unit/next-match/rc1
-rw-r--r--test/unit/next-match/selections1
-rw-r--r--test/unit/next-word/cmd1
-rw-r--r--test/unit/next-word/in1
-rw-r--r--test/unit/next-word/selections1
-rw-r--r--test/unit/open-above/cmd1
-rw-r--r--test/unit/open-above/in1
-rw-r--r--test/unit/open-above/out2
-rw-r--r--test/unit/open-below/cmd1
-rw-r--r--test/unit/open-below/in1
-rw-r--r--test/unit/open-below/out2
-rw-r--r--test/unit/paste-after/cmd1
-rw-r--r--test/unit/paste-after/in1
-rw-r--r--test/unit/paste-after/out1
-rw-r--r--test/unit/paste-before/cmd1
-rw-r--r--test/unit/paste-before/in1
-rw-r--r--test/unit/paste-before/out1
-rw-r--r--test/unit/pipe-insert/cmd1
-rw-r--r--test/unit/pipe-insert/in1
-rw-r--r--test/unit/pipe-insert/out1
-rw-r--r--test/unit/pipe/cmd1
-rw-r--r--test/unit/pipe/in1
-rw-r--r--test/unit/pipe/out1
-rw-r--r--test/unit/previous-WORD/cmd1
-rw-r--r--test/unit/previous-WORD/in1
-rw-r--r--test/unit/previous-WORD/selections1
-rw-r--r--test/unit/previous-word/cmd1
-rw-r--r--test/unit/previous-word/in1
-rw-r--r--test/unit/previous-word/selections1
-rw-r--r--test/unit/record-macro/cmd1
-rw-r--r--test/unit/record-macro/out1
-rw-r--r--test/unit/redo/cmd1
-rw-r--r--test/unit/redo/in1
-rw-r--r--test/unit/redo/out1
-rw-r--r--test/unit/repeat-insert/cmd1
-rw-r--r--test/unit/repeat-insert/out1
-rw-r--r--test/unit/replace/cmd1
-rw-r--r--test/unit/replace/in1
-rw-r--r--test/unit/replace/out1
-rw-r--r--test/unit/replay-macro/cmd1
-rw-r--r--test/unit/replay-macro/out1
-rw-r--r--test/unit/replay-macro/rc1
-rw-r--r--test/unit/right/cmd1
-rw-r--r--test/unit/right/in1
-rw-r--r--test/unit/right/selections1
-rw-r--r--test/unit/rotate-content/cmd1
-rw-r--r--test/unit/rotate-content/in1
-rw-r--r--test/unit/rotate-content/out1
-rw-r--r--test/unit/rotate/cmd1
-rw-r--r--test/unit/rotate/in1
-rw-r--r--test/unit/rotate/selections1
-rw-r--r--test/unit/search-reverse/cmd1
-rw-r--r--test/unit/search-reverse/in1
-rw-r--r--test/unit/search-reverse/selections1
-rw-r--r--test/unit/search/cmd1
-rw-r--r--test/unit/search/in1
-rw-r--r--test/unit/search/selections1
-rw-r--r--test/unit/select-line/cmd1
-rw-r--r--test/unit/select-line/in1
-rw-r--r--test/unit/select-line/selections2
-rw-r--r--test/unit/select/cmd1
-rw-r--r--test/unit/select/in1
-rw-r--r--test/unit/select/selections1
-rw-r--r--test/unit/split/cmd1
-rw-r--r--test/unit/split/in1
-rw-r--r--test/unit/split/selections1
-rw-r--r--test/unit/start/WORD/cmd1
-rw-r--r--test/unit/start/WORD/in1
-rw-r--r--test/unit/start/WORD/selections1
-rw-r--r--test/unit/start/angle/cmd1
-rw-r--r--test/unit/start/angle/in1
-rw-r--r--test/unit/start/angle/selections1
-rw-r--r--test/unit/start/braces/cmd1
-rw-r--r--test/unit/start/braces/in3
-rw-r--r--test/unit/start/braces/selections2
-rw-r--r--test/unit/start/brackets/cmd1
-rw-r--r--test/unit/start/brackets/in3
-rw-r--r--test/unit/start/brackets/selections2
-rw-r--r--test/unit/start/double_quote/cmd1
-rw-r--r--test/unit/start/double_quote/in1
-rw-r--r--test/unit/start/double_quote/selections1
-rw-r--r--test/unit/start/grave_quote/cmd1
-rw-r--r--test/unit/start/grave_quote/in1
-rw-r--r--test/unit/start/grave_quote/selections1
-rw-r--r--test/unit/start/indent/cmd1
-rw-r--r--test/unit/start/indent/in3
-rw-r--r--test/unit/start/indent/selections3
-rw-r--r--test/unit/start/paragraph/cmd1
-rw-r--r--test/unit/start/paragraph/in8
-rw-r--r--test/unit/start/paragraph/selections4
-rw-r--r--test/unit/start/parenthesis/cmd1
-rw-r--r--test/unit/start/parenthesis/in1
-rw-r--r--test/unit/start/parenthesis/selections1
-rw-r--r--test/unit/start/sentence/cmd1
-rw-r--r--test/unit/start/sentence/in6
-rw-r--r--test/unit/start/sentence/selections2
-rw-r--r--test/unit/start/single_quote/cmd1
-rw-r--r--test/unit/start/single_quote/in1
-rw-r--r--test/unit/start/single_quote/selections1
-rw-r--r--test/unit/start/word/cmd1
-rw-r--r--test/unit/start/word/in1
-rw-r--r--test/unit/start/word/selections1
-rw-r--r--test/unit/switch-case/cmd1
-rw-r--r--test/unit/switch-case/in1
-rw-r--r--test/unit/switch-case/selections1
-rw-r--r--test/unit/to-char-backward/cmd1
-rw-r--r--test/unit/to-char-backward/in1
-rw-r--r--test/unit/to-char-backward/selections1
-rw-r--r--test/unit/to-char-forward/cmd1
-rw-r--r--test/unit/to-char-forward/in1
-rw-r--r--test/unit/to-char-forward/selections1
-rw-r--r--test/unit/undo/cmd1
-rw-r--r--test/unit/undo/in1
-rw-r--r--test/unit/undo/out1
-rw-r--r--test/unit/up/cmd1
-rw-r--r--test/unit/up/in2
-rw-r--r--test/unit/up/selections1
-rw-r--r--test/unit/upper-case/cmd1
-rw-r--r--test/unit/upper-case/in1
-rw-r--r--test/unit/upper-case/selections1
-rw-r--r--test/unit/view/README0
-rw-r--r--test/unit/yank/cmd1
-rw-r--r--test/unit/yank/in1
-rw-r--r--test/unit/yank/out1
472 files changed, 809 insertions, 0 deletions
diff --git a/test/README.asciidoc b/test/README.asciidoc
new file mode 100644
index 00000000..4fc87d64
--- /dev/null
+++ b/test/README.asciidoc
@@ -0,0 +1,28 @@
+Regression test
+===============
+
+:unified-context-diff: https://en.wikipedia.org/wiki/Diff#Unified_format
+
+Source structure
+----------------
+
+----------------------------------------------
+.
+├── unit
+│ └── …
+└── compose
+ └── …
+ ├── cmd → command
+ ├── [in] → start file
+ ├── [out] → end file
+ ├── [selections] → selection contents
+ ├── [state] → selection states
+ └── [rc] → configuration
+----------------------------------------------
+
+Usage
+-----
+
+To test, just type +run [test]+ in the +test+ directory.
+It will print each passing test. If a test fails, a {unified-context-diff}[unified context diff]
+is printed showing the test’s expected output and the actual output.
diff --git a/test/compose/inline-sort/cmd b/test/compose/inline-sort/cmd
new file mode 100644
index 00000000..152c6986
--- /dev/null
+++ b/test/compose/inline-sort/cmd
@@ -0,0 +1 @@
+<a-i>bs<space><ret>c<ret><esc><a-i>b|sort<ret><a-j>
diff --git a/test/compose/inline-sort/in b/test/compose/inline-sort/in
new file mode 100644
index 00000000..12583379
--- /dev/null
+++ b/test/compose/inline-sort/in
@@ -0,0 +1 @@
+(e d c b a)
diff --git a/test/compose/inline-sort/out b/test/compose/inline-sort/out
new file mode 100644
index 00000000..15c98f1a
--- /dev/null
+++ b/test/compose/inline-sort/out
@@ -0,0 +1 @@
+(a b c d e)
diff --git a/test/run b/test/run
new file mode 100755
index 00000000..93cfc9eb
--- /dev/null
+++ b/test/run
@@ -0,0 +1,111 @@
+#!/bin/sh
+
+# Main ├────────────────────────────────────────────────────────────────────────
+
+main() { number_tests=0 number_failures=0
+ dirs=$@
+ test=$(pwd)
+ work=$(mktemp --directory)
+ cp --recursive . $work
+ trap "rm --recursive $work" EXIT
+ for dir in $(find $dirs -type d); do
+ cd $test/$dir; test_files=$(find * | egrep 'out|selections|state')
+ cd $work/$dir; { IFS=¬
+ indent=$(repeat ' ' $(pwd | sed "s|$test||" | tr --delete --complement / | awk '{ print length }'))
+ name=$(basename $PWD)
+ ! exists cmd && {
+ echo $indent$name
+ } || { nop=$((number_tests++))
+ touch in; cp in out
+ kak_commands="set global autoreload yes
+ try %{
+ source rc
+ }
+ try %{
+ exec '%s%[(](.+?)[)]<ret>i<del><del><esc>a<backspace><esc>'
+ } \
+ catch %{
+ exec gg
+ }
+ exec '$(<cmd)'
+ nop %sh{ IFS==
+ echo \"\$kak_selections\" > selections
+ echo \"\$kak_selections_desc\" > state
+ }
+ write out; quit!
+ "
+ kak out -n -e $kak_commands
+ for expect in $test_files; do
+ cmp --quiet $test/$dir/$expect $expect && {
+ echo "$indent$name" | colorize green normal
+ } || { nop=$((number_failures++))
+ echo "$indent$name" | colorize red normal
+ echo
+ IFS=$'\n'
+ for line in $(diff --unified $test/$dir/$expect $expect); do IFS=¬
+ first_character=$(head --bytes 1 <<< $line)
+ color=$(match $first_character + green - red @ magenta none)
+ colorize $color normal <<< $line
+ done
+ echo
+ }
+ done
+ }
+ }
+ done
+ (( $number_failures > 0 )) && color=red ||
+ color=green
+ echo
+ echo Resume:
+ echo $number_tests tests, $number_failures failures | colorize $color normal
+}
+
+# Utility ├─────────────────────────────────────────────────────────────────────
+
+match() {
+ expression=$1; shift
+ while [[ $@ ]]; do
+ pattern=$1; shift; value=$1 next=$1 default_value=$pattern
+ [[ $next ]] || {
+ echo $default_value
+ return 1
+ }
+ [[ $expression = $pattern ]] && {
+ echo $value
+ return 0
+ }
+ shift
+ done
+}
+
+repeat() { text=$1 count=${2:-0}
+ echo $(yes $text | head --lines $count | join)
+}
+
+join() {
+ tr --delete "\n"
+}
+
+exists() {
+ test -e $@
+}
+
+get_ansi_code() { color_name=${1:-none} style_name=${2:-none}
+ color='none 00
+ red 31
+ green 32
+ yellow 33
+ magenta 35'
+ style='none 00
+ bold 01'
+ color_nr=$(awk "/$color_name/ { print \$2 }" <<< $color)
+ style_nr=$(awk "/$style_name/ { print \$2 }" <<< $style)
+ sed s/COLOR_NR/$color_nr/';'s/STYLE_NR/$style_nr/ <<< '\e[STYLE_NR;COLOR_NRm'
+}
+
+colorize() { text=$(cat) color_name=${1:-none} style_name=${2:-none}
+ echo -e $(get_ansi_code $color_name $style_name)$text$(get_ansi_code none none)
+}
+
+
+main $@
diff --git a/test/unit/APPEND/cmd b/test/unit/APPEND/cmd
new file mode 100644
index 00000000..5876f8db
--- /dev/null
+++ b/test/unit/APPEND/cmd
@@ -0,0 +1 @@
+APPEND
diff --git a/test/unit/APPEND/in b/test/unit/APPEND/in
new file mode 100644
index 00000000..f70f10e4
--- /dev/null
+++ b/test/unit/APPEND/in
@@ -0,0 +1 @@
+A
diff --git a/test/unit/APPEND/out b/test/unit/APPEND/out
new file mode 100644
index 00000000..5876f8db
--- /dev/null
+++ b/test/unit/APPEND/out
@@ -0,0 +1 @@
+APPEND
diff --git a/test/unit/DOWN/cmd b/test/unit/DOWN/cmd
new file mode 100644
index 00000000..c8f145ff
--- /dev/null
+++ b/test/unit/DOWN/cmd
@@ -0,0 +1 @@
+J
diff --git a/test/unit/DOWN/in b/test/unit/DOWN/in
new file mode 100644
index 00000000..d2784210
--- /dev/null
+++ b/test/unit/DOWN/in
@@ -0,0 +1,2 @@
+%(foo)
+bar
diff --git a/test/unit/DOWN/selections b/test/unit/DOWN/selections
new file mode 100644
index 00000000..3bd1f0e2
--- /dev/null
+++ b/test/unit/DOWN/selections
@@ -0,0 +1,2 @@
+foo
+bar
diff --git a/test/unit/END/WORD/cmd b/test/unit/END/WORD/cmd
new file mode 100644
index 00000000..534740a4
--- /dev/null
+++ b/test/unit/END/WORD/cmd
@@ -0,0 +1 @@
+}W
diff --git a/test/unit/END/WORD/in b/test/unit/END/WORD/in
new file mode 100644
index 00000000..434f77db
--- /dev/null
+++ b/test/unit/END/WORD/in
@@ -0,0 +1 @@
+foo %(b)ar-baz qux
diff --git a/test/unit/END/WORD/selections b/test/unit/END/WORD/selections
new file mode 100644
index 00000000..d6311946
--- /dev/null
+++ b/test/unit/END/WORD/selections
@@ -0,0 +1 @@
+bar-baz
diff --git a/test/unit/END/angle/cmd b/test/unit/END/angle/cmd
new file mode 100644
index 00000000..f19fbec3
--- /dev/null
+++ b/test/unit/END/angle/cmd
@@ -0,0 +1 @@
+}a
diff --git a/test/unit/END/angle/in b/test/unit/END/angle/in
new file mode 100644
index 00000000..75b76117
--- /dev/null
+++ b/test/unit/END/angle/in
@@ -0,0 +1 @@
+#include <%(foo)>
diff --git a/test/unit/END/angle/selections b/test/unit/END/angle/selections
new file mode 100644
index 00000000..1bd5e5cc
--- /dev/null
+++ b/test/unit/END/angle/selections
@@ -0,0 +1 @@
+foo>
diff --git a/test/unit/END/braces/cmd b/test/unit/END/braces/cmd
new file mode 100644
index 00000000..1dc1639a
--- /dev/null
+++ b/test/unit/END/braces/cmd
@@ -0,0 +1 @@
+}B
diff --git a/test/unit/END/braces/in b/test/unit/END/braces/in
new file mode 100644
index 00000000..b62df918
--- /dev/null
+++ b/test/unit/END/braces/in
@@ -0,0 +1,3 @@
+{
+ "%(foo)": "bar"
+}
diff --git a/test/unit/END/braces/selections b/test/unit/END/braces/selections
new file mode 100644
index 00000000..a729b60b
--- /dev/null
+++ b/test/unit/END/braces/selections
@@ -0,0 +1,2 @@
+foo"\: "bar"
+}
diff --git a/test/unit/END/brackets/cmd b/test/unit/END/brackets/cmd
new file mode 100644
index 00000000..5309578a
--- /dev/null
+++ b/test/unit/END/brackets/cmd
@@ -0,0 +1 @@
+}r
diff --git a/test/unit/END/brackets/in b/test/unit/END/brackets/in
new file mode 100644
index 00000000..286c5fcb
--- /dev/null
+++ b/test/unit/END/brackets/in
@@ -0,0 +1,3 @@
+[
+ "%(foo)"
+]
diff --git a/test/unit/END/brackets/selections b/test/unit/END/brackets/selections
new file mode 100644
index 00000000..0ca681c5
--- /dev/null
+++ b/test/unit/END/brackets/selections
@@ -0,0 +1,2 @@
+foo"
+]
diff --git a/test/unit/END/double_quote/cmd b/test/unit/END/double_quote/cmd
new file mode 100644
index 00000000..33d6c350
--- /dev/null
+++ b/test/unit/END/double_quote/cmd
@@ -0,0 +1 @@
+}Q
diff --git a/test/unit/END/double_quote/in b/test/unit/END/double_quote/in
new file mode 100644
index 00000000..78428f5e
--- /dev/null
+++ b/test/unit/END/double_quote/in
@@ -0,0 +1 @@
+foo("%(b)ar")
diff --git a/test/unit/END/double_quote/selections b/test/unit/END/double_quote/selections
new file mode 100644
index 00000000..d9f07fc6
--- /dev/null
+++ b/test/unit/END/double_quote/selections
@@ -0,0 +1 @@
+bar"
diff --git a/test/unit/END/grave_quote/cmd b/test/unit/END/grave_quote/cmd
new file mode 100644
index 00000000..31b0a83e
--- /dev/null
+++ b/test/unit/END/grave_quote/cmd
@@ -0,0 +1 @@
+}g
diff --git a/test/unit/END/grave_quote/in b/test/unit/END/grave_quote/in
new file mode 100644
index 00000000..6f02c52a
--- /dev/null
+++ b/test/unit/END/grave_quote/in
@@ -0,0 +1 @@
+echo `%(f)oo`
diff --git a/test/unit/END/grave_quote/selections b/test/unit/END/grave_quote/selections
new file mode 100644
index 00000000..b380d541
--- /dev/null
+++ b/test/unit/END/grave_quote/selections
@@ -0,0 +1 @@
+foo`
diff --git a/test/unit/END/indent/cmd b/test/unit/END/indent/cmd
new file mode 100644
index 00000000..467a5545
--- /dev/null
+++ b/test/unit/END/indent/cmd
@@ -0,0 +1 @@
+}i
diff --git a/test/unit/END/indent/in b/test/unit/END/indent/in
new file mode 100644
index 00000000..3d074b01
--- /dev/null
+++ b/test/unit/END/indent/in
@@ -0,0 +1,3 @@
+
+ foo(%(b)ar)
+
diff --git a/test/unit/END/indent/selections b/test/unit/END/indent/selections
new file mode 100644
index 00000000..2bd77fd4
--- /dev/null
+++ b/test/unit/END/indent/selections
@@ -0,0 +1,3 @@
+ foo(bar)
+
+
diff --git a/test/unit/END/paragraph/cmd b/test/unit/END/paragraph/cmd
new file mode 100644
index 00000000..01c975ec
--- /dev/null
+++ b/test/unit/END/paragraph/cmd
@@ -0,0 +1 @@
+}p
diff --git a/test/unit/END/paragraph/in b/test/unit/END/paragraph/in
new file mode 100644
index 00000000..0da6451e
--- /dev/null
+++ b/test/unit/END/paragraph/in
@@ -0,0 +1,8 @@
+a
+b
+
+%(c)
+d
+
+e
+f
diff --git a/test/unit/END/paragraph/selections b/test/unit/END/paragraph/selections
new file mode 100644
index 00000000..2887a9d6
--- /dev/null
+++ b/test/unit/END/paragraph/selections
@@ -0,0 +1,4 @@
+c
+d
+
+
diff --git a/test/unit/END/parenthesis/cmd b/test/unit/END/parenthesis/cmd
new file mode 100644
index 00000000..889b7fa1
--- /dev/null
+++ b/test/unit/END/parenthesis/cmd
@@ -0,0 +1 @@
+}b
diff --git a/test/unit/END/parenthesis/in b/test/unit/END/parenthesis/in
new file mode 100644
index 00000000..3bea1f71
--- /dev/null
+++ b/test/unit/END/parenthesis/in
@@ -0,0 +1 @@
+foo(%(b)ar)
diff --git a/test/unit/END/parenthesis/selections b/test/unit/END/parenthesis/selections
new file mode 100644
index 00000000..05b3995d
--- /dev/null
+++ b/test/unit/END/parenthesis/selections
@@ -0,0 +1 @@
+bar)
diff --git a/test/unit/END/sentence/cmd b/test/unit/END/sentence/cmd
new file mode 100644
index 00000000..4021c482
--- /dev/null
+++ b/test/unit/END/sentence/cmd
@@ -0,0 +1 @@
+}s
diff --git a/test/unit/END/sentence/in b/test/unit/END/sentence/in
new file mode 100644
index 00000000..006cd705
--- /dev/null
+++ b/test/unit/END/sentence/in
@@ -0,0 +1,6 @@
+%(Lorem ipsum) dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
+incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
+nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore
+eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
+sunt in culpa qui officia deserunt mollit anim id est laborum.
diff --git a/test/unit/END/sentence/selections b/test/unit/END/sentence/selections
new file mode 100644
index 00000000..5dd13409
--- /dev/null
+++ b/test/unit/END/sentence/selections
@@ -0,0 +1,2 @@
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
+incididunt ut labore et dolore magna aliqua.
diff --git a/test/unit/END/single_quote/cmd b/test/unit/END/single_quote/cmd
new file mode 100644
index 00000000..e50f2e00
--- /dev/null
+++ b/test/unit/END/single_quote/cmd
@@ -0,0 +1 @@
+}q
diff --git a/test/unit/END/single_quote/in b/test/unit/END/single_quote/in
new file mode 100644
index 00000000..ed397c1c
--- /dev/null
+++ b/test/unit/END/single_quote/in
@@ -0,0 +1 @@
+foo('%(b)ar')
diff --git a/test/unit/END/single_quote/selections b/test/unit/END/single_quote/selections
new file mode 100644
index 00000000..7ca0922b
--- /dev/null
+++ b/test/unit/END/single_quote/selections
@@ -0,0 +1 @@
+bar'
diff --git a/test/unit/END/word/cmd b/test/unit/END/word/cmd
new file mode 100644
index 00000000..120c7dfe
--- /dev/null
+++ b/test/unit/END/word/cmd
@@ -0,0 +1 @@
+}w
diff --git a/test/unit/END/word/in b/test/unit/END/word/in
new file mode 100644
index 00000000..e92570ea
--- /dev/null
+++ b/test/unit/END/word/in
@@ -0,0 +1 @@
+foo %(b)ar baz
diff --git a/test/unit/END/word/selections b/test/unit/END/word/selections
new file mode 100644
index 00000000..efe82b7c
--- /dev/null
+++ b/test/unit/END/word/selections
@@ -0,0 +1 @@
+bar
diff --git a/test/unit/FIND-char-backward/cmd b/test/unit/FIND-char-backward/cmd
new file mode 100644
index 00000000..589f917d
--- /dev/null
+++ b/test/unit/FIND-char-backward/cmd
@@ -0,0 +1 @@
+<a-F>|
diff --git a/test/unit/FIND-char-backward/in b/test/unit/FIND-char-backward/in
new file mode 100644
index 00000000..1da8fdf7
--- /dev/null
+++ b/test/unit/FIND-char-backward/in
@@ -0,0 +1 @@
+foo|%(bar)|baz
diff --git a/test/unit/FIND-char-backward/selections b/test/unit/FIND-char-backward/selections
new file mode 100644
index 00000000..cecd2dec
--- /dev/null
+++ b/test/unit/FIND-char-backward/selections
@@ -0,0 +1 @@
+|bar
diff --git a/test/unit/FIND-char-forward/cmd b/test/unit/FIND-char-forward/cmd
new file mode 100644
index 00000000..935a1942
--- /dev/null
+++ b/test/unit/FIND-char-forward/cmd
@@ -0,0 +1 @@
+F|
diff --git a/test/unit/FIND-char-forward/in b/test/unit/FIND-char-forward/in
new file mode 100644
index 00000000..1da8fdf7
--- /dev/null
+++ b/test/unit/FIND-char-forward/in
@@ -0,0 +1 @@
+foo|%(bar)|baz
diff --git a/test/unit/FIND-char-forward/selections b/test/unit/FIND-char-forward/selections
new file mode 100644
index 00000000..b9f1b3f0
--- /dev/null
+++ b/test/unit/FIND-char-forward/selections
@@ -0,0 +1 @@
+bar|
diff --git a/test/unit/GOTO/buffer-bottom/cmd b/test/unit/GOTO/buffer-bottom/cmd
new file mode 100644
index 00000000..1f77a5ca
--- /dev/null
+++ b/test/unit/GOTO/buffer-bottom/cmd
@@ -0,0 +1 @@
+Gj
diff --git a/test/unit/GOTO/buffer-bottom/in b/test/unit/GOTO/buffer-bottom/in
new file mode 100644
index 00000000..2351e040
--- /dev/null
+++ b/test/unit/GOTO/buffer-bottom/in
@@ -0,0 +1,3 @@
+foo
+%(bar)
+baz
diff --git a/test/unit/GOTO/buffer-bottom/selections b/test/unit/GOTO/buffer-bottom/selections
new file mode 100644
index 00000000..4a71b15a
--- /dev/null
+++ b/test/unit/GOTO/buffer-bottom/selections
@@ -0,0 +1,2 @@
+bar
+b
diff --git a/test/unit/GOTO/buffer-end/cmd b/test/unit/GOTO/buffer-end/cmd
new file mode 100644
index 00000000..a58c9c3b
--- /dev/null
+++ b/test/unit/GOTO/buffer-end/cmd
@@ -0,0 +1 @@
+Ge
diff --git a/test/unit/GOTO/buffer-end/in b/test/unit/GOTO/buffer-end/in
new file mode 100644
index 00000000..2351e040
--- /dev/null
+++ b/test/unit/GOTO/buffer-end/in
@@ -0,0 +1,3 @@
+foo
+%(bar)
+baz
diff --git a/test/unit/GOTO/buffer-end/selections b/test/unit/GOTO/buffer-end/selections
new file mode 100644
index 00000000..059c57a9
--- /dev/null
+++ b/test/unit/GOTO/buffer-end/selections
@@ -0,0 +1,3 @@
+bar
+baz
+
diff --git a/test/unit/GOTO/buffer-top/cmd b/test/unit/GOTO/buffer-top/cmd
new file mode 100644
index 00000000..a852222e
--- /dev/null
+++ b/test/unit/GOTO/buffer-top/cmd
@@ -0,0 +1 @@
+Gk
diff --git a/test/unit/GOTO/buffer-top/in b/test/unit/GOTO/buffer-top/in
new file mode 100644
index 00000000..2351e040
--- /dev/null
+++ b/test/unit/GOTO/buffer-top/in
@@ -0,0 +1,3 @@
+foo
+%(bar)
+baz
diff --git a/test/unit/GOTO/buffer-top/selections b/test/unit/GOTO/buffer-top/selections
new file mode 100644
index 00000000..e512e1b5
--- /dev/null
+++ b/test/unit/GOTO/buffer-top/selections
@@ -0,0 +1,2 @@
+foo
+b
diff --git a/test/unit/GOTO/last-change/cmd b/test/unit/GOTO/last-change/cmd
new file mode 100644
index 00000000..ec167fcd
--- /dev/null
+++ b/test/unit/GOTO/last-change/cmd
@@ -0,0 +1 @@
+dggG.
diff --git a/test/unit/GOTO/last-change/in b/test/unit/GOTO/last-change/in
new file mode 100644
index 00000000..2351e040
--- /dev/null
+++ b/test/unit/GOTO/last-change/in
@@ -0,0 +1,3 @@
+foo
+%(bar)
+baz
diff --git a/test/unit/GOTO/last-change/selections b/test/unit/GOTO/last-change/selections
new file mode 100644
index 00000000..333dc6b4
--- /dev/null
+++ b/test/unit/GOTO/last-change/selections
@@ -0,0 +1,3 @@
+foo
+
+
diff --git a/test/unit/GOTO/line-begin/cmd b/test/unit/GOTO/line-begin/cmd
new file mode 100644
index 00000000..4b5902a1
--- /dev/null
+++ b/test/unit/GOTO/line-begin/cmd
@@ -0,0 +1 @@
+Gh
diff --git a/test/unit/GOTO/line-begin/in b/test/unit/GOTO/line-begin/in
new file mode 100644
index 00000000..a3133ea2
--- /dev/null
+++ b/test/unit/GOTO/line-begin/in
@@ -0,0 +1 @@
+foo %(bar) baz
diff --git a/test/unit/GOTO/line-begin/selections b/test/unit/GOTO/line-begin/selections
new file mode 100644
index 00000000..d675fa44
--- /dev/null
+++ b/test/unit/GOTO/line-begin/selections
@@ -0,0 +1 @@
+foo bar
diff --git a/test/unit/GOTO/line-end/cmd b/test/unit/GOTO/line-end/cmd
new file mode 100644
index 00000000..a8f5fa59
--- /dev/null
+++ b/test/unit/GOTO/line-end/cmd
@@ -0,0 +1 @@
+Gl
diff --git a/test/unit/GOTO/line-end/in b/test/unit/GOTO/line-end/in
new file mode 100644
index 00000000..a3133ea2
--- /dev/null
+++ b/test/unit/GOTO/line-end/in
@@ -0,0 +1 @@
+foo %(bar) baz
diff --git a/test/unit/GOTO/line-end/selections b/test/unit/GOTO/line-end/selections
new file mode 100644
index 00000000..1da92a26
--- /dev/null
+++ b/test/unit/GOTO/line-end/selections
@@ -0,0 +1 @@
+bar baz
diff --git a/test/unit/GOTO/window-bottom/README b/test/unit/GOTO/window-bottom/README
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/test/unit/GOTO/window-bottom/README
diff --git a/test/unit/GOTO/window-center/README b/test/unit/GOTO/window-center/README
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/test/unit/GOTO/window-center/README
diff --git a/test/unit/GOTO/window-top/README b/test/unit/GOTO/window-top/README
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/test/unit/GOTO/window-top/README
diff --git a/test/unit/INSERT/cmd b/test/unit/INSERT/cmd
new file mode 100644
index 00000000..8252a6e9
--- /dev/null
+++ b/test/unit/INSERT/cmd
@@ -0,0 +1 @@
+IINSER
diff --git a/test/unit/INSERT/in b/test/unit/INSERT/in
new file mode 100644
index 00000000..62a6e3c9
--- /dev/null
+++ b/test/unit/INSERT/in
@@ -0,0 +1 @@
+T
diff --git a/test/unit/INSERT/out b/test/unit/INSERT/out
new file mode 100644
index 00000000..0f20e205
--- /dev/null
+++ b/test/unit/INSERT/out
@@ -0,0 +1 @@
+INSERT
diff --git a/test/unit/LEFT/cmd b/test/unit/LEFT/cmd
new file mode 100644
index 00000000..a9edc74f
--- /dev/null
+++ b/test/unit/LEFT/cmd
@@ -0,0 +1 @@
+H
diff --git a/test/unit/LEFT/in b/test/unit/LEFT/in
new file mode 100644
index 00000000..f1cf5ad7
--- /dev/null
+++ b/test/unit/LEFT/in
@@ -0,0 +1 @@
+foo %(bar)
diff --git a/test/unit/LEFT/selections b/test/unit/LEFT/selections
new file mode 100644
index 00000000..86ae29c8
--- /dev/null
+++ b/test/unit/LEFT/selections
@@ -0,0 +1 @@
+ba
diff --git a/test/unit/NEXT-WORD/cmd b/test/unit/NEXT-WORD/cmd
new file mode 100644
index 00000000..b68046f4
--- /dev/null
+++ b/test/unit/NEXT-WORD/cmd
@@ -0,0 +1 @@
+<a-W>
diff --git a/test/unit/NEXT-WORD/in b/test/unit/NEXT-WORD/in
new file mode 100644
index 00000000..6190cbdd
--- /dev/null
+++ b/test/unit/NEXT-WORD/in
@@ -0,0 +1 @@
+%(foo )bar-baz qux
diff --git a/test/unit/NEXT-WORD/selections b/test/unit/NEXT-WORD/selections
new file mode 100644
index 00000000..5cab843c
--- /dev/null
+++ b/test/unit/NEXT-WORD/selections
@@ -0,0 +1 @@
+foo bar-baz
diff --git a/test/unit/NEXT-match/cmd b/test/unit/NEXT-match/cmd
new file mode 100644
index 00000000..d52e7987
--- /dev/null
+++ b/test/unit/NEXT-match/cmd
@@ -0,0 +1 @@
+N
diff --git a/test/unit/NEXT-match/in b/test/unit/NEXT-match/in
new file mode 100644
index 00000000..7168be78
--- /dev/null
+++ b/test/unit/NEXT-match/in
@@ -0,0 +1 @@
+%(foo) bar
diff --git a/test/unit/NEXT-match/rc b/test/unit/NEXT-match/rc
new file mode 100644
index 00000000..1d1241c7
--- /dev/null
+++ b/test/unit/NEXT-match/rc
@@ -0,0 +1 @@
+reg / [a-z]+
diff --git a/test/unit/NEXT-match/selections b/test/unit/NEXT-match/selections
new file mode 100644
index 00000000..9c85e238
--- /dev/null
+++ b/test/unit/NEXT-match/selections
@@ -0,0 +1 @@
+bar:foo
diff --git a/test/unit/NEXT-word/cmd b/test/unit/NEXT-word/cmd
new file mode 100644
index 00000000..a42d8ff6
--- /dev/null
+++ b/test/unit/NEXT-word/cmd
@@ -0,0 +1 @@
+W
diff --git a/test/unit/NEXT-word/in b/test/unit/NEXT-word/in
new file mode 100644
index 00000000..76a917ab
--- /dev/null
+++ b/test/unit/NEXT-word/in
@@ -0,0 +1 @@
+%(foo )bar baz
diff --git a/test/unit/NEXT-word/selections b/test/unit/NEXT-word/selections
new file mode 100644
index 00000000..cc995e23
--- /dev/null
+++ b/test/unit/NEXT-word/selections
@@ -0,0 +1 @@
+foo bar
diff --git a/test/unit/PREVIOUS-WORD/cmd b/test/unit/PREVIOUS-WORD/cmd
new file mode 100644
index 00000000..ee4223f8
--- /dev/null
+++ b/test/unit/PREVIOUS-WORD/cmd
@@ -0,0 +1 @@
+<a-B>
diff --git a/test/unit/PREVIOUS-WORD/in b/test/unit/PREVIOUS-WORD/in
new file mode 100644
index 00000000..e92570ea
--- /dev/null
+++ b/test/unit/PREVIOUS-WORD/in
@@ -0,0 +1 @@
+foo %(b)ar baz
diff --git a/test/unit/PREVIOUS-WORD/selections b/test/unit/PREVIOUS-WORD/selections
new file mode 100644
index 00000000..20b4d26d
--- /dev/null
+++ b/test/unit/PREVIOUS-WORD/selections
@@ -0,0 +1 @@
+foo b
diff --git a/test/unit/PREVIOUS-word/cmd b/test/unit/PREVIOUS-word/cmd
new file mode 100644
index 00000000..a313e713
--- /dev/null
+++ b/test/unit/PREVIOUS-word/cmd
@@ -0,0 +1 @@
+<a-b>
diff --git a/test/unit/PREVIOUS-word/in b/test/unit/PREVIOUS-word/in
new file mode 100644
index 00000000..e92570ea
--- /dev/null
+++ b/test/unit/PREVIOUS-word/in
@@ -0,0 +1 @@
+foo %(b)ar baz
diff --git a/test/unit/PREVIOUS-word/selections b/test/unit/PREVIOUS-word/selections
new file mode 100644
index 00000000..564d4dda
--- /dev/null
+++ b/test/unit/PREVIOUS-word/selections
@@ -0,0 +1 @@
+foo
diff --git a/test/unit/RIGHT/cmd b/test/unit/RIGHT/cmd
new file mode 100644
index 00000000..05bef1a5
--- /dev/null
+++ b/test/unit/RIGHT/cmd
@@ -0,0 +1 @@
+L
diff --git a/test/unit/RIGHT/in b/test/unit/RIGHT/in
new file mode 100644
index 00000000..7168be78
--- /dev/null
+++ b/test/unit/RIGHT/in
@@ -0,0 +1 @@
+%(foo) bar
diff --git a/test/unit/RIGHT/selections b/test/unit/RIGHT/selections
new file mode 100644
index 00000000..564d4dda
--- /dev/null
+++ b/test/unit/RIGHT/selections
@@ -0,0 +1 @@
+foo
diff --git a/test/unit/SEARCH-reverse/cmd b/test/unit/SEARCH-reverse/cmd
new file mode 100644
index 00000000..bf5f1cc6
--- /dev/null
+++ b/test/unit/SEARCH-reverse/cmd
@@ -0,0 +1 @@
+<a-?>[a-z]+<ret>
diff --git a/test/unit/SEARCH-reverse/in b/test/unit/SEARCH-reverse/in
new file mode 100644
index 00000000..a3133ea2
--- /dev/null
+++ b/test/unit/SEARCH-reverse/in
@@ -0,0 +1 @@
+foo %(bar) baz
diff --git a/test/unit/SEARCH-reverse/selections b/test/unit/SEARCH-reverse/selections
new file mode 100644
index 00000000..20b4d26d
--- /dev/null
+++ b/test/unit/SEARCH-reverse/selections
@@ -0,0 +1 @@
+foo b
diff --git a/test/unit/SEARCH/cmd b/test/unit/SEARCH/cmd
new file mode 100644
index 00000000..5bb20d25
--- /dev/null
+++ b/test/unit/SEARCH/cmd
@@ -0,0 +1 @@
+?[a-z]+<ret>
diff --git a/test/unit/SEARCH/in b/test/unit/SEARCH/in
new file mode 100644
index 00000000..a3133ea2
--- /dev/null
+++ b/test/unit/SEARCH/in
@@ -0,0 +1 @@
+foo %(bar) baz
diff --git a/test/unit/SEARCH/selections b/test/unit/SEARCH/selections
new file mode 100644
index 00000000..1da92a26
--- /dev/null
+++ b/test/unit/SEARCH/selections
@@ -0,0 +1 @@
+bar baz
diff --git a/test/unit/SELECT-line/cmd b/test/unit/SELECT-line/cmd
new file mode 100644
index 00000000..62d8fe9f
--- /dev/null
+++ b/test/unit/SELECT-line/cmd
@@ -0,0 +1 @@
+X
diff --git a/test/unit/SELECT-line/in b/test/unit/SELECT-line/in
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/test/unit/SELECT-line/in
@@ -0,0 +1 @@
+foo
diff --git a/test/unit/SELECT-line/selections b/test/unit/SELECT-line/selections
new file mode 100644
index 00000000..75d7bfb8
--- /dev/null
+++ b/test/unit/SELECT-line/selections
@@ -0,0 +1,2 @@
+foo
+
diff --git a/test/unit/START/WORD/cmd b/test/unit/START/WORD/cmd
new file mode 100644
index 00000000..f2ed5a2e
--- /dev/null
+++ b/test/unit/START/WORD/cmd
@@ -0,0 +1 @@
+{W
diff --git a/test/unit/START/WORD/in b/test/unit/START/WORD/in
new file mode 100644
index 00000000..82588cdb
--- /dev/null
+++ b/test/unit/START/WORD/in
@@ -0,0 +1 @@
+foo bar-ba%(z) qux
diff --git a/test/unit/START/WORD/selections b/test/unit/START/WORD/selections
new file mode 100644
index 00000000..d6311946
--- /dev/null
+++ b/test/unit/START/WORD/selections
@@ -0,0 +1 @@
+bar-baz
diff --git a/test/unit/START/angle/cmd b/test/unit/START/angle/cmd
new file mode 100644
index 00000000..e61ebcbe
--- /dev/null
+++ b/test/unit/START/angle/cmd
@@ -0,0 +1 @@
+{a
diff --git a/test/unit/START/angle/in b/test/unit/START/angle/in
new file mode 100644
index 00000000..8dea61dd
--- /dev/null
+++ b/test/unit/START/angle/in
@@ -0,0 +1 @@
+#include <%(f)oo>
diff --git a/test/unit/START/angle/selections b/test/unit/START/angle/selections
new file mode 100644
index 00000000..1ab3973e
--- /dev/null
+++ b/test/unit/START/angle/selections
@@ -0,0 +1 @@
+<f
diff --git a/test/unit/START/braces/cmd b/test/unit/START/braces/cmd
new file mode 100644
index 00000000..63b248b1
--- /dev/null
+++ b/test/unit/START/braces/cmd
@@ -0,0 +1 @@
+{B
diff --git a/test/unit/START/braces/in b/test/unit/START/braces/in
new file mode 100644
index 00000000..b62df918
--- /dev/null
+++ b/test/unit/START/braces/in
@@ -0,0 +1,3 @@
+{
+ "%(foo)": "bar"
+}
diff --git a/test/unit/START/braces/selections b/test/unit/START/braces/selections
new file mode 100644
index 00000000..6e365bec
--- /dev/null
+++ b/test/unit/START/braces/selections
@@ -0,0 +1,2 @@
+{
+ "foo
diff --git a/test/unit/START/brackets/cmd b/test/unit/START/brackets/cmd
new file mode 100644
index 00000000..13cd076e
--- /dev/null
+++ b/test/unit/START/brackets/cmd
@@ -0,0 +1 @@
+{r
diff --git a/test/unit/START/brackets/in b/test/unit/START/brackets/in
new file mode 100644
index 00000000..286c5fcb
--- /dev/null
+++ b/test/unit/START/brackets/in
@@ -0,0 +1,3 @@
+[
+ "%(foo)"
+]
diff --git a/test/unit/START/brackets/selections b/test/unit/START/brackets/selections
new file mode 100644
index 00000000..a42eb4eb
--- /dev/null
+++ b/test/unit/START/brackets/selections
@@ -0,0 +1,2 @@
+[
+ "foo
diff --git a/test/unit/START/double_quote/cmd b/test/unit/START/double_quote/cmd
new file mode 100644
index 00000000..94fa0cfd
--- /dev/null
+++ b/test/unit/START/double_quote/cmd
@@ -0,0 +1 @@
+{Q
diff --git a/test/unit/START/double_quote/in b/test/unit/START/double_quote/in
new file mode 100644
index 00000000..78428f5e
--- /dev/null
+++ b/test/unit/START/double_quote/in
@@ -0,0 +1 @@
+foo("%(b)ar")
diff --git a/test/unit/START/double_quote/selections b/test/unit/START/double_quote/selections
new file mode 100644
index 00000000..87e31fb8
--- /dev/null
+++ b/test/unit/START/double_quote/selections
@@ -0,0 +1 @@
+"b
diff --git a/test/unit/START/grave_quote/cmd b/test/unit/START/grave_quote/cmd
new file mode 100644
index 00000000..28f8b01b
--- /dev/null
+++ b/test/unit/START/grave_quote/cmd
@@ -0,0 +1 @@
+{g
diff --git a/test/unit/START/grave_quote/in b/test/unit/START/grave_quote/in
new file mode 100644
index 00000000..6f02c52a
--- /dev/null
+++ b/test/unit/START/grave_quote/in
@@ -0,0 +1 @@
+echo `%(f)oo`
diff --git a/test/unit/START/grave_quote/selections b/test/unit/START/grave_quote/selections
new file mode 100644
index 00000000..e20e0382
--- /dev/null
+++ b/test/unit/START/grave_quote/selections
@@ -0,0 +1 @@
+`f
diff --git a/test/unit/START/indent/cmd b/test/unit/START/indent/cmd
new file mode 100644
index 00000000..d7379be4
--- /dev/null
+++ b/test/unit/START/indent/cmd
@@ -0,0 +1 @@
+{i
diff --git a/test/unit/START/indent/in b/test/unit/START/indent/in
new file mode 100644
index 00000000..3d074b01
--- /dev/null
+++ b/test/unit/START/indent/in
@@ -0,0 +1,3 @@
+
+ foo(%(b)ar)
+
diff --git a/test/unit/START/indent/selections b/test/unit/START/indent/selections
new file mode 100644
index 00000000..dbf75bb0
--- /dev/null
+++ b/test/unit/START/indent/selections
@@ -0,0 +1,3 @@
+
+ foo(bar)
+
diff --git a/test/unit/START/paragraph/cmd b/test/unit/START/paragraph/cmd
new file mode 100644
index 00000000..86fb08f1
--- /dev/null
+++ b/test/unit/START/paragraph/cmd
@@ -0,0 +1 @@
+{p
diff --git a/test/unit/START/paragraph/in b/test/unit/START/paragraph/in
new file mode 100644
index 00000000..0da6451e
--- /dev/null
+++ b/test/unit/START/paragraph/in
@@ -0,0 +1,8 @@
+a
+b
+
+%(c)
+d
+
+e
+f
diff --git a/test/unit/START/paragraph/selections b/test/unit/START/paragraph/selections
new file mode 100644
index 00000000..d1d9c6f7
--- /dev/null
+++ b/test/unit/START/paragraph/selections
@@ -0,0 +1,4 @@
+a
+b
+
+c
diff --git a/test/unit/START/parenthesis/cmd b/test/unit/START/parenthesis/cmd
new file mode 100644
index 00000000..e3b685c2
--- /dev/null
+++ b/test/unit/START/parenthesis/cmd
@@ -0,0 +1 @@
+{b
diff --git a/test/unit/START/parenthesis/in b/test/unit/START/parenthesis/in
new file mode 100644
index 00000000..3bea1f71
--- /dev/null
+++ b/test/unit/START/parenthesis/in
@@ -0,0 +1 @@
+foo(%(b)ar)
diff --git a/test/unit/START/parenthesis/selections b/test/unit/START/parenthesis/selections
new file mode 100644
index 00000000..a4f1ddd7
--- /dev/null
+++ b/test/unit/START/parenthesis/selections
@@ -0,0 +1 @@
+(b
diff --git a/test/unit/START/sentence/cmd b/test/unit/START/sentence/cmd
new file mode 100644
index 00000000..b22d6c52
--- /dev/null
+++ b/test/unit/START/sentence/cmd
@@ -0,0 +1 @@
+{s
diff --git a/test/unit/START/sentence/in b/test/unit/START/sentence/in
new file mode 100644
index 00000000..0e5983b9
--- /dev/null
+++ b/test/unit/START/sentence/in
@@ -0,0 +1,6 @@
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
+incididunt ut labore et %(dolore magna aliqua). Ut enim ad minim veniam, quis
+nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore
+eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
+sunt in culpa qui officia deserunt mollit anim id est laborum.
diff --git a/test/unit/START/sentence/selections b/test/unit/START/sentence/selections
new file mode 100644
index 00000000..837b6bb4
--- /dev/null
+++ b/test/unit/START/sentence/selections
@@ -0,0 +1,2 @@
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
+incididunt ut labore et dolore magna aliqua
diff --git a/test/unit/START/single_quote/cmd b/test/unit/START/single_quote/cmd
new file mode 100644
index 00000000..7bf02d06
--- /dev/null
+++ b/test/unit/START/single_quote/cmd
@@ -0,0 +1 @@
+{q
diff --git a/test/unit/START/single_quote/in b/test/unit/START/single_quote/in
new file mode 100644
index 00000000..ed397c1c
--- /dev/null
+++ b/test/unit/START/single_quote/in
@@ -0,0 +1 @@
+foo('%(b)ar')
diff --git a/test/unit/START/single_quote/selections b/test/unit/START/single_quote/selections
new file mode 100644
index 00000000..52d63ab2
--- /dev/null
+++ b/test/unit/START/single_quote/selections
@@ -0,0 +1 @@
+'b
diff --git a/test/unit/START/word/cmd b/test/unit/START/word/cmd
new file mode 100644
index 00000000..bd2198bc
--- /dev/null
+++ b/test/unit/START/word/cmd
@@ -0,0 +1 @@
+{w
diff --git a/test/unit/START/word/in b/test/unit/START/word/in
new file mode 100644
index 00000000..6cac4552
--- /dev/null
+++ b/test/unit/START/word/in
@@ -0,0 +1 @@
+foo ba%(r) baz
diff --git a/test/unit/START/word/selections b/test/unit/START/word/selections
new file mode 100644
index 00000000..efe82b7c
--- /dev/null
+++ b/test/unit/START/word/selections
@@ -0,0 +1 @@
+bar
diff --git a/test/unit/TO-char-backward/cmd b/test/unit/TO-char-backward/cmd
new file mode 100644
index 00000000..589f917d
--- /dev/null
+++ b/test/unit/TO-char-backward/cmd
@@ -0,0 +1 @@
+<a-F>|
diff --git a/test/unit/TO-char-backward/in b/test/unit/TO-char-backward/in
new file mode 100644
index 00000000..1da8fdf7
--- /dev/null
+++ b/test/unit/TO-char-backward/in
@@ -0,0 +1 @@
+foo|%(bar)|baz
diff --git a/test/unit/TO-char-backward/selections b/test/unit/TO-char-backward/selections
new file mode 100644
index 00000000..cecd2dec
--- /dev/null
+++ b/test/unit/TO-char-backward/selections
@@ -0,0 +1 @@
+|bar
diff --git a/test/unit/TO-char-forward/cmd b/test/unit/TO-char-forward/cmd
new file mode 100644
index 00000000..935a1942
--- /dev/null
+++ b/test/unit/TO-char-forward/cmd
@@ -0,0 +1 @@
+F|
diff --git a/test/unit/TO-char-forward/in b/test/unit/TO-char-forward/in
new file mode 100644
index 00000000..1da8fdf7
--- /dev/null
+++ b/test/unit/TO-char-forward/in
@@ -0,0 +1 @@
+foo|%(bar)|baz
diff --git a/test/unit/TO-char-forward/selections b/test/unit/TO-char-forward/selections
new file mode 100644
index 00000000..b9f1b3f0
--- /dev/null
+++ b/test/unit/TO-char-forward/selections
@@ -0,0 +1 @@
+bar|
diff --git a/test/unit/UP/cmd b/test/unit/UP/cmd
new file mode 100644
index 00000000..7692e7d4
--- /dev/null
+++ b/test/unit/UP/cmd
@@ -0,0 +1 @@
+K
diff --git a/test/unit/UP/in b/test/unit/UP/in
new file mode 100644
index 00000000..97b4d9dc
--- /dev/null
+++ b/test/unit/UP/in
@@ -0,0 +1,2 @@
+foo
+%(bar)
diff --git a/test/unit/UP/selections b/test/unit/UP/selections
new file mode 100644
index 00000000..031360a8
--- /dev/null
+++ b/test/unit/UP/selections
@@ -0,0 +1,2 @@
+o
+b
diff --git a/test/unit/align/cmd b/test/unit/align/cmd
new file mode 100644
index 00000000..4bd7e7a4
--- /dev/null
+++ b/test/unit/align/cmd
@@ -0,0 +1 @@
+&
diff --git a/test/unit/align/in b/test/unit/align/in
new file mode 100644
index 00000000..a78f25ff
--- /dev/null
+++ b/test/unit/align/in
@@ -0,0 +1,3 @@
+a %(a)
+bb %(b)b
+ccc %(c)cc
diff --git a/test/unit/align/out b/test/unit/align/out
new file mode 100644
index 00000000..d75c3550
--- /dev/null
+++ b/test/unit/align/out
@@ -0,0 +1,3 @@
+a a
+bb bb
+ccc ccc
diff --git a/test/unit/all/cmd b/test/unit/all/cmd
new file mode 100644
index 00000000..314d73bf
--- /dev/null
+++ b/test/unit/all/cmd
@@ -0,0 +1 @@
+%
diff --git a/test/unit/all/in b/test/unit/all/in
new file mode 100644
index 00000000..d68dd403
--- /dev/null
+++ b/test/unit/all/in
@@ -0,0 +1,4 @@
+a
+b
+c
+d
diff --git a/test/unit/all/selections b/test/unit/all/selections
new file mode 100644
index 00000000..8709f804
--- /dev/null
+++ b/test/unit/all/selections
@@ -0,0 +1,5 @@
+a
+b
+c
+d
+
diff --git a/test/unit/append/cmd b/test/unit/append/cmd
new file mode 100644
index 00000000..15bfb21a
--- /dev/null
+++ b/test/unit/append/cmd
@@ -0,0 +1 @@
+append
diff --git a/test/unit/append/in b/test/unit/append/in
new file mode 100644
index 00000000..78981922
--- /dev/null
+++ b/test/unit/append/in
@@ -0,0 +1 @@
+a
diff --git a/test/unit/append/selections b/test/unit/append/selections
new file mode 100644
index 00000000..2591812f
--- /dev/null
+++ b/test/unit/append/selections
@@ -0,0 +1,2 @@
+append
+
diff --git a/test/unit/around/WORD/cmd b/test/unit/around/WORD/cmd
new file mode 100644
index 00000000..2591ecc3
--- /dev/null
+++ b/test/unit/around/WORD/cmd
@@ -0,0 +1 @@
+<a-a>W
diff --git a/test/unit/around/WORD/in b/test/unit/around/WORD/in
new file mode 100644
index 00000000..434f77db
--- /dev/null
+++ b/test/unit/around/WORD/in
@@ -0,0 +1 @@
+foo %(b)ar-baz qux
diff --git a/test/unit/around/WORD/selections b/test/unit/around/WORD/selections
new file mode 100644
index 00000000..d6311946
--- /dev/null
+++ b/test/unit/around/WORD/selections
@@ -0,0 +1 @@
+bar-baz
diff --git a/test/unit/around/angle/cmd b/test/unit/around/angle/cmd
new file mode 100644
index 00000000..43f26e43
--- /dev/null
+++ b/test/unit/around/angle/cmd
@@ -0,0 +1 @@
+<a-a>a
diff --git a/test/unit/around/angle/in b/test/unit/around/angle/in
new file mode 100644
index 00000000..8dea61dd
--- /dev/null
+++ b/test/unit/around/angle/in
@@ -0,0 +1 @@
+#include <%(f)oo>
diff --git a/test/unit/around/angle/selections b/test/unit/around/angle/selections
new file mode 100644
index 00000000..9127b708
--- /dev/null
+++ b/test/unit/around/angle/selections
@@ -0,0 +1 @@
+<foo>
diff --git a/test/unit/around/braces/cmd b/test/unit/around/braces/cmd
new file mode 100644
index 00000000..4effbcef
--- /dev/null
+++ b/test/unit/around/braces/cmd
@@ -0,0 +1 @@
+<a-a>B
diff --git a/test/unit/around/braces/in b/test/unit/around/braces/in
new file mode 100644
index 00000000..b62df918
--- /dev/null
+++ b/test/unit/around/braces/in
@@ -0,0 +1,3 @@
+{
+ "%(foo)": "bar"
+}
diff --git a/test/unit/around/braces/selections b/test/unit/around/braces/selections
new file mode 100644
index 00000000..56cc1e77
--- /dev/null
+++ b/test/unit/around/braces/selections
@@ -0,0 +1,3 @@
+{
+ "foo"\: "bar"
+}
diff --git a/test/unit/around/brackets/cmd b/test/unit/around/brackets/cmd
new file mode 100644
index 00000000..d567e3bd
--- /dev/null
+++ b/test/unit/around/brackets/cmd
@@ -0,0 +1 @@
+<a-a>r
diff --git a/test/unit/around/brackets/in b/test/unit/around/brackets/in
new file mode 100644
index 00000000..286c5fcb
--- /dev/null
+++ b/test/unit/around/brackets/in
@@ -0,0 +1,3 @@
+[
+ "%(foo)"
+]
diff --git a/test/unit/around/brackets/selections b/test/unit/around/brackets/selections
new file mode 100644
index 00000000..de140ba3
--- /dev/null
+++ b/test/unit/around/brackets/selections
@@ -0,0 +1,3 @@
+[
+ "foo"
+]
diff --git a/test/unit/around/double_quote/cmd b/test/unit/around/double_quote/cmd
new file mode 100644
index 00000000..c7d7819b
--- /dev/null
+++ b/test/unit/around/double_quote/cmd
@@ -0,0 +1 @@
+<a-a>Q
diff --git a/test/unit/around/double_quote/in b/test/unit/around/double_quote/in
new file mode 100644
index 00000000..78428f5e
--- /dev/null
+++ b/test/unit/around/double_quote/in
@@ -0,0 +1 @@
+foo("%(b)ar")
diff --git a/test/unit/around/double_quote/selections b/test/unit/around/double_quote/selections
new file mode 100644
index 00000000..196e5879
--- /dev/null
+++ b/test/unit/around/double_quote/selections
@@ -0,0 +1 @@
+"bar"
diff --git a/test/unit/around/grave_quote/cmd b/test/unit/around/grave_quote/cmd
new file mode 100644
index 00000000..28e4cbc1
--- /dev/null
+++ b/test/unit/around/grave_quote/cmd
@@ -0,0 +1 @@
+<a-a>g
diff --git a/test/unit/around/grave_quote/in b/test/unit/around/grave_quote/in
new file mode 100644
index 00000000..6f02c52a
--- /dev/null
+++ b/test/unit/around/grave_quote/in
@@ -0,0 +1 @@
+echo `%(f)oo`
diff --git a/test/unit/around/grave_quote/selections b/test/unit/around/grave_quote/selections
new file mode 100644
index 00000000..347253a0
--- /dev/null
+++ b/test/unit/around/grave_quote/selections
@@ -0,0 +1 @@
+`foo`
diff --git a/test/unit/around/indent/cmd b/test/unit/around/indent/cmd
new file mode 100644
index 00000000..bd04b166
--- /dev/null
+++ b/test/unit/around/indent/cmd
@@ -0,0 +1 @@
+<a-a>i
diff --git a/test/unit/around/indent/in b/test/unit/around/indent/in
new file mode 100644
index 00000000..3d074b01
--- /dev/null
+++ b/test/unit/around/indent/in
@@ -0,0 +1,3 @@
+
+ foo(%(b)ar)
+
diff --git a/test/unit/around/indent/selections b/test/unit/around/indent/selections
new file mode 100644
index 00000000..80196fbb
--- /dev/null
+++ b/test/unit/around/indent/selections
@@ -0,0 +1,4 @@
+
+ foo(bar)
+
+
diff --git a/test/unit/around/paragraph/cmd b/test/unit/around/paragraph/cmd
new file mode 100644
index 00000000..ffefa67d
--- /dev/null
+++ b/test/unit/around/paragraph/cmd
@@ -0,0 +1 @@
+<a-a>p
diff --git a/test/unit/around/paragraph/in b/test/unit/around/paragraph/in
new file mode 100644
index 00000000..0da6451e
--- /dev/null
+++ b/test/unit/around/paragraph/in
@@ -0,0 +1,8 @@
+a
+b
+
+%(c)
+d
+
+e
+f
diff --git a/test/unit/around/paragraph/selections b/test/unit/around/paragraph/selections
new file mode 100644
index 00000000..2887a9d6
--- /dev/null
+++ b/test/unit/around/paragraph/selections
@@ -0,0 +1,4 @@
+c
+d
+
+
diff --git a/test/unit/around/parenthesis/cmd b/test/unit/around/parenthesis/cmd
new file mode 100644
index 00000000..ef7ad10b
--- /dev/null
+++ b/test/unit/around/parenthesis/cmd
@@ -0,0 +1 @@
+<a-a>b
diff --git a/test/unit/around/parenthesis/in b/test/unit/around/parenthesis/in
new file mode 100644
index 00000000..3bea1f71
--- /dev/null
+++ b/test/unit/around/parenthesis/in
@@ -0,0 +1 @@
+foo(%(b)ar)
diff --git a/test/unit/around/parenthesis/selections b/test/unit/around/parenthesis/selections
new file mode 100644
index 00000000..c115b234
--- /dev/null
+++ b/test/unit/around/parenthesis/selections
@@ -0,0 +1 @@
+(bar)
diff --git a/test/unit/around/sentence/cmd b/test/unit/around/sentence/cmd
new file mode 100644
index 00000000..e8d4a543
--- /dev/null
+++ b/test/unit/around/sentence/cmd
@@ -0,0 +1 @@
+<a-a>s
diff --git a/test/unit/around/sentence/in b/test/unit/around/sentence/in
new file mode 100644
index 00000000..006cd705
--- /dev/null
+++ b/test/unit/around/sentence/in
@@ -0,0 +1,6 @@
+%(Lorem ipsum) dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
+incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
+nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore
+eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
+sunt in culpa qui officia deserunt mollit anim id est laborum.
diff --git a/test/unit/around/sentence/selections b/test/unit/around/sentence/selections
new file mode 100644
index 00000000..5dd13409
--- /dev/null
+++ b/test/unit/around/sentence/selections
@@ -0,0 +1,2 @@
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
+incididunt ut labore et dolore magna aliqua.
diff --git a/test/unit/around/single_quote/cmd b/test/unit/around/single_quote/cmd
new file mode 100644
index 00000000..f1d27c25
--- /dev/null
+++ b/test/unit/around/single_quote/cmd
@@ -0,0 +1 @@
+<a-a>q
diff --git a/test/unit/around/single_quote/in b/test/unit/around/single_quote/in
new file mode 100644
index 00000000..ed397c1c
--- /dev/null
+++ b/test/unit/around/single_quote/in
@@ -0,0 +1 @@
+foo('%(b)ar')
diff --git a/test/unit/around/single_quote/selections b/test/unit/around/single_quote/selections
new file mode 100644
index 00000000..2cde735c
--- /dev/null
+++ b/test/unit/around/single_quote/selections
@@ -0,0 +1 @@
+'bar'
diff --git a/test/unit/around/word/cmd b/test/unit/around/word/cmd
new file mode 100644
index 00000000..b11a4948
--- /dev/null
+++ b/test/unit/around/word/cmd
@@ -0,0 +1 @@
+<a-a>w
diff --git a/test/unit/around/word/in b/test/unit/around/word/in
new file mode 100644
index 00000000..e92570ea
--- /dev/null
+++ b/test/unit/around/word/in
@@ -0,0 +1 @@
+foo %(b)ar baz
diff --git a/test/unit/around/word/selections b/test/unit/around/word/selections
new file mode 100644
index 00000000..efe82b7c
--- /dev/null
+++ b/test/unit/around/word/selections
@@ -0,0 +1 @@
+bar
diff --git a/test/unit/change/cmd b/test/unit/change/cmd
new file mode 100644
index 00000000..df39d8ab
--- /dev/null
+++ b/test/unit/change/cmd
@@ -0,0 +1 @@
+cfacile
diff --git a/test/unit/change/in b/test/unit/change/in
new file mode 100644
index 00000000..70cbbb09
--- /dev/null
+++ b/test/unit/change/in
@@ -0,0 +1 @@
+c’est %(difficile).
diff --git a/test/unit/change/out b/test/unit/change/out
new file mode 100644
index 00000000..193d5b5f
--- /dev/null
+++ b/test/unit/change/out
@@ -0,0 +1 @@
+c’est facile.
diff --git a/test/unit/clear-selections/cmd b/test/unit/clear-selections/cmd
new file mode 100644
index 00000000..bc7e1245
--- /dev/null
+++ b/test/unit/clear-selections/cmd
@@ -0,0 +1 @@
+<space>
diff --git a/test/unit/clear-selections/in b/test/unit/clear-selections/in
new file mode 100644
index 00000000..c2267c2e
--- /dev/null
+++ b/test/unit/clear-selections/in
@@ -0,0 +1 @@
+%(foo)
diff --git a/test/unit/clear-selections/selections b/test/unit/clear-selections/selections
new file mode 100644
index 00000000..13e7564e
--- /dev/null
+++ b/test/unit/clear-selections/selections
@@ -0,0 +1 @@
+o
diff --git a/test/unit/concat-delete/cmd b/test/unit/concat-delete/cmd
new file mode 100644
index 00000000..10f19160
--- /dev/null
+++ b/test/unit/concat-delete/cmd
@@ -0,0 +1 @@
+DP
diff --git a/test/unit/concat-delete/in b/test/unit/concat-delete/in
new file mode 100644
index 00000000..5d11abbf
--- /dev/null
+++ b/test/unit/concat-delete/in
@@ -0,0 +1 @@
+-%(foo)-%(bar)-%(baz)-
diff --git a/test/unit/concat-delete/out b/test/unit/concat-delete/out
new file mode 100644
index 00000000..72956b41
--- /dev/null
+++ b/test/unit/concat-delete/out
@@ -0,0 +1 @@
+-foobarbaz-foobarbaz-foobarbaz-
diff --git a/test/unit/concat-yank/cmd b/test/unit/concat-yank/cmd
new file mode 100644
index 00000000..cbfff750
--- /dev/null
+++ b/test/unit/concat-yank/cmd
@@ -0,0 +1 @@
+YP
diff --git a/test/unit/concat-yank/in b/test/unit/concat-yank/in
new file mode 100644
index 00000000..5d11abbf
--- /dev/null
+++ b/test/unit/concat-yank/in
@@ -0,0 +1 @@
+-%(foo)-%(bar)-%(baz)-
diff --git a/test/unit/concat-yank/out b/test/unit/concat-yank/out
new file mode 100644
index 00000000..abc249df
--- /dev/null
+++ b/test/unit/concat-yank/out
@@ -0,0 +1 @@
+-foobarbazfoo-foobarbazbar-foobarbazbaz-
diff --git a/test/unit/convert-tab/cmd b/test/unit/convert-tab/cmd
new file mode 100644
index 00000000..2c7080ed
--- /dev/null
+++ b/test/unit/convert-tab/cmd
@@ -0,0 +1 @@
+%@
diff --git a/test/unit/convert-tab/in b/test/unit/convert-tab/in
new file mode 100644
index 00000000..080d1d4a
--- /dev/null
+++ b/test/unit/convert-tab/in
@@ -0,0 +1,4 @@
+void main()
+{
+ foo();
+}
diff --git a/test/unit/convert-tab/out b/test/unit/convert-tab/out
new file mode 100644
index 00000000..289aca8c
--- /dev/null
+++ b/test/unit/convert-tab/out
@@ -0,0 +1,4 @@
+void main()
+{
+ foo();
+}
diff --git a/test/unit/deindent/cmd b/test/unit/deindent/cmd
new file mode 100644
index 00000000..93184183
--- /dev/null
+++ b/test/unit/deindent/cmd
@@ -0,0 +1 @@
+<
diff --git a/test/unit/deindent/in b/test/unit/deindent/in
new file mode 100644
index 00000000..27be8730
--- /dev/null
+++ b/test/unit/deindent/in
@@ -0,0 +1 @@
+ foo
diff --git a/test/unit/deindent/out b/test/unit/deindent/out
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/test/unit/deindent/out
@@ -0,0 +1 @@
+foo
diff --git a/test/unit/delete/cmd b/test/unit/delete/cmd
new file mode 100644
index 00000000..4bcfe98e
--- /dev/null
+++ b/test/unit/delete/cmd
@@ -0,0 +1 @@
+d
diff --git a/test/unit/delete/in b/test/unit/delete/in
new file mode 100644
index 00000000..a3133ea2
--- /dev/null
+++ b/test/unit/delete/in
@@ -0,0 +1 @@
+foo %(bar) baz
diff --git a/test/unit/delete/out b/test/unit/delete/out
new file mode 100644
index 00000000..1d050817
--- /dev/null
+++ b/test/unit/delete/out
@@ -0,0 +1 @@
+foo baz
diff --git a/test/unit/down/cmd b/test/unit/down/cmd
new file mode 100644
index 00000000..4c559f78
--- /dev/null
+++ b/test/unit/down/cmd
@@ -0,0 +1 @@
+j
diff --git a/test/unit/down/in b/test/unit/down/in
new file mode 100644
index 00000000..d2784210
--- /dev/null
+++ b/test/unit/down/in
@@ -0,0 +1,2 @@
+%(foo)
+bar
diff --git a/test/unit/down/selections b/test/unit/down/selections
new file mode 100644
index 00000000..4286f428
--- /dev/null
+++ b/test/unit/down/selections
@@ -0,0 +1 @@
+r
diff --git a/test/unit/end/WORD/cmd b/test/unit/end/WORD/cmd
new file mode 100644
index 00000000..cd1b8fb2
--- /dev/null
+++ b/test/unit/end/WORD/cmd
@@ -0,0 +1 @@
+]W
diff --git a/test/unit/end/WORD/in b/test/unit/end/WORD/in
new file mode 100644
index 00000000..434f77db
--- /dev/null
+++ b/test/unit/end/WORD/in
@@ -0,0 +1 @@
+foo %(b)ar-baz qux
diff --git a/test/unit/end/WORD/selections b/test/unit/end/WORD/selections
new file mode 100644
index 00000000..d6311946
--- /dev/null
+++ b/test/unit/end/WORD/selections
@@ -0,0 +1 @@
+bar-baz
diff --git a/test/unit/end/angle/cmd b/test/unit/end/angle/cmd
new file mode 100644
index 00000000..6e1ab229
--- /dev/null
+++ b/test/unit/end/angle/cmd
@@ -0,0 +1 @@
+]a
diff --git a/test/unit/end/angle/in b/test/unit/end/angle/in
new file mode 100644
index 00000000..4cdc8cdb
--- /dev/null
+++ b/test/unit/end/angle/in
@@ -0,0 +1 @@
+x > y
diff --git a/test/unit/end/angle/selections b/test/unit/end/angle/selections
new file mode 100644
index 00000000..286188d9
--- /dev/null
+++ b/test/unit/end/angle/selections
@@ -0,0 +1 @@
+x >
diff --git a/test/unit/end/braces/cmd b/test/unit/end/braces/cmd
new file mode 100644
index 00000000..925126c3
--- /dev/null
+++ b/test/unit/end/braces/cmd
@@ -0,0 +1 @@
+]B
diff --git a/test/unit/end/braces/in b/test/unit/end/braces/in
new file mode 100644
index 00000000..a9364d05
--- /dev/null
+++ b/test/unit/end/braces/in
@@ -0,0 +1 @@
+kak unit/test/%({)cmd,in,out}
diff --git a/test/unit/end/braces/selections b/test/unit/end/braces/selections
new file mode 100644
index 00000000..55b26550
--- /dev/null
+++ b/test/unit/end/braces/selections
@@ -0,0 +1 @@
+{cmd,in,out}
diff --git a/test/unit/end/brackets/cmd b/test/unit/end/brackets/cmd
new file mode 100644
index 00000000..2315da45
--- /dev/null
+++ b/test/unit/end/brackets/cmd
@@ -0,0 +1 @@
+]r
diff --git a/test/unit/end/brackets/in b/test/unit/end/brackets/in
new file mode 100644
index 00000000..ba79b8fd
--- /dev/null
+++ b/test/unit/end/brackets/in
@@ -0,0 +1 @@
+[1,%(2),3]
diff --git a/test/unit/end/brackets/selections b/test/unit/end/brackets/selections
new file mode 100644
index 00000000..7d4681a1
--- /dev/null
+++ b/test/unit/end/brackets/selections
@@ -0,0 +1 @@
+2,3]
diff --git a/test/unit/end/double_quote/cmd b/test/unit/end/double_quote/cmd
new file mode 100644
index 00000000..34c70e47
--- /dev/null
+++ b/test/unit/end/double_quote/cmd
@@ -0,0 +1 @@
+]Q
diff --git a/test/unit/end/double_quote/in b/test/unit/end/double_quote/in
new file mode 100644
index 00000000..78428f5e
--- /dev/null
+++ b/test/unit/end/double_quote/in
@@ -0,0 +1 @@
+foo("%(b)ar")
diff --git a/test/unit/end/double_quote/selections b/test/unit/end/double_quote/selections
new file mode 100644
index 00000000..d9f07fc6
--- /dev/null
+++ b/test/unit/end/double_quote/selections
@@ -0,0 +1 @@
+bar"
diff --git a/test/unit/end/grave_quote/cmd b/test/unit/end/grave_quote/cmd
new file mode 100644
index 00000000..d586a9f6
--- /dev/null
+++ b/test/unit/end/grave_quote/cmd
@@ -0,0 +1 @@
+]g
diff --git a/test/unit/end/grave_quote/in b/test/unit/end/grave_quote/in
new file mode 100644
index 00000000..5601c8fd
--- /dev/null
+++ b/test/unit/end/grave_quote/in
@@ -0,0 +1 @@
+`%(f)oo`
diff --git a/test/unit/end/grave_quote/selections b/test/unit/end/grave_quote/selections
new file mode 100644
index 00000000..b380d541
--- /dev/null
+++ b/test/unit/end/grave_quote/selections
@@ -0,0 +1 @@
+foo`
diff --git a/test/unit/end/indent/cmd b/test/unit/end/indent/cmd
new file mode 100644
index 00000000..9db4a74d
--- /dev/null
+++ b/test/unit/end/indent/cmd
@@ -0,0 +1 @@
+]i
diff --git a/test/unit/end/indent/in b/test/unit/end/indent/in
new file mode 100644
index 00000000..3d074b01
--- /dev/null
+++ b/test/unit/end/indent/in
@@ -0,0 +1,3 @@
+
+ foo(%(b)ar)
+
diff --git a/test/unit/end/indent/selections b/test/unit/end/indent/selections
new file mode 100644
index 00000000..2bd77fd4
--- /dev/null
+++ b/test/unit/end/indent/selections
@@ -0,0 +1,3 @@
+ foo(bar)
+
+
diff --git a/test/unit/end/paragraph/cmd b/test/unit/end/paragraph/cmd
new file mode 100644
index 00000000..4c2699d6
--- /dev/null
+++ b/test/unit/end/paragraph/cmd
@@ -0,0 +1 @@
+]p
diff --git a/test/unit/end/paragraph/in b/test/unit/end/paragraph/in
new file mode 100644
index 00000000..0da6451e
--- /dev/null
+++ b/test/unit/end/paragraph/in
@@ -0,0 +1,8 @@
+a
+b
+
+%(c)
+d
+
+e
+f
diff --git a/test/unit/end/paragraph/selections b/test/unit/end/paragraph/selections
new file mode 100644
index 00000000..2887a9d6
--- /dev/null
+++ b/test/unit/end/paragraph/selections
@@ -0,0 +1,4 @@
+c
+d
+
+
diff --git a/test/unit/end/parenthesis/cmd b/test/unit/end/parenthesis/cmd
new file mode 100644
index 00000000..a76dfa55
--- /dev/null
+++ b/test/unit/end/parenthesis/cmd
@@ -0,0 +1 @@
+]b
diff --git a/test/unit/end/parenthesis/in b/test/unit/end/parenthesis/in
new file mode 100644
index 00000000..3bea1f71
--- /dev/null
+++ b/test/unit/end/parenthesis/in
@@ -0,0 +1 @@
+foo(%(b)ar)
diff --git a/test/unit/end/parenthesis/selections b/test/unit/end/parenthesis/selections
new file mode 100644
index 00000000..05b3995d
--- /dev/null
+++ b/test/unit/end/parenthesis/selections
@@ -0,0 +1 @@
+bar)
diff --git a/test/unit/end/sentence/cmd b/test/unit/end/sentence/cmd
new file mode 100644
index 00000000..4455bbd8
--- /dev/null
+++ b/test/unit/end/sentence/cmd
@@ -0,0 +1 @@
+]s
diff --git a/test/unit/end/sentence/in b/test/unit/end/sentence/in
new file mode 100644
index 00000000..78d87ba0
--- /dev/null
+++ b/test/unit/end/sentence/in
@@ -0,0 +1,6 @@
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
+incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
+nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore
+eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
+sunt in culpa qui officia deserunt mollit anim id est laborum.
diff --git a/test/unit/end/sentence/selections b/test/unit/end/sentence/selections
new file mode 100644
index 00000000..5dd13409
--- /dev/null
+++ b/test/unit/end/sentence/selections
@@ -0,0 +1,2 @@
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
+incididunt ut labore et dolore magna aliqua.
diff --git a/test/unit/end/single_quote/cmd b/test/unit/end/single_quote/cmd
new file mode 100644
index 00000000..d6451c59
--- /dev/null
+++ b/test/unit/end/single_quote/cmd
@@ -0,0 +1 @@
+]q
diff --git a/test/unit/end/single_quote/in b/test/unit/end/single_quote/in
new file mode 100644
index 00000000..ed397c1c
--- /dev/null
+++ b/test/unit/end/single_quote/in
@@ -0,0 +1 @@
+foo('%(b)ar')
diff --git a/test/unit/end/single_quote/selections b/test/unit/end/single_quote/selections
new file mode 100644
index 00000000..7ca0922b
--- /dev/null
+++ b/test/unit/end/single_quote/selections
@@ -0,0 +1 @@
+bar'
diff --git a/test/unit/end/word/cmd b/test/unit/end/word/cmd
new file mode 100644
index 00000000..9366578e
--- /dev/null
+++ b/test/unit/end/word/cmd
@@ -0,0 +1 @@
+]w
diff --git a/test/unit/end/word/in b/test/unit/end/word/in
new file mode 100644
index 00000000..e92570ea
--- /dev/null
+++ b/test/unit/end/word/in
@@ -0,0 +1 @@
+foo %(b)ar baz
diff --git a/test/unit/end/word/selections b/test/unit/end/word/selections
new file mode 100644
index 00000000..efe82b7c
--- /dev/null
+++ b/test/unit/end/word/selections
@@ -0,0 +1 @@
+bar
diff --git a/test/unit/find-char-backward/cmd b/test/unit/find-char-backward/cmd
new file mode 100644
index 00000000..8fda5ff2
--- /dev/null
+++ b/test/unit/find-char-backward/cmd
@@ -0,0 +1 @@
+<a-f>|
diff --git a/test/unit/find-char-backward/in b/test/unit/find-char-backward/in
new file mode 100644
index 00000000..1da8fdf7
--- /dev/null
+++ b/test/unit/find-char-backward/in
@@ -0,0 +1 @@
+foo|%(bar)|baz
diff --git a/test/unit/find-char-backward/selections b/test/unit/find-char-backward/selections
new file mode 100644
index 00000000..cecd2dec
--- /dev/null
+++ b/test/unit/find-char-backward/selections
@@ -0,0 +1 @@
+|bar
diff --git a/test/unit/find-char-forward/cmd b/test/unit/find-char-forward/cmd
new file mode 100644
index 00000000..2e42ae55
--- /dev/null
+++ b/test/unit/find-char-forward/cmd
@@ -0,0 +1 @@
+f|
diff --git a/test/unit/find-char-forward/in b/test/unit/find-char-forward/in
new file mode 100644
index 00000000..1da8fdf7
--- /dev/null
+++ b/test/unit/find-char-forward/in
@@ -0,0 +1 @@
+foo|%(bar)|baz
diff --git a/test/unit/find-char-forward/selections b/test/unit/find-char-forward/selections
new file mode 100644
index 00000000..46e2eef4
--- /dev/null
+++ b/test/unit/find-char-forward/selections
@@ -0,0 +1 @@
+r|
diff --git a/test/unit/goto/buffer-bottom/cmd b/test/unit/goto/buffer-bottom/cmd
new file mode 100644
index 00000000..502a6516
--- /dev/null
+++ b/test/unit/goto/buffer-bottom/cmd
@@ -0,0 +1 @@
+gj
diff --git a/test/unit/goto/buffer-bottom/in b/test/unit/goto/buffer-bottom/in
new file mode 100644
index 00000000..2351e040
--- /dev/null
+++ b/test/unit/goto/buffer-bottom/in
@@ -0,0 +1,3 @@
+foo
+%(bar)
+baz
diff --git a/test/unit/goto/buffer-bottom/selections b/test/unit/goto/buffer-bottom/selections
new file mode 100644
index 00000000..61780798
--- /dev/null
+++ b/test/unit/goto/buffer-bottom/selections
@@ -0,0 +1 @@
+b
diff --git a/test/unit/goto/buffer-end/cmd b/test/unit/goto/buffer-end/cmd
new file mode 100644
index 00000000..0213bebe
--- /dev/null
+++ b/test/unit/goto/buffer-end/cmd
@@ -0,0 +1 @@
+ge
diff --git a/test/unit/goto/buffer-end/in b/test/unit/goto/buffer-end/in
new file mode 100644
index 00000000..2351e040
--- /dev/null
+++ b/test/unit/goto/buffer-end/in
@@ -0,0 +1,3 @@
+foo
+%(bar)
+baz
diff --git a/test/unit/goto/buffer-end/selections b/test/unit/goto/buffer-end/selections
new file mode 100644
index 00000000..139597f9
--- /dev/null
+++ b/test/unit/goto/buffer-end/selections
@@ -0,0 +1,2 @@
+
+
diff --git a/test/unit/goto/buffer-top/cmd b/test/unit/goto/buffer-top/cmd
new file mode 100644
index 00000000..0706cc4e
--- /dev/null
+++ b/test/unit/goto/buffer-top/cmd
@@ -0,0 +1 @@
+gk
diff --git a/test/unit/goto/buffer-top/in b/test/unit/goto/buffer-top/in
new file mode 100644
index 00000000..2351e040
--- /dev/null
+++ b/test/unit/goto/buffer-top/in
@@ -0,0 +1,3 @@
+foo
+%(bar)
+baz
diff --git a/test/unit/goto/buffer-top/selections b/test/unit/goto/buffer-top/selections
new file mode 100644
index 00000000..6a69f920
--- /dev/null
+++ b/test/unit/goto/buffer-top/selections
@@ -0,0 +1 @@
+f
diff --git a/test/unit/goto/file/cmd b/test/unit/goto/file/cmd
new file mode 100644
index 00000000..830bc9c3
--- /dev/null
+++ b/test/unit/goto/file/cmd
@@ -0,0 +1 @@
+gf
diff --git a/test/unit/goto/file/in b/test/unit/goto/file/in
new file mode 100644
index 00000000..66f264ef
--- /dev/null
+++ b/test/unit/goto/file/in
@@ -0,0 +1 @@
+%(goto-file)
diff --git a/test/unit/goto/file/out b/test/unit/goto/file/out
new file mode 100644
index 00000000..2ae28399
--- /dev/null
+++ b/test/unit/goto/file/out
@@ -0,0 +1 @@
+pass
diff --git a/test/unit/goto/file/rc b/test/unit/goto/file/rc
new file mode 100644
index 00000000..0ca690fb
--- /dev/null
+++ b/test/unit/goto/file/rc
@@ -0,0 +1 @@
+nop %sh{ printf pass > goto-file }
diff --git a/test/unit/goto/last-buffer/cmd b/test/unit/goto/last-buffer/cmd
new file mode 100644
index 00000000..31334094
--- /dev/null
+++ b/test/unit/goto/last-buffer/cmd
@@ -0,0 +1 @@
+ga
diff --git a/test/unit/goto/last-buffer/out b/test/unit/goto/last-buffer/out
new file mode 100644
index 00000000..93b5153d
--- /dev/null
+++ b/test/unit/goto/last-buffer/out
@@ -0,0 +1 @@
+last-buffer
diff --git a/test/unit/goto/last-buffer/rc b/test/unit/goto/last-buffer/rc
new file mode 100644
index 00000000..739962c8
--- /dev/null
+++ b/test/unit/goto/last-buffer/rc
@@ -0,0 +1,3 @@
+nop %sh{ printf last-buffer > last-buffer }
+
+edit last-buffer
diff --git a/test/unit/goto/last-change/cmd b/test/unit/goto/last-change/cmd
new file mode 100644
index 00000000..70a8a16d
--- /dev/null
+++ b/test/unit/goto/last-change/cmd
@@ -0,0 +1 @@
+dggg.
diff --git a/test/unit/goto/last-change/in b/test/unit/goto/last-change/in
new file mode 100644
index 00000000..2351e040
--- /dev/null
+++ b/test/unit/goto/last-change/in
@@ -0,0 +1,3 @@
+foo
+%(bar)
+baz
diff --git a/test/unit/goto/last-change/selections b/test/unit/goto/last-change/selections
new file mode 100644
index 00000000..139597f9
--- /dev/null
+++ b/test/unit/goto/last-change/selections
@@ -0,0 +1,2 @@
+
+
diff --git a/test/unit/goto/line-begin/cmd b/test/unit/goto/line-begin/cmd
new file mode 100644
index 00000000..7f8d49f4
--- /dev/null
+++ b/test/unit/goto/line-begin/cmd
@@ -0,0 +1 @@
+gh
diff --git a/test/unit/goto/line-begin/in b/test/unit/goto/line-begin/in
new file mode 100644
index 00000000..a3133ea2
--- /dev/null
+++ b/test/unit/goto/line-begin/in
@@ -0,0 +1 @@
+foo %(bar) baz
diff --git a/test/unit/goto/line-begin/selections b/test/unit/goto/line-begin/selections
new file mode 100644
index 00000000..d675fa44
--- /dev/null
+++ b/test/unit/goto/line-begin/selections
@@ -0,0 +1 @@
+foo bar
diff --git a/test/unit/goto/line-end/cmd b/test/unit/goto/line-end/cmd
new file mode 100644
index 00000000..f13d7ddb
--- /dev/null
+++ b/test/unit/goto/line-end/cmd
@@ -0,0 +1 @@
+gl
diff --git a/test/unit/goto/line-end/in b/test/unit/goto/line-end/in
new file mode 100644
index 00000000..a3133ea2
--- /dev/null
+++ b/test/unit/goto/line-end/in
@@ -0,0 +1 @@
+foo %(bar) baz
diff --git a/test/unit/goto/line-end/selections b/test/unit/goto/line-end/selections
new file mode 100644
index 00000000..9bbfcc04
--- /dev/null
+++ b/test/unit/goto/line-end/selections
@@ -0,0 +1 @@
+r baz
diff --git a/test/unit/goto/window-bottom/README b/test/unit/goto/window-bottom/README
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/test/unit/goto/window-bottom/README
diff --git a/test/unit/goto/window-center/README b/test/unit/goto/window-center/README
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/test/unit/goto/window-center/README
diff --git a/test/unit/goto/window-top/README b/test/unit/goto/window-top/README
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/test/unit/goto/window-top/README
diff --git a/test/unit/indent/cmd b/test/unit/indent/cmd
new file mode 100644
index 00000000..93184183
--- /dev/null
+++ b/test/unit/indent/cmd
@@ -0,0 +1 @@
+<
diff --git a/test/unit/indent/in b/test/unit/indent/in
new file mode 100644
index 00000000..ad05e7c9
--- /dev/null
+++ b/test/unit/indent/in
@@ -0,0 +1 @@
+ %(foo)
diff --git a/test/unit/indent/out b/test/unit/indent/out
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/test/unit/indent/out
@@ -0,0 +1 @@
+foo
diff --git a/test/unit/inner/WORD/cmd b/test/unit/inner/WORD/cmd
new file mode 100644
index 00000000..12d2f19a
--- /dev/null
+++ b/test/unit/inner/WORD/cmd
@@ -0,0 +1 @@
+<a-i>W
diff --git a/test/unit/inner/WORD/in b/test/unit/inner/WORD/in
new file mode 100644
index 00000000..434f77db
--- /dev/null
+++ b/test/unit/inner/WORD/in
@@ -0,0 +1 @@
+foo %(b)ar-baz qux
diff --git a/test/unit/inner/WORD/selections b/test/unit/inner/WORD/selections
new file mode 100644
index 00000000..8965d2e8
--- /dev/null
+++ b/test/unit/inner/WORD/selections
@@ -0,0 +1 @@
+bar-baz
diff --git a/test/unit/inner/angle/cmd b/test/unit/inner/angle/cmd
new file mode 100644
index 00000000..21bc39d0
--- /dev/null
+++ b/test/unit/inner/angle/cmd
@@ -0,0 +1 @@
+<a-i>a
diff --git a/test/unit/inner/angle/in b/test/unit/inner/angle/in
new file mode 100644
index 00000000..8dea61dd
--- /dev/null
+++ b/test/unit/inner/angle/in
@@ -0,0 +1 @@
+#include <%(f)oo>
diff --git a/test/unit/inner/angle/selections b/test/unit/inner/angle/selections
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/test/unit/inner/angle/selections
@@ -0,0 +1 @@
+foo
diff --git a/test/unit/inner/braces/cmd b/test/unit/inner/braces/cmd
new file mode 100644
index 00000000..4effbcef
--- /dev/null
+++ b/test/unit/inner/braces/cmd
@@ -0,0 +1 @@
+<a-a>B
diff --git a/test/unit/inner/braces/in b/test/unit/inner/braces/in
new file mode 100644
index 00000000..b62df918
--- /dev/null
+++ b/test/unit/inner/braces/in
@@ -0,0 +1,3 @@
+{
+ "%(foo)": "bar"
+}
diff --git a/test/unit/inner/braces/selections b/test/unit/inner/braces/selections
new file mode 100644
index 00000000..953b7f6e
--- /dev/null
+++ b/test/unit/inner/braces/selections
@@ -0,0 +1,2 @@
+
+ "foo": "bar"
diff --git a/test/unit/inner/brackets/cmd b/test/unit/inner/brackets/cmd
new file mode 100644
index 00000000..d567e3bd
--- /dev/null
+++ b/test/unit/inner/brackets/cmd
@@ -0,0 +1 @@
+<a-a>r
diff --git a/test/unit/inner/brackets/in b/test/unit/inner/brackets/in
new file mode 100644
index 00000000..286c5fcb
--- /dev/null
+++ b/test/unit/inner/brackets/in
@@ -0,0 +1,3 @@
+[
+ "%(foo)"
+]
diff --git a/test/unit/inner/brackets/selections b/test/unit/inner/brackets/selections
new file mode 100644
index 00000000..cf0461e8
--- /dev/null
+++ b/test/unit/inner/brackets/selections
@@ -0,0 +1,2 @@
+
+ "foo"
diff --git a/test/unit/inner/double_quote/cmd b/test/unit/inner/double_quote/cmd
new file mode 100644
index 00000000..1f62c901
--- /dev/null
+++ b/test/unit/inner/double_quote/cmd
@@ -0,0 +1 @@
+<a-i>Q
diff --git a/test/unit/inner/double_quote/in b/test/unit/inner/double_quote/in
new file mode 100644
index 00000000..78428f5e
--- /dev/null
+++ b/test/unit/inner/double_quote/in
@@ -0,0 +1 @@
+foo("%(b)ar")
diff --git a/test/unit/inner/double_quote/selections b/test/unit/inner/double_quote/selections
new file mode 100644
index 00000000..5716ca59
--- /dev/null
+++ b/test/unit/inner/double_quote/selections
@@ -0,0 +1 @@
+bar
diff --git a/test/unit/inner/grave_quote/cmd b/test/unit/inner/grave_quote/cmd
new file mode 100644
index 00000000..1234f5e0
--- /dev/null
+++ b/test/unit/inner/grave_quote/cmd
@@ -0,0 +1 @@
+<a-i>g
diff --git a/test/unit/inner/grave_quote/in b/test/unit/inner/grave_quote/in
new file mode 100644
index 00000000..6f02c52a
--- /dev/null
+++ b/test/unit/inner/grave_quote/in
@@ -0,0 +1 @@
+echo `%(f)oo`
diff --git a/test/unit/inner/grave_quote/selections b/test/unit/inner/grave_quote/selections
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/test/unit/inner/grave_quote/selections
@@ -0,0 +1 @@
+foo
diff --git a/test/unit/inner/indent/cmd b/test/unit/inner/indent/cmd
new file mode 100644
index 00000000..c304fd98
--- /dev/null
+++ b/test/unit/inner/indent/cmd
@@ -0,0 +1 @@
+<a-i>i
diff --git a/test/unit/inner/indent/in b/test/unit/inner/indent/in
new file mode 100644
index 00000000..3d074b01
--- /dev/null
+++ b/test/unit/inner/indent/in
@@ -0,0 +1,3 @@
+
+ foo(%(b)ar)
+
diff --git a/test/unit/inner/indent/selections b/test/unit/inner/indent/selections
new file mode 100644
index 00000000..ffb60196
--- /dev/null
+++ b/test/unit/inner/indent/selections
@@ -0,0 +1,2 @@
+ foo(bar)
+
diff --git a/test/unit/inner/paragraph/cmd b/test/unit/inner/paragraph/cmd
new file mode 100644
index 00000000..0e41c9b5
--- /dev/null
+++ b/test/unit/inner/paragraph/cmd
@@ -0,0 +1 @@
+<a-i>p
diff --git a/test/unit/inner/paragraph/in b/test/unit/inner/paragraph/in
new file mode 100644
index 00000000..0da6451e
--- /dev/null
+++ b/test/unit/inner/paragraph/in
@@ -0,0 +1,8 @@
+a
+b
+
+%(c)
+d
+
+e
+f
diff --git a/test/unit/inner/paragraph/selections b/test/unit/inner/paragraph/selections
new file mode 100644
index 00000000..4cdfd2ac
--- /dev/null
+++ b/test/unit/inner/paragraph/selections
@@ -0,0 +1,3 @@
+c
+d
+
diff --git a/test/unit/inner/parenthesis/cmd b/test/unit/inner/parenthesis/cmd
new file mode 100644
index 00000000..4509b477
--- /dev/null
+++ b/test/unit/inner/parenthesis/cmd
@@ -0,0 +1 @@
+<a-i>b
diff --git a/test/unit/inner/parenthesis/in b/test/unit/inner/parenthesis/in
new file mode 100644
index 00000000..3bea1f71
--- /dev/null
+++ b/test/unit/inner/parenthesis/in
@@ -0,0 +1 @@
+foo(%(b)ar)
diff --git a/test/unit/inner/parenthesis/selections b/test/unit/inner/parenthesis/selections
new file mode 100644
index 00000000..5716ca59
--- /dev/null
+++ b/test/unit/inner/parenthesis/selections
@@ -0,0 +1 @@
+bar
diff --git a/test/unit/inner/sentence/cmd b/test/unit/inner/sentence/cmd
new file mode 100644
index 00000000..19bf3855
--- /dev/null
+++ b/test/unit/inner/sentence/cmd
@@ -0,0 +1 @@
+<a-i>s
diff --git a/test/unit/inner/sentence/in b/test/unit/inner/sentence/in
new file mode 100644
index 00000000..006cd705
--- /dev/null
+++ b/test/unit/inner/sentence/in
@@ -0,0 +1,6 @@
+%(Lorem ipsum) dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
+incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
+nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore
+eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
+sunt in culpa qui officia deserunt mollit anim id est laborum.
diff --git a/test/unit/inner/sentence/selections b/test/unit/inner/sentence/selections
new file mode 100644
index 00000000..dd3c7d70
--- /dev/null
+++ b/test/unit/inner/sentence/selections
@@ -0,0 +1,2 @@
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
+incididunt ut labore et dolore magna aliqua.
diff --git a/test/unit/inner/single_quote/cmd b/test/unit/inner/single_quote/cmd
new file mode 100644
index 00000000..2c023626
--- /dev/null
+++ b/test/unit/inner/single_quote/cmd
@@ -0,0 +1 @@
+<a-i>q
diff --git a/test/unit/inner/single_quote/in b/test/unit/inner/single_quote/in
new file mode 100644
index 00000000..ed397c1c
--- /dev/null
+++ b/test/unit/inner/single_quote/in
@@ -0,0 +1 @@
+foo('%(b)ar')
diff --git a/test/unit/inner/single_quote/selections b/test/unit/inner/single_quote/selections
new file mode 100644
index 00000000..5716ca59
--- /dev/null
+++ b/test/unit/inner/single_quote/selections
@@ -0,0 +1 @@
+bar
diff --git a/test/unit/inner/word/cmd b/test/unit/inner/word/cmd
new file mode 100644
index 00000000..377e885f
--- /dev/null
+++ b/test/unit/inner/word/cmd
@@ -0,0 +1 @@
+<a-i>w
diff --git a/test/unit/inner/word/in b/test/unit/inner/word/in
new file mode 100644
index 00000000..e92570ea
--- /dev/null
+++ b/test/unit/inner/word/in
@@ -0,0 +1 @@
+foo %(b)ar baz
diff --git a/test/unit/inner/word/selections b/test/unit/inner/word/selections
new file mode 100644
index 00000000..5716ca59
--- /dev/null
+++ b/test/unit/inner/word/selections
@@ -0,0 +1 @@
+bar
diff --git a/test/unit/insert/cmd b/test/unit/insert/cmd
new file mode 100644
index 00000000..e45f8679
--- /dev/null
+++ b/test/unit/insert/cmd
@@ -0,0 +1 @@
+iinser
diff --git a/test/unit/insert/in b/test/unit/insert/in
new file mode 100644
index 00000000..718f4d2f
--- /dev/null
+++ b/test/unit/insert/in
@@ -0,0 +1 @@
+t
diff --git a/test/unit/insert/out b/test/unit/insert/out
new file mode 100644
index 00000000..bf112e11
--- /dev/null
+++ b/test/unit/insert/out
@@ -0,0 +1 @@
+insert
diff --git a/test/unit/left/cmd b/test/unit/left/cmd
new file mode 100644
index 00000000..6e9f0da1
--- /dev/null
+++ b/test/unit/left/cmd
@@ -0,0 +1 @@
+h
diff --git a/test/unit/left/in b/test/unit/left/in
new file mode 100644
index 00000000..f1cf5ad7
--- /dev/null
+++ b/test/unit/left/in
@@ -0,0 +1 @@
+foo %(bar)
diff --git a/test/unit/left/selections b/test/unit/left/selections
new file mode 100644
index 00000000..78981922
--- /dev/null
+++ b/test/unit/left/selections
@@ -0,0 +1 @@
+a
diff --git a/test/unit/lower-case/cmd b/test/unit/lower-case/cmd
new file mode 100644
index 00000000..b37663f1
--- /dev/null
+++ b/test/unit/lower-case/cmd
@@ -0,0 +1 @@
+`
diff --git a/test/unit/lower-case/in b/test/unit/lower-case/in
new file mode 100644
index 00000000..23a4b635
--- /dev/null
+++ b/test/unit/lower-case/in
@@ -0,0 +1 @@
+%(FOO)
diff --git a/test/unit/lower-case/selections b/test/unit/lower-case/selections
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/test/unit/lower-case/selections
@@ -0,0 +1 @@
+foo
diff --git a/test/unit/match-char/cmd b/test/unit/match-char/cmd
new file mode 100644
index 00000000..28ce6a8b
--- /dev/null
+++ b/test/unit/match-char/cmd
@@ -0,0 +1 @@
+m
diff --git a/test/unit/match-char/in b/test/unit/match-char/in
new file mode 100644
index 00000000..b1355e16
--- /dev/null
+++ b/test/unit/match-char/in
@@ -0,0 +1,3 @@
+add(a, %(b)) {
+ return a and b
+}
diff --git a/test/unit/match-char/selections b/test/unit/match-char/selections
new file mode 100644
index 00000000..75e0e0c5
--- /dev/null
+++ b/test/unit/match-char/selections
@@ -0,0 +1 @@
+(a, b)
diff --git a/test/unit/next-WORD/cmd b/test/unit/next-WORD/cmd
new file mode 100644
index 00000000..e06483d4
--- /dev/null
+++ b/test/unit/next-WORD/cmd
@@ -0,0 +1 @@
+<a-w>
diff --git a/test/unit/next-WORD/in b/test/unit/next-WORD/in
new file mode 100644
index 00000000..434f77db
--- /dev/null
+++ b/test/unit/next-WORD/in
@@ -0,0 +1 @@
+foo %(b)ar-baz qux
diff --git a/test/unit/next-WORD/selections b/test/unit/next-WORD/selections
new file mode 100644
index 00000000..d6311946
--- /dev/null
+++ b/test/unit/next-WORD/selections
@@ -0,0 +1 @@
+bar-baz
diff --git a/test/unit/next-match/cmd b/test/unit/next-match/cmd
new file mode 100644
index 00000000..8ba3a163
--- /dev/null
+++ b/test/unit/next-match/cmd
@@ -0,0 +1 @@
+n
diff --git a/test/unit/next-match/in b/test/unit/next-match/in
new file mode 100644
index 00000000..7168be78
--- /dev/null
+++ b/test/unit/next-match/in
@@ -0,0 +1 @@
+%(foo) bar
diff --git a/test/unit/next-match/rc b/test/unit/next-match/rc
new file mode 100644
index 00000000..1d1241c7
--- /dev/null
+++ b/test/unit/next-match/rc
@@ -0,0 +1 @@
+reg / [a-z]+
diff --git a/test/unit/next-match/selections b/test/unit/next-match/selections
new file mode 100644
index 00000000..5716ca59
--- /dev/null
+++ b/test/unit/next-match/selections
@@ -0,0 +1 @@
+bar
diff --git a/test/unit/next-word/cmd b/test/unit/next-word/cmd
new file mode 100644
index 00000000..e556b830
--- /dev/null
+++ b/test/unit/next-word/cmd
@@ -0,0 +1 @@
+w
diff --git a/test/unit/next-word/in b/test/unit/next-word/in
new file mode 100644
index 00000000..e92570ea
--- /dev/null
+++ b/test/unit/next-word/in
@@ -0,0 +1 @@
+foo %(b)ar baz
diff --git a/test/unit/next-word/selections b/test/unit/next-word/selections
new file mode 100644
index 00000000..efe82b7c
--- /dev/null
+++ b/test/unit/next-word/selections
@@ -0,0 +1 @@
+bar
diff --git a/test/unit/open-above/cmd b/test/unit/open-above/cmd
new file mode 100644
index 00000000..2638c45f
--- /dev/null
+++ b/test/unit/open-above/cmd
@@ -0,0 +1 @@
+O
diff --git a/test/unit/open-above/in b/test/unit/open-above/in
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/test/unit/open-above/in
@@ -0,0 +1 @@
+foo
diff --git a/test/unit/open-above/out b/test/unit/open-above/out
new file mode 100644
index 00000000..3f808fe6
--- /dev/null
+++ b/test/unit/open-above/out
@@ -0,0 +1,2 @@
+
+foo
diff --git a/test/unit/open-below/cmd b/test/unit/open-below/cmd
new file mode 100644
index 00000000..13e7564e
--- /dev/null
+++ b/test/unit/open-below/cmd
@@ -0,0 +1 @@
+o
diff --git a/test/unit/open-below/in b/test/unit/open-below/in
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/test/unit/open-below/in
@@ -0,0 +1 @@
+foo
diff --git a/test/unit/open-below/out b/test/unit/open-below/out
new file mode 100644
index 00000000..75d7bfb8
--- /dev/null
+++ b/test/unit/open-below/out
@@ -0,0 +1,2 @@
+foo
+
diff --git a/test/unit/paste-after/cmd b/test/unit/paste-after/cmd
new file mode 100644
index 00000000..4425e486
--- /dev/null
+++ b/test/unit/paste-after/cmd
@@ -0,0 +1 @@
+dp
diff --git a/test/unit/paste-after/in b/test/unit/paste-after/in
new file mode 100644
index 00000000..40b93200
--- /dev/null
+++ b/test/unit/paste-after/in
@@ -0,0 +1 @@
+-foo%(bar)-
diff --git a/test/unit/paste-after/out b/test/unit/paste-after/out
new file mode 100644
index 00000000..31660f25
--- /dev/null
+++ b/test/unit/paste-after/out
@@ -0,0 +1 @@
+-foo-bar
diff --git a/test/unit/paste-before/cmd b/test/unit/paste-before/cmd
new file mode 100644
index 00000000..8b6fcbb3
--- /dev/null
+++ b/test/unit/paste-before/cmd
@@ -0,0 +1 @@
+dP
diff --git a/test/unit/paste-before/in b/test/unit/paste-before/in
new file mode 100644
index 00000000..daee86ae
--- /dev/null
+++ b/test/unit/paste-before/in
@@ -0,0 +1 @@
+-foo-%(bar)
diff --git a/test/unit/paste-before/out b/test/unit/paste-before/out
new file mode 100644
index 00000000..f53ee17d
--- /dev/null
+++ b/test/unit/paste-before/out
@@ -0,0 +1 @@
+-foobar-
diff --git a/test/unit/pipe-insert/cmd b/test/unit/pipe-insert/cmd
new file mode 100644
index 00000000..323fae03
--- /dev/null
+++ b/test/unit/pipe-insert/cmd
@@ -0,0 +1 @@
+foobar
diff --git a/test/unit/pipe-insert/in b/test/unit/pipe-insert/in
new file mode 100644
index 00000000..d5c79cc2
--- /dev/null
+++ b/test/unit/pipe-insert/in
@@ -0,0 +1 @@
+<a-|>sed s/foo/bar/<ret>
diff --git a/test/unit/pipe-insert/out b/test/unit/pipe-insert/out
new file mode 100644
index 00000000..323fae03
--- /dev/null
+++ b/test/unit/pipe-insert/out
@@ -0,0 +1 @@
+foobar
diff --git a/test/unit/pipe/cmd b/test/unit/pipe/cmd
new file mode 100644
index 00000000..f1766cfa
--- /dev/null
+++ b/test/unit/pipe/cmd
@@ -0,0 +1 @@
+|sed s/foo/bar/<ret>
diff --git a/test/unit/pipe/in b/test/unit/pipe/in
new file mode 100644
index 00000000..c2267c2e
--- /dev/null
+++ b/test/unit/pipe/in
@@ -0,0 +1 @@
+%(foo)
diff --git a/test/unit/pipe/out b/test/unit/pipe/out
new file mode 100644
index 00000000..5716ca59
--- /dev/null
+++ b/test/unit/pipe/out
@@ -0,0 +1 @@
+bar
diff --git a/test/unit/previous-WORD/cmd b/test/unit/previous-WORD/cmd
new file mode 100644
index 00000000..223b7836
--- /dev/null
+++ b/test/unit/previous-WORD/cmd
@@ -0,0 +1 @@
+B
diff --git a/test/unit/previous-WORD/in b/test/unit/previous-WORD/in
new file mode 100644
index 00000000..e92570ea
--- /dev/null
+++ b/test/unit/previous-WORD/in
@@ -0,0 +1 @@
+foo %(b)ar baz
diff --git a/test/unit/previous-WORD/selections b/test/unit/previous-WORD/selections
new file mode 100644
index 00000000..20b4d26d
--- /dev/null
+++ b/test/unit/previous-WORD/selections
@@ -0,0 +1 @@
+foo b
diff --git a/test/unit/previous-word/cmd b/test/unit/previous-word/cmd
new file mode 100644
index 00000000..61780798
--- /dev/null
+++ b/test/unit/previous-word/cmd
@@ -0,0 +1 @@
+b
diff --git a/test/unit/previous-word/in b/test/unit/previous-word/in
new file mode 100644
index 00000000..e92570ea
--- /dev/null
+++ b/test/unit/previous-word/in
@@ -0,0 +1 @@
+foo %(b)ar baz
diff --git a/test/unit/previous-word/selections b/test/unit/previous-word/selections
new file mode 100644
index 00000000..564d4dda
--- /dev/null
+++ b/test/unit/previous-word/selections
@@ -0,0 +1 @@
+foo
diff --git a/test/unit/record-macro/cmd b/test/unit/record-macro/cmd
new file mode 100644
index 00000000..2ea06dea
--- /dev/null
+++ b/test/unit/record-macro/cmd
@@ -0,0 +1 @@
+QQimawww<esc>Q%c<c-r>Q
diff --git a/test/unit/record-macro/out b/test/unit/record-macro/out
new file mode 100644
index 00000000..98aa21c7
--- /dev/null
+++ b/test/unit/record-macro/out
@@ -0,0 +1 @@
+mawww
diff --git a/test/unit/redo/cmd b/test/unit/redo/cmd
new file mode 100644
index 00000000..f8e2db91
--- /dev/null
+++ b/test/unit/redo/cmd
@@ -0,0 +1 @@
+duU
diff --git a/test/unit/redo/in b/test/unit/redo/in
new file mode 100644
index 00000000..a3133ea2
--- /dev/null
+++ b/test/unit/redo/in
@@ -0,0 +1 @@
+foo %(bar) baz
diff --git a/test/unit/redo/out b/test/unit/redo/out
new file mode 100644
index 00000000..1aeaedbf
--- /dev/null
+++ b/test/unit/redo/out
@@ -0,0 +1 @@
+foo bar baz
diff --git a/test/unit/repeat-insert/cmd b/test/unit/repeat-insert/cmd
new file mode 100644
index 00000000..8eb06025
--- /dev/null
+++ b/test/unit/repeat-insert/cmd
@@ -0,0 +1 @@
+afoo<esc>.
diff --git a/test/unit/repeat-insert/out b/test/unit/repeat-insert/out
new file mode 100644
index 00000000..55b5f1fc
--- /dev/null
+++ b/test/unit/repeat-insert/out
@@ -0,0 +1 @@
+foofoo
diff --git a/test/unit/replace/cmd b/test/unit/replace/cmd
new file mode 100644
index 00000000..ba4e0d5a
--- /dev/null
+++ b/test/unit/replace/cmd
@@ -0,0 +1 @@
+rb
diff --git a/test/unit/replace/in b/test/unit/replace/in
new file mode 100644
index 00000000..78981922
--- /dev/null
+++ b/test/unit/replace/in
@@ -0,0 +1 @@
+a
diff --git a/test/unit/replace/out b/test/unit/replace/out
new file mode 100644
index 00000000..61780798
--- /dev/null
+++ b/test/unit/replace/out
@@ -0,0 +1 @@
+b
diff --git a/test/unit/replay-macro/cmd b/test/unit/replay-macro/cmd
new file mode 100644
index 00000000..b26b2efe
--- /dev/null
+++ b/test/unit/replay-macro/cmd
@@ -0,0 +1 @@
+qq
diff --git a/test/unit/replay-macro/out b/test/unit/replay-macro/out
new file mode 100644
index 00000000..98aa21c7
--- /dev/null
+++ b/test/unit/replay-macro/out
@@ -0,0 +1 @@
+mawww
diff --git a/test/unit/replay-macro/rc b/test/unit/replay-macro/rc
new file mode 100644
index 00000000..06f860b5
--- /dev/null
+++ b/test/unit/replay-macro/rc
@@ -0,0 +1 @@
+reg q amawww
diff --git a/test/unit/right/cmd b/test/unit/right/cmd
new file mode 100644
index 00000000..1f9d725a
--- /dev/null
+++ b/test/unit/right/cmd
@@ -0,0 +1 @@
+l
diff --git a/test/unit/right/in b/test/unit/right/in
new file mode 100644
index 00000000..7168be78
--- /dev/null
+++ b/test/unit/right/in
@@ -0,0 +1 @@
+%(foo) bar
diff --git a/test/unit/right/selections b/test/unit/right/selections
new file mode 100644
index 00000000..8d1c8b69
--- /dev/null
+++ b/test/unit/right/selections
@@ -0,0 +1 @@
+
diff --git a/test/unit/rotate-content/cmd b/test/unit/rotate-content/cmd
new file mode 100644
index 00000000..0f50de7d
--- /dev/null
+++ b/test/unit/rotate-content/cmd
@@ -0,0 +1 @@
+<a-R>
diff --git a/test/unit/rotate-content/in b/test/unit/rotate-content/in
new file mode 100644
index 00000000..478a6fee
--- /dev/null
+++ b/test/unit/rotate-content/in
@@ -0,0 +1 @@
+%(foo) %(bar) %(baz)
diff --git a/test/unit/rotate-content/out b/test/unit/rotate-content/out
new file mode 100644
index 00000000..2a0ec25a
--- /dev/null
+++ b/test/unit/rotate-content/out
@@ -0,0 +1 @@
+baz foo bar
diff --git a/test/unit/rotate/cmd b/test/unit/rotate/cmd
new file mode 100644
index 00000000..fa12ef38
--- /dev/null
+++ b/test/unit/rotate/cmd
@@ -0,0 +1 @@
+<a-r>
diff --git a/test/unit/rotate/in b/test/unit/rotate/in
new file mode 100644
index 00000000..478a6fee
--- /dev/null
+++ b/test/unit/rotate/in
@@ -0,0 +1 @@
+%(foo) %(bar) %(baz)
diff --git a/test/unit/rotate/selections b/test/unit/rotate/selections
new file mode 100644
index 00000000..49f37f3d
--- /dev/null
+++ b/test/unit/rotate/selections
@@ -0,0 +1 @@
+foo:bar:baz
diff --git a/test/unit/search-reverse/cmd b/test/unit/search-reverse/cmd
new file mode 100644
index 00000000..5c0f83d7
--- /dev/null
+++ b/test/unit/search-reverse/cmd
@@ -0,0 +1 @@
+<a-/>[a-z]+<ret>
diff --git a/test/unit/search-reverse/in b/test/unit/search-reverse/in
new file mode 100644
index 00000000..a3133ea2
--- /dev/null
+++ b/test/unit/search-reverse/in
@@ -0,0 +1 @@
+foo %(bar) baz
diff --git a/test/unit/search-reverse/selections b/test/unit/search-reverse/selections
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/test/unit/search-reverse/selections
@@ -0,0 +1 @@
+foo
diff --git a/test/unit/search/cmd b/test/unit/search/cmd
new file mode 100644
index 00000000..26d5cde1
--- /dev/null
+++ b/test/unit/search/cmd
@@ -0,0 +1 @@
+/[a-z]+<ret>
diff --git a/test/unit/search/in b/test/unit/search/in
new file mode 100644
index 00000000..a3133ea2
--- /dev/null
+++ b/test/unit/search/in
@@ -0,0 +1 @@
+foo %(bar) baz
diff --git a/test/unit/search/selections b/test/unit/search/selections
new file mode 100644
index 00000000..76018072
--- /dev/null
+++ b/test/unit/search/selections
@@ -0,0 +1 @@
+baz
diff --git a/test/unit/select-line/cmd b/test/unit/select-line/cmd
new file mode 100644
index 00000000..587be6b4
--- /dev/null
+++ b/test/unit/select-line/cmd
@@ -0,0 +1 @@
+x
diff --git a/test/unit/select-line/in b/test/unit/select-line/in
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/test/unit/select-line/in
@@ -0,0 +1 @@
+foo
diff --git a/test/unit/select-line/selections b/test/unit/select-line/selections
new file mode 100644
index 00000000..75d7bfb8
--- /dev/null
+++ b/test/unit/select-line/selections
@@ -0,0 +1,2 @@
+foo
+
diff --git a/test/unit/select/cmd b/test/unit/select/cmd
new file mode 100644
index 00000000..f28a02c5
--- /dev/null
+++ b/test/unit/select/cmd
@@ -0,0 +1 @@
+sfoo<ret>
diff --git a/test/unit/select/in b/test/unit/select/in
new file mode 100644
index 00000000..6969fccc
--- /dev/null
+++ b/test/unit/select/in
@@ -0,0 +1 @@
+%(foo bar)
diff --git a/test/unit/select/selections b/test/unit/select/selections
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/test/unit/select/selections
@@ -0,0 +1 @@
+foo
diff --git a/test/unit/split/cmd b/test/unit/split/cmd
new file mode 100644
index 00000000..01c0a32d
--- /dev/null
+++ b/test/unit/split/cmd
@@ -0,0 +1 @@
+S <ret>
diff --git a/test/unit/split/in b/test/unit/split/in
new file mode 100644
index 00000000..8be66fa5
--- /dev/null
+++ b/test/unit/split/in
@@ -0,0 +1 @@
+%(foo bar baz)
diff --git a/test/unit/split/selections b/test/unit/split/selections
new file mode 100644
index 00000000..375f1aa4
--- /dev/null
+++ b/test/unit/split/selections
@@ -0,0 +1 @@
+baz:foo:bar
diff --git a/test/unit/start/WORD/cmd b/test/unit/start/WORD/cmd
new file mode 100644
index 00000000..b8c68dc9
--- /dev/null
+++ b/test/unit/start/WORD/cmd
@@ -0,0 +1 @@
+[W
diff --git a/test/unit/start/WORD/in b/test/unit/start/WORD/in
new file mode 100644
index 00000000..82588cdb
--- /dev/null
+++ b/test/unit/start/WORD/in
@@ -0,0 +1 @@
+foo bar-ba%(z) qux
diff --git a/test/unit/start/WORD/selections b/test/unit/start/WORD/selections
new file mode 100644
index 00000000..d6311946
--- /dev/null
+++ b/test/unit/start/WORD/selections
@@ -0,0 +1 @@
+bar-baz
diff --git a/test/unit/start/angle/cmd b/test/unit/start/angle/cmd
new file mode 100644
index 00000000..3a8d2ba3
--- /dev/null
+++ b/test/unit/start/angle/cmd
@@ -0,0 +1 @@
+[a
diff --git a/test/unit/start/angle/in b/test/unit/start/angle/in
new file mode 100644
index 00000000..8dea61dd
--- /dev/null
+++ b/test/unit/start/angle/in
@@ -0,0 +1 @@
+#include <%(f)oo>
diff --git a/test/unit/start/angle/selections b/test/unit/start/angle/selections
new file mode 100644
index 00000000..1ab3973e
--- /dev/null
+++ b/test/unit/start/angle/selections
@@ -0,0 +1 @@
+<f
diff --git a/test/unit/start/braces/cmd b/test/unit/start/braces/cmd
new file mode 100644
index 00000000..7f884a79
--- /dev/null
+++ b/test/unit/start/braces/cmd
@@ -0,0 +1 @@
+[B
diff --git a/test/unit/start/braces/in b/test/unit/start/braces/in
new file mode 100644
index 00000000..b62df918
--- /dev/null
+++ b/test/unit/start/braces/in
@@ -0,0 +1,3 @@
+{
+ "%(foo)": "bar"
+}
diff --git a/test/unit/start/braces/selections b/test/unit/start/braces/selections
new file mode 100644
index 00000000..6e365bec
--- /dev/null
+++ b/test/unit/start/braces/selections
@@ -0,0 +1,2 @@
+{
+ "foo
diff --git a/test/unit/start/brackets/cmd b/test/unit/start/brackets/cmd
new file mode 100644
index 00000000..f4c7fa13
--- /dev/null
+++ b/test/unit/start/brackets/cmd
@@ -0,0 +1 @@
+[r
diff --git a/test/unit/start/brackets/in b/test/unit/start/brackets/in
new file mode 100644
index 00000000..286c5fcb
--- /dev/null
+++ b/test/unit/start/brackets/in
@@ -0,0 +1,3 @@
+[
+ "%(foo)"
+]
diff --git a/test/unit/start/brackets/selections b/test/unit/start/brackets/selections
new file mode 100644
index 00000000..a42eb4eb
--- /dev/null
+++ b/test/unit/start/brackets/selections
@@ -0,0 +1,2 @@
+[
+ "foo
diff --git a/test/unit/start/double_quote/cmd b/test/unit/start/double_quote/cmd
new file mode 100644
index 00000000..dad92fad
--- /dev/null
+++ b/test/unit/start/double_quote/cmd
@@ -0,0 +1 @@
+[Q
diff --git a/test/unit/start/double_quote/in b/test/unit/start/double_quote/in
new file mode 100644
index 00000000..78428f5e
--- /dev/null
+++ b/test/unit/start/double_quote/in
@@ -0,0 +1 @@
+foo("%(b)ar")
diff --git a/test/unit/start/double_quote/selections b/test/unit/start/double_quote/selections
new file mode 100644
index 00000000..87e31fb8
--- /dev/null
+++ b/test/unit/start/double_quote/selections
@@ -0,0 +1 @@
+"b
diff --git a/test/unit/start/grave_quote/cmd b/test/unit/start/grave_quote/cmd
new file mode 100644
index 00000000..46ed1d05
--- /dev/null
+++ b/test/unit/start/grave_quote/cmd
@@ -0,0 +1 @@
+[g
diff --git a/test/unit/start/grave_quote/in b/test/unit/start/grave_quote/in
new file mode 100644
index 00000000..6f02c52a
--- /dev/null
+++ b/test/unit/start/grave_quote/in
@@ -0,0 +1 @@
+echo `%(f)oo`
diff --git a/test/unit/start/grave_quote/selections b/test/unit/start/grave_quote/selections
new file mode 100644
index 00000000..e20e0382
--- /dev/null
+++ b/test/unit/start/grave_quote/selections
@@ -0,0 +1 @@
+`f
diff --git a/test/unit/start/indent/cmd b/test/unit/start/indent/cmd
new file mode 100644
index 00000000..3a5bba76
--- /dev/null
+++ b/test/unit/start/indent/cmd
@@ -0,0 +1 @@
+[i
diff --git a/test/unit/start/indent/in b/test/unit/start/indent/in
new file mode 100644
index 00000000..3d074b01
--- /dev/null
+++ b/test/unit/start/indent/in
@@ -0,0 +1,3 @@
+
+ foo(%(b)ar)
+
diff --git a/test/unit/start/indent/selections b/test/unit/start/indent/selections
new file mode 100644
index 00000000..dbf75bb0
--- /dev/null
+++ b/test/unit/start/indent/selections
@@ -0,0 +1,3 @@
+
+ foo(bar)
+
diff --git a/test/unit/start/paragraph/cmd b/test/unit/start/paragraph/cmd
new file mode 100644
index 00000000..4976613e
--- /dev/null
+++ b/test/unit/start/paragraph/cmd
@@ -0,0 +1 @@
+[p
diff --git a/test/unit/start/paragraph/in b/test/unit/start/paragraph/in
new file mode 100644
index 00000000..0da6451e
--- /dev/null
+++ b/test/unit/start/paragraph/in
@@ -0,0 +1,8 @@
+a
+b
+
+%(c)
+d
+
+e
+f
diff --git a/test/unit/start/paragraph/selections b/test/unit/start/paragraph/selections
new file mode 100644
index 00000000..3a41e248
--- /dev/null
+++ b/test/unit/start/paragraph/selections
@@ -0,0 +1,4 @@
+a
+b
+
+
diff --git a/test/unit/start/parenthesis/cmd b/test/unit/start/parenthesis/cmd
new file mode 100644
index 00000000..f78a0e94
--- /dev/null
+++ b/test/unit/start/parenthesis/cmd
@@ -0,0 +1 @@
+[b
diff --git a/test/unit/start/parenthesis/in b/test/unit/start/parenthesis/in
new file mode 100644
index 00000000..3bea1f71
--- /dev/null
+++ b/test/unit/start/parenthesis/in
@@ -0,0 +1 @@
+foo(%(b)ar)
diff --git a/test/unit/start/parenthesis/selections b/test/unit/start/parenthesis/selections
new file mode 100644
index 00000000..a4f1ddd7
--- /dev/null
+++ b/test/unit/start/parenthesis/selections
@@ -0,0 +1 @@
+(b
diff --git a/test/unit/start/sentence/cmd b/test/unit/start/sentence/cmd
new file mode 100644
index 00000000..e7c8a2c6
--- /dev/null
+++ b/test/unit/start/sentence/cmd
@@ -0,0 +1 @@
+[s
diff --git a/test/unit/start/sentence/in b/test/unit/start/sentence/in
new file mode 100644
index 00000000..0e5983b9
--- /dev/null
+++ b/test/unit/start/sentence/in
@@ -0,0 +1,6 @@
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
+incididunt ut labore et %(dolore magna aliqua). Ut enim ad minim veniam, quis
+nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore
+eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
+sunt in culpa qui officia deserunt mollit anim id est laborum.
diff --git a/test/unit/start/sentence/selections b/test/unit/start/sentence/selections
new file mode 100644
index 00000000..837b6bb4
--- /dev/null
+++ b/test/unit/start/sentence/selections
@@ -0,0 +1,2 @@
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
+incididunt ut labore et dolore magna aliqua
diff --git a/test/unit/start/single_quote/cmd b/test/unit/start/single_quote/cmd
new file mode 100644
index 00000000..93673f74
--- /dev/null
+++ b/test/unit/start/single_quote/cmd
@@ -0,0 +1 @@
+[q
diff --git a/test/unit/start/single_quote/in b/test/unit/start/single_quote/in
new file mode 100644
index 00000000..ed397c1c
--- /dev/null
+++ b/test/unit/start/single_quote/in
@@ -0,0 +1 @@
+foo('%(b)ar')
diff --git a/test/unit/start/single_quote/selections b/test/unit/start/single_quote/selections
new file mode 100644
index 00000000..52d63ab2
--- /dev/null
+++ b/test/unit/start/single_quote/selections
@@ -0,0 +1 @@
+'b
diff --git a/test/unit/start/word/cmd b/test/unit/start/word/cmd
new file mode 100644
index 00000000..4198f90f
--- /dev/null
+++ b/test/unit/start/word/cmd
@@ -0,0 +1 @@
+[w
diff --git a/test/unit/start/word/in b/test/unit/start/word/in
new file mode 100644
index 00000000..6cac4552
--- /dev/null
+++ b/test/unit/start/word/in
@@ -0,0 +1 @@
+foo ba%(r) baz
diff --git a/test/unit/start/word/selections b/test/unit/start/word/selections
new file mode 100644
index 00000000..efe82b7c
--- /dev/null
+++ b/test/unit/start/word/selections
@@ -0,0 +1 @@
+bar
diff --git a/test/unit/switch-case/cmd b/test/unit/switch-case/cmd
new file mode 100644
index 00000000..90d44364
--- /dev/null
+++ b/test/unit/switch-case/cmd
@@ -0,0 +1 @@
+<a-`>
diff --git a/test/unit/switch-case/in b/test/unit/switch-case/in
new file mode 100644
index 00000000..19ad44c0
--- /dev/null
+++ b/test/unit/switch-case/in
@@ -0,0 +1 @@
+%(foo BAR)
diff --git a/test/unit/switch-case/selections b/test/unit/switch-case/selections
new file mode 100644
index 00000000..9558898b
--- /dev/null
+++ b/test/unit/switch-case/selections
@@ -0,0 +1 @@
+FOO bar
diff --git a/test/unit/to-char-backward/cmd b/test/unit/to-char-backward/cmd
new file mode 100644
index 00000000..8fda5ff2
--- /dev/null
+++ b/test/unit/to-char-backward/cmd
@@ -0,0 +1 @@
+<a-f>|
diff --git a/test/unit/to-char-backward/in b/test/unit/to-char-backward/in
new file mode 100644
index 00000000..1da8fdf7
--- /dev/null
+++ b/test/unit/to-char-backward/in
@@ -0,0 +1 @@
+foo|%(bar)|baz
diff --git a/test/unit/to-char-backward/selections b/test/unit/to-char-backward/selections
new file mode 100644
index 00000000..cecd2dec
--- /dev/null
+++ b/test/unit/to-char-backward/selections
@@ -0,0 +1 @@
+|bar
diff --git a/test/unit/to-char-forward/cmd b/test/unit/to-char-forward/cmd
new file mode 100644
index 00000000..2e42ae55
--- /dev/null
+++ b/test/unit/to-char-forward/cmd
@@ -0,0 +1 @@
+f|
diff --git a/test/unit/to-char-forward/in b/test/unit/to-char-forward/in
new file mode 100644
index 00000000..1da8fdf7
--- /dev/null
+++ b/test/unit/to-char-forward/in
@@ -0,0 +1 @@
+foo|%(bar)|baz
diff --git a/test/unit/to-char-forward/selections b/test/unit/to-char-forward/selections
new file mode 100644
index 00000000..46e2eef4
--- /dev/null
+++ b/test/unit/to-char-forward/selections
@@ -0,0 +1 @@
+r|
diff --git a/test/unit/undo/cmd b/test/unit/undo/cmd
new file mode 100644
index 00000000..37dc93f7
--- /dev/null
+++ b/test/unit/undo/cmd
@@ -0,0 +1 @@
+du
diff --git a/test/unit/undo/in b/test/unit/undo/in
new file mode 100644
index 00000000..c2267c2e
--- /dev/null
+++ b/test/unit/undo/in
@@ -0,0 +1 @@
+%(foo)
diff --git a/test/unit/undo/out b/test/unit/undo/out
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/test/unit/undo/out
@@ -0,0 +1 @@
+foo
diff --git a/test/unit/up/cmd b/test/unit/up/cmd
new file mode 100644
index 00000000..b68fde2a
--- /dev/null
+++ b/test/unit/up/cmd
@@ -0,0 +1 @@
+k
diff --git a/test/unit/up/in b/test/unit/up/in
new file mode 100644
index 00000000..97b4d9dc
--- /dev/null
+++ b/test/unit/up/in
@@ -0,0 +1,2 @@
+foo
+%(bar)
diff --git a/test/unit/up/selections b/test/unit/up/selections
new file mode 100644
index 00000000..13e7564e
--- /dev/null
+++ b/test/unit/up/selections
@@ -0,0 +1 @@
+o
diff --git a/test/unit/upper-case/cmd b/test/unit/upper-case/cmd
new file mode 100644
index 00000000..54bcf304
--- /dev/null
+++ b/test/unit/upper-case/cmd
@@ -0,0 +1 @@
+~
diff --git a/test/unit/upper-case/in b/test/unit/upper-case/in
new file mode 100644
index 00000000..c2267c2e
--- /dev/null
+++ b/test/unit/upper-case/in
@@ -0,0 +1 @@
+%(foo)
diff --git a/test/unit/upper-case/selections b/test/unit/upper-case/selections
new file mode 100644
index 00000000..b7d6715e
--- /dev/null
+++ b/test/unit/upper-case/selections
@@ -0,0 +1 @@
+FOO
diff --git a/test/unit/view/README b/test/unit/view/README
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/test/unit/view/README
diff --git a/test/unit/yank/cmd b/test/unit/yank/cmd
new file mode 100644
index 00000000..f1ed649d
--- /dev/null
+++ b/test/unit/yank/cmd
@@ -0,0 +1 @@
+ya<c-r>"
diff --git a/test/unit/yank/in b/test/unit/yank/in
new file mode 100644
index 00000000..c2267c2e
--- /dev/null
+++ b/test/unit/yank/in
@@ -0,0 +1 @@
+%(foo)
diff --git a/test/unit/yank/out b/test/unit/yank/out
new file mode 100644
index 00000000..55b5f1fc
--- /dev/null
+++ b/test/unit/yank/out
@@ -0,0 +1 @@
+foofoo