example: Add an exampele to test exception handling.
authorAndreas Schneider <asn@cryptomilk.org>
Wed, 11 Dec 2013 17:52:12 +0000 (18:52 +0100)
committerAndreas Schneider <asn@cryptomilk.org>
Wed, 11 Dec 2013 17:52:12 +0000 (18:52 +0100)
example/CMakeLists.txt
example/segfault_test.c [new file with mode: 0644]

index c2d34239afea517b9a5520dc559c30389902c9be..d490b13bf060104cf8903ad04d5f527fbf1084bb 100644 (file)
@@ -20,6 +20,18 @@ target_link_libraries(fixture_test ${CMOCKA_SHARED_LIBRARY})
 
 add_test(fixture_test ${CMAKE_CURRENT_BINARY_DIR}/fixture_test)
 
+# segfault test
+add_executable(segfault_test segfault_test.c)
+target_link_libraries(segfault_test ${CMOCKA_SHARED_LIBRARY})
+
+add_test(segfault_test ${CMAKE_CURRENT_BINARY_DIR}/segfault_test)
+set_tests_properties(
+    segfault_test
+        PROPERTIES
+        PASS_REGULAR_EXPRESSION
+        "Test failed with exception: (Segmentation fault|11)"
+)
+
 add_executable(calculator_test calculator.c calculator_test.c)
 target_link_libraries(calculator_test ${CMOCKA_SHARED_LIBRARY})
 
diff --git a/example/segfault_test.c b/example/segfault_test.c
new file mode 100644 (file)
index 0000000..5727d1e
--- /dev/null
@@ -0,0 +1,28 @@
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include <stdlib.h>
+
+struct test_segv {
+    int x;
+    int y;
+};
+
+static void test_segfault_recovery(void **state)
+{
+    struct test_segv *s = NULL;
+
+    (void) state; /* unused */
+
+    s->x = 1;
+}
+
+int main(void) {
+    const UnitTest tests[] = {
+        unit_test(test_segfault_recovery),
+    };
+
+    return run_tests(tests);
+}