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 }