cunit.c
changeset 0 af501b0c1716
child 8 96d16dfe787a
new file mode 100644
--- /dev/null
+++ b/cunit.c
@@ -0,0 +1,135 @@
+/*
+ *  Simple example of a CUnit unit test.
+ *
+ *  This program (crudely) demonstrates a very simple "black box"
+ *  test of the standard library functions fprintf() and fread().
+ *  It uses suite initialization and cleanup functions to open
+ *  and close a common temporary file used by the test functions.
+ *  The test functions then write to and read from the temporary
+ *  file in the course of testing the library functions.
+ *
+ *  The 2 test functions are added to a single CUnit suite, and
+ *  then run using the CUnit Basic interface.  The output of the
+ *  program (on CUnit version 2.0-2) is:
+ *
+ *           CUnit : A Unit testing framework for C.
+ *           http://cunit.sourceforge.net/
+ *
+ *       Suite: Suite_1
+ *         Test: test of fprintf() ... passed
+ *         Test: test of fread() ... passed
+ *
+ *       --Run Summary: Type      Total     Ran  Passed  Failed
+ *                      suites        1       1     n/a       0
+ *                      tests         2       2       2       0
+ *                      asserts       5       5       5       0
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include "CUnit/Basic.h"
+
+/* Pointer to the file used by the tests. */
+static FILE *temp_file = NULL;
+
+/* The suite initialization function.
+ * Opens the temporary file used by the tests.
+ * Returns zero on success, non-zero otherwise.
+ */
+int init_suite1 (void)
+{
+    if (NULL == (temp_file = fopen ("temp.txt", "w+"))) {
+        return -1;
+    } else {
+        return 0;
+    }
+}
+
+/* The suite cleanup function.
+ * Closes the temporary file used by the tests.
+ * Returns zero on success, non-zero otherwise.
+ */
+int clean_suite1 (void)
+{
+    if (0 != fclose (temp_file)) {
+        return -1;
+    } else {
+        temp_file = NULL;
+        return 0;
+    }
+}
+
+/* Simple test of fprintf().
+ * Writes test data to the temporary file and checks
+ * whether the expected number of bytes were written.
+ */
+void testFPRINTF (void)
+{
+    int i1 = 10;
+
+    if (NULL != temp_file) {
+        CU_ASSERT (0 == fprintf (temp_file, ""));
+        CU_ASSERT (2 == fprintf (temp_file, "Q\n"));
+        CU_ASSERT (7 == fprintf (temp_file, "i1 = %d", i1));
+    }
+}
+
+/* Simple test of fread().
+ * Reads the data previously written by testFPRINTF()
+ * and checks whether the expected characters are present.
+ * Must be run after testFPRINTF().
+ */
+void testFREAD (void)
+{
+    char buffer[20];
+
+    if (NULL != temp_file) {
+        rewind (temp_file);
+        CU_ASSERT (9 == fread (buffer, sizeof (unsigned char), 20, temp_file));
+        CU_ASSERT (0 == strncmp (buffer, "Q\ni1 = 10", 9));
+    }
+}
+
+/* The main() function for setting up and running the tests.
+ * Returns a CUE_SUCCESS on successful running, another
+ * CUnit error code on failure.
+ */
+int main ()
+{
+    CU_pSuite pSuite = NULL;
+
+    /*
+     * initialize the CUnit test registry
+     */
+    if (CUE_SUCCESS != CU_initialize_registry ())
+        return CU_get_error ();
+
+    /*
+     * add a suite to the registry
+     */
+    pSuite = CU_add_suite ("Suite_1", init_suite1, clean_suite1);
+    if (NULL == pSuite) {
+        CU_cleanup_registry ();
+        return CU_get_error ();
+    }
+
+    /*
+     * add the tests to the suite
+     */
+    /*
+     * NOTE - ORDER IS IMPORTANT - MUST TEST fread() AFTER fprintf()
+     */
+    if ((NULL == CU_add_test (pSuite, "test of fprintf()", testFPRINTF)) ||
+        (NULL == CU_add_test (pSuite, "test of   fread()", testFREAD))) {
+        CU_cleanup_registry ();
+        return CU_get_error ();
+    }
+
+    /*
+     * Run all tests using the CUnit Basic interface
+     */
+    CU_basic_set_mode (CU_BRM_VERBOSE);
+    CU_basic_run_tests ();
+    CU_cleanup_registry ();
+    return CU_get_error ();
+}