]> git.mdlowis.com Git - projs/tide.git/commitdiff
added unit tests and minor refactoring
authorMichael D. Lowis <mike.lowis@gentex.com>
Mon, 9 Apr 2018 19:15:04 +0000 (15:15 -0400)
committerMichael D. Lowis <mike.lowis@gentex.com>
Mon, 9 Apr 2018 19:15:04 +0000 (15:15 -0400)
Makefile
lib/x11.c
tests/lib/buf.c
tests/pick.c [deleted file]

index 97a0d2322924b217ffabd663addf754c721b1c2b..a2703c4bda3dd5e35fec632703ca5c6f687d29a7 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
 INCS = -Iinc/
 MAKEFLAGS = -j4
 BINS = tide
-MAN1 = docs/tide.1 docs/pick.1 docs/picktag.1 docs/pickfile.1
+MAN1 = docs/tide.1
 
 LIBEDIT_OBJS =     \
        lib/buf.o      \
@@ -13,15 +13,13 @@ LIBEDIT_OBJS =     \
        lib/config.o
 
 TEST_BINS =     \
-       tests/tide  \
-       tests/pick  \
        tests/libedit
 
 include config.mk
 
 .PHONY: all docs clean install uninstall test
 
-all: $(BINS) $(MAN1)
+all: $(BINS) test
 
 docs:
        ronn --roff docs/*.md
@@ -33,42 +31,30 @@ clean:
 
 install:
        mkdir -p $(PREFIX)/bin
-       cp -f tcmd $(PREFIX)/bin
-       cp -f tfetch $(PREFIX)/bin
        cp -f tide $(PREFIX)/bin
-       cp -f tide-hl.rb $(PREFIX)/bin
-       cp -f tctl $(PREFIX)/bin
-       cp -f pick $(PREFIX)/bin
        cp -f xcpd $(PREFIX)/bin
-       cp -f pickfile $(PREFIX)/bin
-       cp -f picktag $(PREFIX)/bin
 
 uninstall:
-       rm -f $(PREFIX)/bin/tcmd
-       rm -f $(PREFIX)/bin/tfetch
        rm -f $(PREFIX)/bin/tide
-       rm -f $(PREFIX)/bin/tide-hl.rb
-       rm -f $(PREFIX)/bin/tctl
-       rm -f $(PREFIX)/bin/pick
        rm -f $(PREFIX)/bin/xcpd
-       rm -f $(PREFIX)/bin/pickfile
-       rm -f $(PREFIX)/bin/picktag
 
 test: $(TEST_BINS)
-       @echo "Warning: unit tests disabled temporarily. Re-enable later."
-#      for t in $(TEST_BINS); do ./$$t || exit 1; done
+       for t in $(TEST_BINS); do ./$$t || exit 1; done
+
+bugs:
+       make clean
+       scan-build make
+
+gcov:
+       make clean
+       make GCOV=1 test
 
 libedit.a: $(LIBEDIT_OBJS)
        $(AR) $(ARFLAGS) $@ $^
 
 tide: tide.o libedit.a
-pick: pick.o libedit.a
 xcpd: xcpd.o libedit.a
-tfetch: tfetch.o
-tctl: tctl.o libedit.a
 tests/libedit: tests/libedit.o tests/lib/buf.o tests/lib/utf8.o libedit.a
-tests/tide: tests/tide.o libedit.a
-tests/pick: tests/pick.o libedit.a
 
 # define implicit rule for building binaries
 %: %.o
@@ -76,10 +62,3 @@ tests/pick: tests/pick.o libedit.a
 
 # load generate dependencies
 -include *.d lib/*.d tests/*.d tests/lib/*.d
-
-flaws:
-       -./analyze.sh tide.c lib/*.c
-
-scan-build:
-       make clean
-       scan-build make
index cc931c723108ef808c37da9ffa03fdf9caa0220a..ce4ef1c21daee729ae9a09369e5d5e9c664c9e4d 100644 (file)
--- a/lib/x11.c
+++ b/lib/x11.c
@@ -665,7 +665,9 @@ static void mouse_left(WinRegion id, bool pressed, size_t row, size_t col) {
     uint64_t now = getmillis();
     count = ((now-before) <= (uint64_t)ClickTime ? count+1 : 1);
     before = now;
-    if (win_btnpressed(MouseMiddle)) {
+    if (win_btnpressed(MouseRight)) {
+        puts("fetch tag");
+    }  else if (win_btnpressed(MouseMiddle)) {
         puts("exec with arg");
     } else {
         if (count == 1)
index 566cebd7b4f7de2dbdd820d5618e9c6aa6497fab..e77ecc20f452b48c5f289cc5da4c6e2a5b445153 100644 (file)
 #include <utf.h>
 #include <edit.h>
 
-static Buf TestBuf;
-
-static void onerror(char* msg) {
-}
+static Buf TestBuf = {0};
 
 static void set_buffer_text(char* str) {
-    int i = 0;
-    buf_init(&TestBuf, onerror);
-    TestBuf.crlf = 1;
-    for (Rune* curr = TestBuf.bufstart; curr < TestBuf.bufend; curr++)
-        *curr = '-';
-    while (*str)
-        buf_insert(&TestBuf, false, i++, (Rune)*str++);
+    buf_init(&TestBuf);
+    buf_puts(&TestBuf, str);
 }
 
 static bool buf_text_eq(char* str) {
-    for (unsigned i = 0; i < buf_end(&TestBuf); i++) {
-        //printf("'%c'", buf_get(&TestBuf, i));
-        if ((Rune)*(str++) != buf_get(&TestBuf, i)) {
-            //printf("\n");
-            return false;
-        }
-    }
-    //printf("\n");
-    return true;
+    buf_selall(&TestBuf);
+    char* bstr = buf_gets(&TestBuf);
+    int ret = strcmp(str, bstr);
+    free(bstr);
+    return (ret == 0);
 }
 
 TEST_SUITE(BufferTests) {
     /* Initializing
      *************************************************************************/
     TEST(buf_init should initialize an empty buffer) {
-        Buf buf = {0};
-        buf_init(&buf, (void*)0x12345678);
-        CHECK(buf.modified    == false);
-        CHECK(buf.expand_tabs == config_get_bool(ExpandTabs));
-        CHECK(buf.copy_indent == config_get_bool(CopyIndent));
-        CHECK(buf.charset     == UTF_8);
-        CHECK(buf.crlf        == 0);
-        CHECK(buf.bufsize     == 8192);
-        CHECK(buf.bufstart    != NULL);
-        CHECK(buf.bufend      == buf.bufstart + buf.bufsize);
-        CHECK(buf.gapstart    == buf.bufstart);
-        CHECK(buf.gapend      == buf.bufend);
-        CHECK(buf.undo        == NULL);
-        CHECK(buf.redo        == NULL);
-        CHECK(buf.errfn       == (void*)0x12345678);
-        CHECK(buf.nlines      == 0);
+        buf_init(&TestBuf);
+        CHECK(TestBuf.modified    == false);
+        CHECK(TestBuf.bufsize     == 8192);
+        CHECK(TestBuf.bufstart    != NULL);
+        CHECK(TestBuf.bufend      == TestBuf.bufstart + TestBuf.bufsize);
+        CHECK(TestBuf.gapstart    == TestBuf.bufstart);
+        CHECK(TestBuf.gapend      == TestBuf.bufend);
+        CHECK(TestBuf.undo        == NULL);
+        CHECK(TestBuf.redo        == NULL);
     }
 
     TEST(buf_init shoud free old buffer and reinitialize) {
-        Buf buf = {0};
-        buf_init(&buf, onerror);
-        buf_insert(&buf, false, 0, 'a');
-        buf_init(&buf, (void*)0x12345678);
-        CHECK(buf.modified    == false);
-        CHECK(buf.expand_tabs == config_get_bool(ExpandTabs));
-        CHECK(buf.copy_indent == config_get_bool(CopyIndent));
-        CHECK(buf.charset     == UTF_8);
-        CHECK(buf.crlf        == 0);
-        CHECK(buf.bufsize     == 8192);
-        CHECK(buf.bufstart    != NULL);
-        CHECK(buf.bufend      == buf.bufstart + buf.bufsize);
-        CHECK(buf.gapstart    == buf.bufstart);
-        CHECK(buf.gapend      == buf.bufend);
-        CHECK(buf.undo        == NULL);
-        CHECK(buf.redo        == NULL);
-        CHECK(buf.errfn       == (void*)0x12345678);
-        CHECK(buf.nlines      == 0);
+        buf_init(&TestBuf);
+        buf_putc(&TestBuf, 'a');
+        buf_init(&TestBuf);
+        CHECK(TestBuf.modified    == false);
+        CHECK(TestBuf.bufsize     == 8192);
+        CHECK(TestBuf.bufstart    != NULL);
+        CHECK(TestBuf.bufend      == TestBuf.bufstart + TestBuf.bufsize);
+        CHECK(TestBuf.gapstart    == TestBuf.bufstart);
+        CHECK(TestBuf.gapend      == TestBuf.bufend);
+        CHECK(TestBuf.undo        == NULL);
+        CHECK(TestBuf.redo        == NULL);
     }
 
     /* Loading
      *************************************************************************/
     TEST(buf_load should load a UTF-8 file from disk) {
-        buf_init(&TestBuf, NULL);
-        size_t pos = buf_load(&TestBuf, "testdocs/lorem.txt");
-        CHECK(pos                 == 0);
+        buf_init(&TestBuf);
+        buf_load(&TestBuf, "testdocs/lorem.txt");
         CHECK(TestBuf.modified    == false);
-        CHECK(TestBuf.expand_tabs == true);
-        CHECK(TestBuf.copy_indent == config_get_bool(CopyIndent));
-        CHECK(TestBuf.charset     == UTF_8);
-        CHECK(TestBuf.crlf        == 0);
-        CHECK(TestBuf.bufsize     == 65536);
+        CHECK(TestBuf.bufsize     == 61440);
         CHECK(TestBuf.undo        == NULL);
         CHECK(TestBuf.redo        == NULL);
-        CHECK(TestBuf.errfn       == NULL);
-        CHECK(TestBuf.nlines      == 998);
         CHECK(!strcmp(TestBuf.path, "testdocs/lorem.txt"));
     }
 
     TEST(buf_load should load a non UTF-8 file from disk) {
-        buf_init(&TestBuf, NULL);
-        size_t pos = buf_load(&TestBuf, "testdocs/waf");
-        CHECK(pos                 == 0);
+        buf_init(&TestBuf);
+        buf_load(&TestBuf, "testdocs/waf");
         CHECK(TestBuf.modified    == false);
-        CHECK(TestBuf.expand_tabs == false);
-        CHECK(TestBuf.copy_indent == config_get_bool(CopyIndent));
-        CHECK(TestBuf.charset     == BINARY);
-        CHECK(TestBuf.crlf        == 0);
-        CHECK(TestBuf.bufsize     == 131072);
+        CHECK(TestBuf.bufsize     == 98304);
         CHECK(TestBuf.undo        == NULL);
         CHECK(TestBuf.redo        == NULL);
-        CHECK(TestBuf.errfn       == NULL);
-        CHECK(TestBuf.nlines      == 169);
         CHECK(!strcmp(TestBuf.path, "testdocs/waf"));
     }
 
-    TEST(buf_load should load a file from disk and jump to a specific line) {
-        buf_init(&TestBuf, NULL);
-        size_t pos = buf_load(&TestBuf, "testdocs/lorem.txt:2");
-        CHECK(pos                 == 70);
-        CHECK(TestBuf.modified    == false);
-        CHECK(TestBuf.expand_tabs == true);
-        CHECK(TestBuf.copy_indent == config_get_bool(CopyIndent));
-        CHECK(TestBuf.charset     == UTF_8);
-        CHECK(TestBuf.crlf        == 0);
-        CHECK(TestBuf.bufsize     == 65536);
-        CHECK(TestBuf.undo        == NULL);
-        CHECK(TestBuf.redo        == NULL);
-        CHECK(TestBuf.errfn       == NULL);
-        CHECK(TestBuf.nlines      == 998);
-        CHECK(!strcmp(TestBuf.path, "testdocs/lorem.txt"));
-    }
-
     TEST(buf_load should remove ./ from file path) {
-        buf_init(&TestBuf, NULL);
-        size_t pos = buf_load(&TestBuf, "./testdocs/lorem.txt");
-        CHECK(pos                 == 0);
+        buf_init(&TestBuf);
+        buf_load(&TestBuf, "./testdocs/lorem.txt");
         CHECK(TestBuf.modified    == false);
-        CHECK(TestBuf.expand_tabs == true);
-        CHECK(TestBuf.copy_indent == config_get_bool(CopyIndent));
-        CHECK(TestBuf.charset     == UTF_8);
-        CHECK(TestBuf.crlf        == 0);
-        CHECK(TestBuf.bufsize     == 65536);
+        CHECK(TestBuf.bufsize     == 61440);
         CHECK(TestBuf.undo        == NULL);
         CHECK(TestBuf.redo        == NULL);
-        CHECK(TestBuf.errfn       == NULL);
-        CHECK(TestBuf.nlines      == 998);
         CHECK(!strcmp(TestBuf.path, "testdocs/lorem.txt"));
     }
 
     TEST(buf_reload should reload the file from disk) {
-        buf_init(&TestBuf, NULL);
+        buf_init(&TestBuf);
         buf_load(&TestBuf, "testdocs/waf");
         TestBuf.path = "testdocs/lorem.txt";
         buf_reload(&TestBuf);
         CHECK(TestBuf.modified    == false);
-        CHECK(TestBuf.expand_tabs == true);
-        CHECK(TestBuf.copy_indent == config_get_bool(CopyIndent));
-        CHECK(TestBuf.charset     == UTF_8);
-        CHECK(TestBuf.crlf        == 0);
-        CHECK(TestBuf.bufsize     == 65536);
+        CHECK(TestBuf.bufsize     == 61440);
         CHECK(TestBuf.undo        == NULL);
         CHECK(TestBuf.redo        == NULL);
-        CHECK(TestBuf.errfn       == NULL);
-        CHECK(TestBuf.nlines      == 998);
         CHECK(!strcmp(TestBuf.path, "testdocs/lorem.txt"));
     }
 
     /* Saving
      *************************************************************************/
     TEST(buf_save should save a UTF-8 file to disk) {
-        buf_init(&TestBuf, NULL);
+        buf_init(&TestBuf);
         buf_load(&TestBuf, "testdocs/lorem.txt");
         TestBuf.modified = true;
         buf_save(&TestBuf);
@@ -172,7 +102,7 @@ TEST_SUITE(BufferTests) {
     }
 
     TEST(buf_save should save a non UTF-8 file to disk) {
-        buf_init(&TestBuf, NULL);
+        buf_init(&TestBuf);
         buf_load(&TestBuf, "testdocs/waf");
         TestBuf.modified = true;
         buf_save(&TestBuf);
@@ -180,7 +110,7 @@ TEST_SUITE(BufferTests) {
     }
 
     TEST(buf_save should save a file to disk with unix line endings) {
-        buf_init(&TestBuf, NULL);
+        buf_init(&TestBuf);
         buf_load(&TestBuf, "testdocs/lf.txt");
         TestBuf.modified = true;
         buf_save(&TestBuf);
@@ -188,37 +118,14 @@ TEST_SUITE(BufferTests) {
     }
 
     TEST(buf_save should save a file to disk with dos line endings) {
-        buf_init(&TestBuf, NULL);
+        buf_init(&TestBuf);
         buf_load(&TestBuf, "testdocs/crlf.txt");
         TestBuf.modified = true;
         buf_save(&TestBuf);
         CHECK(TestBuf.modified == false);
     }
 
-    TEST(buf_save should make sure unix file ends witn newline) {
-        buf_init(&TestBuf, NULL);
-        buf_load(&TestBuf, "testdocs/lf.txt");
-        TestBuf.modified = true;
-        size_t end = buf_end(&TestBuf);
-        buf_delete(&TestBuf, end-1, end);
-        CHECK(end-1 == buf_end(&TestBuf));
-        buf_save(&TestBuf);
-        CHECK(end == buf_end(&TestBuf));
-        CHECK(TestBuf.modified == false);
-    }
-
-    TEST(buf_save should make sure dos file ends witn newline) {
-        buf_init(&TestBuf, NULL);
-        buf_load(&TestBuf, "testdocs/crlf.txt");
-        TestBuf.modified = true;
-        size_t end = buf_end(&TestBuf);
-        buf_delete(&TestBuf, end-1, end);
-        CHECK(end-1 == buf_end(&TestBuf));
-        buf_save(&TestBuf);
-        CHECK(end == buf_end(&TestBuf));
-        CHECK(TestBuf.modified == false);
-    }
-
+#if 0
     /* Resizing
      *************************************************************************/
     /* Insertions
@@ -371,11 +278,13 @@ TEST_SUITE(BufferTests) {
         CHECK('c' == buf_get(&TestBuf, 2));
     }
 
+    // buf_end
     TEST(buf_end should return the index just after the last rune in the buffer) {
         set_buffer_text("abc");
         CHECK(3 == buf_end(&TestBuf));
     }
 
+    // buf_iseol
     TEST(buf_iseol should return true if index points to a newline rune) {
         set_buffer_text("abc\ncba");
         CHECK(buf_iseol(&TestBuf, 3));
@@ -391,6 +300,7 @@ TEST_SUITE(BufferTests) {
         set_buffer_text("abc\ncba");
         CHECK(!buf_iseol(&TestBuf, 2));
     }
+#endif
 
     /* Movements
      *************************************************************************/
@@ -456,83 +366,7 @@ TEST_SUITE(BufferTests) {
         CHECK(5 == buf_eol(&TestBuf, 5));
     }
 
-    // Start of Word
-    TEST(buf_bow should return input when pointing to whitespace before word) {
-        set_buffer_text(" abc ");
-        CHECK(0 == buf_bow(&TestBuf, 0));
-    }
-
-    TEST(buf_bow should return 1 when first rune of word) {
-        set_buffer_text(" abc ");
-        CHECK(1 == buf_bow(&TestBuf, 1));
-    }
-
-    TEST(buf_bow should return 1 when second rune of word) {
-        set_buffer_text(" abc ");
-        CHECK(1 == buf_bow(&TestBuf, 2));
-    }
-
-    TEST(buf_bow should return 1 when third rune of word) {
-        set_buffer_text(" abc ");
-        CHECK(1 == buf_bow(&TestBuf, 3));
-    }
-
-    TEST(buf_bow should return input when pointing to whitespace after word) {
-        IGNORE("this may be correct but moving by word is janky right now. revisit later");
-        set_buffer_text(" abc ");
-        CHECK(4 == buf_bow(&TestBuf, 4));
-    }
-
-    // End of Word
-    TEST(buf_eow should return input when pointing to whitespace before word) {
-        IGNORE("this may be correct but moving by word is janky right now. revisit later");
-        set_buffer_text(" abc ");
-        CHECK(0 == buf_eow(&TestBuf, 0));
-    }
-
-    TEST(buf_eow should return 3 when first rune of word) {
-        set_buffer_text(" abc ");
-        CHECK(3 == buf_eow(&TestBuf, 1));
-    }
-
-    TEST(buf_eow should return 3 when second rune of word) {
-        set_buffer_text(" abc ");
-        CHECK(3 == buf_eow(&TestBuf, 2));
-    }
-
-    TEST(buf_eow should return 3 when third rune of word) {
-        set_buffer_text(" abc ");
-        CHECK(3 == buf_eow(&TestBuf, 3));
-    }
-
-    TEST(buf_eow should return input when pointing to whitespace after word) {
-        IGNORE("this may be correct but moving by word is janky right now. revisit later");
-        set_buffer_text(" abc ");
-        CHECK(4 == buf_eow(&TestBuf, 4));
-    }
-
-    // Scan Left
-    TEST(buf_lscan should return location of token to the left) {
-        set_buffer_text("a{bc}");
-        CHECK(1 == buf_lscan(&TestBuf, 4, '{'));
-    }
-
-    TEST(buf_lscan should return input location if token not found) {
-        set_buffer_text("{ab}");
-        CHECK(3 == buf_lscan(&TestBuf, 3, '['));
-    }
-
-    // Scan Right
-    TEST(buf_rscan should return location of token to the right) {
-        set_buffer_text("{ab}c");
-        CHECK(3 == buf_rscan(&TestBuf, 0, '}'));
-    }
-
-    TEST(buf_rscan should return input location if token not found) {
-        set_buffer_text("{ab}c");
-        CHECK(0 == buf_rscan(&TestBuf, 0, ']'));
-    }
-
+#if 0
     // By Rune
     TEST(buf_byrune should do nothing for -1 at beginning of file) {
         set_buffer_text("abc\n");
@@ -597,7 +431,6 @@ TEST_SUITE(BufferTests) {
 
     /* Literal Find
      *************************************************************************/
-#if 0
     TEST(buf_find should find next occurrence of the selection) {
         set_buffer_text("foofodfoo");
         unsigned beg = 0, end = 2;
@@ -619,36 +452,54 @@ TEST_SUITE(BufferTests) {
      *************************************************************************/
     TEST(buf_getcol should return the column associated with the position) {
         set_buffer_text("abcdef");
-        CHECK(4 == buf_getcol(&TestBuf, 4));
+        TestBuf.selection = (Sel){ .end = 4 };
+        buf_getcol(&TestBuf);
+        CHECK(4 == TestBuf.selection.col);
     }
 
     TEST(buf_getcol should return the column associated with the position on second line) {
         set_buffer_text("abcdef\nabcdef");
-        CHECK(0 == buf_getcol(&TestBuf, 7));
+        TestBuf.selection = (Sel){ .end = 7 };
+        buf_getcol(&TestBuf);
+        CHECK(0 == TestBuf.selection.col);
     }
 
     TEST(buf_getcol should handle tab characters) {
         set_buffer_text("\tabcdef");
-        CHECK(4 == buf_getcol(&TestBuf, 1));
+        TestBuf.selection = (Sel){ .end = 1 };
+        buf_getcol(&TestBuf);
+        CHECK(4 == TestBuf.selection.col);
     }
 
     TEST(buf_setcol should set the column to column 1 of second line) {
         set_buffer_text("abc\ndef");
-        CHECK(4 == buf_setcol(&TestBuf, 4, 0));
+        TestBuf.selection = (Sel){ .end = 4, .col = 0 };
+        buf_setcol(&TestBuf);
+        CHECK(0 == TestBuf.selection.col);
+        CHECK(4 == TestBuf.selection.end);
     }
 
     TEST(buf_setcol should set the column to column 2 of second line) {
         set_buffer_text("abc\ndef");
-        CHECK(5 == buf_setcol(&TestBuf, 4, 1));
+        TestBuf.selection = (Sel){ .end = 4, .col = 1 };
+        buf_setcol(&TestBuf);
+        CHECK(1 == TestBuf.selection.col);
+        CHECK(5 == TestBuf.selection.end);
     }
 
     TEST(buf_setcol should handle tabs) {
         set_buffer_text("abc\n\tdef");
-        CHECK(5 == buf_setcol(&TestBuf, 4, 4));
+        TestBuf.selection = (Sel){ .end = 4, .col = 4 };
+        buf_setcol(&TestBuf);
+        CHECK(4 == TestBuf.selection.col);
+        CHECK(5 == TestBuf.selection.end);
     }
 
     TEST(buf_setcol should not set column past the last rune) {
         set_buffer_text("abc\n\tdef");
-        CHECK(8 == buf_setcol(&TestBuf, 4, 100));
+        TestBuf.selection = (Sel){ .end = 4, .col = 100 };
+        buf_setcol(&TestBuf);
+        CHECK(100 == TestBuf.selection.col);
+        CHECK(8 == TestBuf.selection.end);
     }
 }
diff --git a/tests/pick.c b/tests/pick.c
deleted file mode 100644 (file)
index 9e787de..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-#define INCLUDE_DEFS
-#include <atf.h>
-#include <time.h>
-
-// Inculd the source file so we can access everything
-#include "../pick.c"
-
-TEST_SUITE(UnitTests) {
-}
-
-int main(int argc, char** argv) {
-    atf_init(argc,argv);
-    RUN_TEST_SUITE(UnitTests);
-    return atf_print_results();
-}