Using scanner to have current code of wl_buffer_* static function,
test their behaviour
---
 src/connection.c              |  3 ++
 tests/Makefile.am             |  5 +++-
 tests/test-runner/Makefile.am |  1 +
 tests/wl_buffer-test.c        | 64 +++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 72 insertions(+), 1 deletion(-)
 create mode 100644 tests/wl_buffer-test.c

diff --git a/src/connection.c b/src/connection.c
index 1d8b61b..644fb1f 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -44,6 +44,7 @@
 
 #define DIV_ROUNDUP(n, a) ( ((n) + ((a) - 1)) / (a) )
 
+WL_EXPORT_TEST
 struct wl_buffer {
        char data[4096];
        uint32_t head, tail;
@@ -61,6 +62,7 @@ struct wl_connection {
        int want_flush;
 };
 
+WL_EXPORT_TEST
 static void
 wl_buffer_put(struct wl_buffer *b, const void *data, size_t count)
 {
@@ -141,6 +143,7 @@ wl_buffer_copy(struct wl_buffer *b, void *data, size_t 
count)
        }
 }
 
+WL_EXPORT_TEST
 static uint32_t
 wl_buffer_size(struct wl_buffer *b)
 {
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 4a999b9..6e2001c 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -1,5 +1,6 @@
 SUBDIRS = test-runner
 test_runner_dir = $(top_builddir)/tests/test-runner
+tests_private = $(test_runner_dir)/tests-private.c
 
 TESTS =                                                \
        array-test                              \
@@ -15,7 +16,8 @@ TESTS =                                               \
        socket-test                             \
        queue-test                              \
        signal-test                             \
-       resources-test
+       resources-test                          \
+       wl_buffer-test
 
 check_PROGRAMS =                               \
        $(TESTS)                                \
@@ -37,6 +39,7 @@ socket_test_SOURCES = socket-test.c
 queue_test_SOURCES = queue-test.c
 signal_test_SOURCES = signal-test.c
 resources_test_SOURCES = resources-test.c
+wl_buffer_test_SOURCES = wl_buffer-test.c $(tests_private)
 
 fixed_benchmark_SOURCES = fixed-benchmark.c
 
diff --git a/tests/test-runner/Makefile.am b/tests/test-runner/Makefile.am
index bd7c292..8333bb2 100644
--- a/tests/test-runner/Makefile.am
+++ b/tests/test-runner/Makefile.am
@@ -10,6 +10,7 @@ libtest_helpers_la_SOURCES =  \
        test-helpers.c
 
 scanner_input_files =  \
+       $(top_srcdir)/src/connection.c  \
        scanner-tests.c
 
 noinst_PROGRAMS = scanner-tests
diff --git a/tests/wl_buffer-test.c b/tests/wl_buffer-test.c
new file mode 100644
index 0000000..39c42dd
--- /dev/null
+++ b/tests/wl_buffer-test.c
@@ -0,0 +1,64 @@
+#include "test-runner.h"
+#include "tests-private.h"
+
+/* Assert with formated output */
+#define assertf(cond, ...)                                                     
\
+       do {                                                                    
\
+               if (!(cond)) {                                                  
\
+                       fprintf(stderr, "%s (%s: %d): Assertion %s failed!",    
\
+                                       __FUNCTION__, __FILE__, __LINE__, 
#cond);\
+                       fprintf(stderr, " " __VA_ARGS__);                       
\
+                       putc('\n', stderr);                                     
\
+                       abort();                                                
\
+               }                                                               
\
+       } while (0)
+
+static const char data[] = "abcdefghijklmnopqrstuvwxyz";
+
+TEST(wl_buffer_put_tst)
+{
+       struct wl_buffer b = {.head = 0, .tail = 0};
+       size_t index;
+
+       assert(wl_buffer_size(&b) == 0);
+
+       int i;
+       for (i = 1; i * (sizeof data) <= sizeof b.data; i++) {
+               wl_buffer_put(&b, data, sizeof data);
+
+               assert(b.tail == 0);
+               assertf(b.head == i * (sizeof data),
+                       "head is %u instead of %lu", b.head, i * (sizeof data));
+               assert(wl_buffer_size(&b) == i * sizeof data);
+       }
+
+       /* do overflow */
+       wl_buffer_put(&b, data, sizeof data);
+
+       /* ensure */
+       assert(i * sizeof data > sizeof b.data);
+
+       assertf(MASK(b.head) < sizeof b.data);
+       assert(b.tail == 0);
+       index = sizeof b.data % sizeof data;
+       assertf(strncmp((char *) b.data + sizeof b.data - index, data, index - 
1) == 0,
+               "Should have '%*s', but have '%*s'\n", (int) (index - 1), data,
+               (int) (index - 1), (char *) b.data + sizeof b.data - index);
+       assertf(strncmp(b.data, (char *) data + index, sizeof data - index) == 
0,
+               "Should have '%*s', but have '%*s'\n",
+               (int) (sizeof data - index), data + index,
+               (int) (sizeof data - index), (char *) b.data);
+
+       struct wl_buffer bb = {.head = 0, .tail = 0};
+       wl_buffer_put(&bb, data, sizeof data);
+       assert(strcmp(data, bb.data) == 0);
+}
+
+TEST(wl_buffer_fill_alot)
+{
+       struct wl_buffer b = {.head = 0, .tail = 0};
+       int i;
+
+       for (i = 0; i *sizeof data < 100 * sizeof b.data; i++)
+               wl_buffer_put(&b, data, sizeof data);
+}
-- 
1.8.4.2

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to