From 86d7b7aed52c66d12f361a3ee8dc7a0eb419bdbc Mon Sep 17 00:00:00 2001
From: Přemysl Janouch
Date: Tue, 8 Dec 2015 23:38:02 +0100
Subject: degesch: add a unit test for message wrapping algo
---
.travis.yml | 2 +-
CMakeLists.txt | 17 +++++++++++++++++
degesch.c | 36 ++++++++++++++++++++++++++++++++++++
3 files changed, 54 insertions(+), 1 deletion(-)
diff --git a/.travis.yml b/.travis.yml
index e723324..fc34c79 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -34,6 +34,6 @@ before_script:
script:
- cmake .. -DCMAKE_INSTALL_PREFIX=/usr
-DWANT_READLINE=$readline -DWANT_LIBEDIT=$libedit
- - make
+ - make all test
- cpack -G DEB
- ../test
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c4c5db9..296a0f4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -122,6 +122,23 @@ target_link_libraries (degesch ${project_libraries})
add_executable (kike kike.c kike-replies.c ${common_sources} ${common_headers})
target_link_libraries (kike ${project_libraries})
+# Tests
+function (make_tests_for target_name)
+ get_target_property (sources ${target_name} SOURCES)
+ get_target_property (libraries ${target_name} LINK_LIBRARIES)
+
+ set (test test-${target_name})
+ add_executable (${test} ${sources})
+ target_link_libraries (${test} ${libraries})
+ add_test (NAME ${test} COMMAND ${test})
+ set_target_properties (${test} PROPERTIES COMPILE_DEFINITIONS TESTING)
+endfunction (make_tests_for)
+
+include (CTest)
+if (BUILD_TESTING)
+ make_tests_for (degesch)
+endif (BUILD_TESTING)
+
# Various clang-based diagnostics, loads of fake positives and spam
file (GLOB clang_tidy_sources *.c)
set (clang_tidy_checks misc-* readability-*
diff --git a/degesch.c b/degesch.c
index 14e2c40..2977e09 100644
--- a/degesch.c
+++ b/degesch.c
@@ -11197,6 +11197,42 @@ init_poller_events (struct app_context *ctx)
ctx->autoaway_tmr.user_data = ctx;
}
+// --- Tests -------------------------------------------------------------------
+
+// The application is quite monolithic and can only be partially unit-tested
+
+#ifdef TESTING
+
+static void
+test_wrapping (void)
+{
+ struct str_vector v;
+ str_vector_init (&v);
+
+ static const char *message = " foo bar foobar fóóbárbáz";
+ static const char *split[] =
+ { " foo", "bar", "foob", "ar", "fó", "ób", "árb", "áz" };
+
+ hard_assert (wrap_message (message, 4, &v, NULL));
+ hard_assert (v.len == N_ELEMENTS (split));
+ for (size_t i = 0; i < N_ELEMENTS (split); i++)
+ hard_assert (!strcmp (v.vector[i], split[i]));
+
+ str_vector_free (&v);
+}
+
+int
+main (int argc, char *argv[])
+{
+ struct test test;
+ test_init (&test, argc, argv);
+ test_add_simple (&test, "/wrapping", NULL, test_wrapping);
+ return test_run (&test);
+}
+
+#define main main_shadowed
+#endif // TESTING
+
// --- Main program ------------------------------------------------------------
static const char *g_logo[] =
--
cgit v1.2.3-70-g09d2