sl_test.c - lchat - A line oriented chat front end for ii.
(HTM) git clone git://git.suckless.org/lchat
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
---
sl_test.c (2244B)
---
1 #include <assert.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <string.h>
5
6 #include "slackline.h"
7
8 static void
9 strokes(struct slackline *sl, const char *str)
10 {
11 for (const char *c = str; *c != '\0'; c++)
12 sl_keystroke(sl, *c);
13 }
14
15 static void
16 check_init(struct slackline *sl)
17 {
18 assert(sl != NULL);
19 assert(sl->buf != NULL);
20 assert(sl->ptr == sl->buf);
21 assert(sl->rlen == 0);
22 assert(sl->blen == 0);
23 assert(sl->rcur == 0);
24 assert(sl->bcur == 0);
25 assert(sl->last == sl->buf);
26 }
27
28 static void
29 check_ascii(struct slackline *sl)
30 {
31 strokes(sl, "abc");
32 assert(sl->blen == 3);
33 assert(sl->rlen == 3);
34 assert(sl->bcur == 3);
35 assert(sl->rcur == 3);
36 assert(sl->last - sl->buf == sl->blen);
37
38 strokes(sl, "\x08"); /* backspace */
39 assert(sl->blen == 2);
40 assert(sl->rlen == 2);
41 assert(sl->bcur == 2);
42 assert(sl->rcur == 2);
43 assert(sl->last - sl->buf == sl->blen);
44
45 strokes(sl, "\x1b[D"); /* left arrow key */
46 assert(sl->blen == 2);
47 assert(sl->rlen == 2);
48 assert(sl->bcur == 1);
49 assert(sl->rcur == 1);
50 assert(sl->last - sl->buf == sl->blen);
51 }
52
53 static void
54 check_utf8(struct slackline *sl)
55 {
56 /* ae | oe | ue | ss */
57 strokes(sl, "\xC3\xA4\xC3\xBC\xC3\xB6\xC3\x9F");
58 assert(sl->blen == 8);
59 assert(sl->rlen == 4);
60 assert(sl->bcur == 8);
61 assert(sl->rcur == 4);
62 assert(sl->last - sl->buf == sl->blen);
63
64 strokes(sl, "\x08"); /* backspace */
65 assert(sl->blen == 6);
66 assert(sl->rlen == 3);
67 assert(sl->bcur == 6);
68 assert(sl->rcur == 3);
69 assert(sl->last - sl->buf == sl->blen);
70
71 strokes(sl, "\x1b[D"); /* left arrow key */
72 assert(sl->blen == 6);
73 assert(sl->rlen == 3);
74 assert(sl->bcur == 4);
75 assert(sl->rcur == 2);
76 assert(sl->last - sl->buf == sl->blen);
77
78 strokes(sl, "\x08"); /* backspace */
79 assert(sl->blen == 4);
80 assert(sl->rlen == 2);
81 assert(sl->bcur == 2);
82 assert(sl->rcur == 1);
83 assert(sl->last - sl->buf == sl->blen);
84
85 strokes(sl, "\x1b[C"); /* right arrow key */
86 assert(sl->blen == 4);
87 assert(sl->rlen == 2);
88 assert(sl->bcur == 4);
89 assert(sl->rcur == 2);
90 assert(sl->last - sl->buf == sl->blen);
91 }
92
93 int
94 main(void)
95 {
96 struct slackline *sl;
97
98 sl = sl_init();
99 check_init(sl);
100 check_ascii(sl);
101
102 sl_reset(sl);
103 check_init(sl);
104 check_utf8(sl);
105
106 sl_free(sl);
107
108 return EXIT_SUCCESS;
109 }