aboutsummaryrefslogtreecommitdiff
path: root/tests/12strpkey.c
blob: d21a547a4059d57af5210aa843b8cd2ea8f751c5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#include "../termo.h"
#include "taplib.h"

int
main (int argc, char *argv[])
{
	termo_t *tk;
	termo_key_t key;
	const char *endp;

#define CLEAR_KEY do { key.type = -1; key.code.codepoint = -1; \
	key.modifiers = -1; key.multibyte[0] = 0; } while (0)

	plan_tests (62);

	tk = termo_new_abstract ("vt100", NULL, 0);

	CLEAR_KEY;
	endp = termo_strpkey (tk, "A", &key, 0);
	is_int (key.type, TERMO_TYPE_KEY, "key.type for unicode/A/0");
	is_int (key.code.codepoint, 'A', "key.code.codepoint for unicode/A/0");
	is_int (key.modifiers, 0, "key.modifiers for unicode/A/0");
	is_str (key.multibyte, "A", "key.multibyte for unicode/A/0");
	is_str (endp, "", "consumed entire input for unicode/A/0");

	CLEAR_KEY;
	endp = termo_strpkey (tk, "A and more", &key, 0);
	is_int (key.type, TERMO_TYPE_KEY,
		"key.type for unicode/A/0 trailing");
	is_int (key.code.codepoint, 'A',
		"key.code.codepoint for unicode/A/0 trailing");
	is_int (key.modifiers, 0, "key.modifiers for unicode/A/0 trailing");
	is_str (key.multibyte, "A", "key.multibyte for unicode/A/0 trailing");
	is_str (endp, " and more",
		"points at string tail for unicode/A/0 trailing");

	CLEAR_KEY;
	endp = termo_strpkey (tk, "C-b", &key, 0);
	is_int (key.type, TERMO_TYPE_KEY, "key.type for unicode/b/CTRL");
	is_int (key.code.codepoint, 'b', "key.code.codepoint for unicode/b/CTRL");
	is_int (key.modifiers, TERMO_KEYMOD_CTRL,
		"key.modifiers for unicode/b/CTRL");
	is_str (key.multibyte, "b", "key.multibyte for unicode/b/CTRL");
	is_str (endp, "", "consumed entire input for unicode/b/CTRL");

	CLEAR_KEY;
	endp = termo_strpkey (tk, "Ctrl-b", &key, TERMO_FORMAT_LONGMOD);
	is_int (key.type, TERMO_TYPE_KEY,
		"key.type for unicode/b/CTRL longmod");
	is_int (key.code.codepoint, 'b',
		"key.code.codepoint for unicode/b/CTRL longmod");
	is_int (key.modifiers, TERMO_KEYMOD_CTRL,
		"key.modifiers for unicode/b/CTRL longmod");
	is_str (key.multibyte, "b", "key.multibyte for unicode/b/CTRL longmod");
	is_str (endp, "", "consumed entire input for unicode/b/CTRL longmod");

	CLEAR_KEY;
	endp = termo_strpkey (tk, "^B", &key, TERMO_FORMAT_CARETCTRL);
	is_int (key.type, TERMO_TYPE_KEY,
		"key.type for unicode/b/CTRL caretctrl");
	is_int (key.code.codepoint, 'b',
		"key.code.codepoint for unicode/b/CTRL caretctrl");
	is_int (key.modifiers, TERMO_KEYMOD_CTRL,
		"key.modifiers for unicode/b/CTRL caretctrl");
	is_str (key.multibyte, "b", "key.multibyte for unicode/b/CTRL caretctrl");
	is_str (endp, "", "consumed entire input for unicode/b/CTRL caretctrl");

	CLEAR_KEY;
	endp = termo_strpkey (tk, "A-c", &key, 0);
	is_int (key.type, TERMO_TYPE_KEY, "key.type for unicode/c/ALT");
	is_int (key.code.codepoint, 'c', "key.code.codepoint for unicode/c/ALT");
	is_int (key.modifiers, TERMO_KEYMOD_ALT,
		"key.modifiers for unicode/c/ALT");
	is_str (key.multibyte, "c", "key.multibyte for unicode/c/ALT");
	is_str (endp, "", "consumed entire input for unicode/c/ALT");

	CLEAR_KEY;
	endp = termo_strpkey (tk, "Alt-c", &key, TERMO_FORMAT_LONGMOD);
	is_int (key.type, TERMO_TYPE_KEY,
		"key.type for unicode/c/ALT longmod");
	is_int (key.code.codepoint, 'c',
		"key.code.codepoint for unicode/c/ALT longmod");
	is_int (key.modifiers, TERMO_KEYMOD_ALT,
		"key.modifiers for unicode/c/ALT longmod");
	is_str (key.multibyte, "c", "key.multibyte for unicode/c/ALT longmod");
	is_str (endp, "", "consumed entire input for unicode/c/ALT longmod");

	CLEAR_KEY;
	endp = termo_strpkey (tk, "M-c", &key, TERMO_FORMAT_ALTISMETA);
	is_int (key.type, TERMO_TYPE_KEY,
		"key.type for unicode/c/ALT altismeta");
	is_int (key.code.codepoint, 'c',
		"key.code.codepoint for unicode/c/ALT altismeta");
	is_int (key.modifiers, TERMO_KEYMOD_ALT,
		"key.modifiers for unicode/c/ALT altismeta");
	is_str (key.multibyte, "c", "key.multibyte for unicode/c/ALT altismeta");
	is_str (endp, "", "consumed entire input for unicode/c/ALT altismeta");

	CLEAR_KEY;
	endp = termo_strpkey (tk, "Meta-c", &key,
		TERMO_FORMAT_ALTISMETA | TERMO_FORMAT_LONGMOD);
	is_int (key.type, TERMO_TYPE_KEY,
		"key.type for unicode/c/ALT altismeta+longmod");
	is_int (key.code.codepoint, 'c',
		"key.code.codepoint for unicode/c/ALT altismeta+longmod");
	is_int (key.modifiers, TERMO_KEYMOD_ALT,
		"key.modifiers for unicode/c/ALT altismeta+longmod");
	is_str (key.multibyte, "c", "key.multibyte for unicode/c/ALT altismeta+longmod");
	is_str (endp, "",
		"consumed entire input for unicode/c/ALT altismeta+longmod");

	CLEAR_KEY;
	endp = termo_strpkey (tk, "meta c", &key,
		TERMO_FORMAT_ALTISMETA | TERMO_FORMAT_LONGMOD
		| TERMO_FORMAT_SPACEMOD | TERMO_FORMAT_LOWERMOD);
	is_int (key.type, TERMO_TYPE_KEY,
		"key.type for unicode/c/ALT altismeta+long/space+lowermod");
	is_int (key.code.codepoint, 'c',
		"key.code.codepoint for unicode/c/ALT altismeta+long/space+lowermod");
	is_int (key.modifiers, TERMO_KEYMOD_ALT,
		"key.modifiers for unicode/c/ALT altismeta+long/space+lowermod");
	is_str (key.multibyte, "c",
		"key.multibyte for unicode/c/ALT altismeta+long/space_lowermod");
	is_str (endp, "",
		"consumed entire input for unicode/c/ALT altismeta+long/space+lowermod");

	CLEAR_KEY;
	endp = termo_strpkey (tk, "ctrl alt page up", &key,
		TERMO_FORMAT_LONGMOD | TERMO_FORMAT_SPACEMOD
		| TERMO_FORMAT_LOWERMOD | TERMO_FORMAT_LOWERSPACE);
	is_int (key.type, TERMO_TYPE_KEYSYM,
		"key.type for sym/PageUp/CTRL+ALT long/space/lowermod+lowerspace");
	is_int (key.code.sym, TERMO_SYM_PAGEUP,
		"key.code.codepoint for sym/PageUp/CTRL+ALT long/space/lowermod+lowerspace");
	is_int (key.modifiers, TERMO_KEYMOD_ALT | TERMO_KEYMOD_CTRL,
		"key.modifiers for sym/PageUp/CTRL+ALT long/space/lowermod+lowerspace");
	is_str (endp, "",
		"consumed entire input for sym/PageUp/CTRL+ALT"
		" long/space/lowermod+lowerspace");

	CLEAR_KEY;
	endp = termo_strpkey (tk, "Up", &key, 0);
	is_int (key.type, TERMO_TYPE_KEYSYM, "key.type for sym/Up/0");
	is_int (key.code.sym, TERMO_SYM_UP, "key.code.codepoint for sym/Up/0");
	is_int (key.modifiers, 0, "key.modifiers for sym/Up/0");
	is_str (endp, "", "consumed entire input for sym/Up/0");

	CLEAR_KEY;
	endp = termo_strpkey (tk, "F5", &key, 0);
	is_int (key.type, TERMO_TYPE_FUNCTION, "key.type for func/5/0");
	is_int (key.code.number, 5, "key.code.number for func/5/0");
	is_int (key.modifiers, 0, "key.modifiers for func/5/0");
	is_str (endp, "", "consumed entire input for func/5/0");

	termo_destroy (tk);
	return exit_status ();
}