aboutsummaryrefslogtreecommitdiff
path: root/tests/unit
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2011-01-01 17:33:42 +0100
committerDaniel Stenberg <daniel@haxx.se>2011-01-03 19:38:10 +0100
commit35e1d6538a8767526b9cae66134441b146503a21 (patch)
tree871888fc2da33021b88546f78c33e90add2d675b /tests/unit
parent45cea7196870f2b5e7096a619dc1a9725295ca1a (diff)
unittest: framework for unit-testing
This is the first approach at doing fairly clean and easy to write and debug unit tests.
Diffstat (limited to 'tests/unit')
-rw-r--r--tests/unit/Makefile.am68
-rw-r--r--tests/unit/Makefile.inc8
-rw-r--r--tests/unit/curlcheck.h31
-rw-r--r--tests/unit/unit1300.c34
4 files changed, 141 insertions, 0 deletions
diff --git a/tests/unit/Makefile.am b/tests/unit/Makefile.am
new file mode 100644
index 000000000..69792283f
--- /dev/null
+++ b/tests/unit/Makefile.am
@@ -0,0 +1,68 @@
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+###########################################################################
+AUTOMAKE_OPTIONS = foreign nostdinc
+
+# Specify our include paths here, and do it relative to $(top_srcdir) and
+# $(top_builddir), to ensure that these paths which belong to the library
+# being currently built and tested are searched before the library which
+# might possibly already be installed in the system.
+#
+# $(top_builddir)/include/curl for generated curlbuild.h included from curl.h
+# $(top_builddir)/include for generated curlbuild.h included from lib/setup.h
+# $(top_srcdir)/include is for libcurl's external include files
+# $(top_builddir)/lib is for libcurl's generated lib/curl_config.h file
+# $(top_srcdir)/lib is for libcurl's lib/setup.h and other "borrowed" files
+# $(top_builddir)/ares is for in-tree c-ares's generated ares_build.h file
+# $(top_srcdir)/ares is for in-tree c-ares's external include files
+
+if USE_EMBEDDED_ARES
+INCLUDES = -I$(top_builddir)/include/curl \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include \
+ -I$(top_builddir)/lib \
+ -I$(top_srcdir)/lib \
+ -I$(top_srcdir)/tests/libtest \
+ -I$(top_builddir)/ares \
+ -I$(top_srcdir)/ares
+else
+INCLUDES = -I$(top_builddir)/include/curl \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include \
+ -I$(top_builddir)/lib \
+ -I$(top_srcdir)/lib \
+ -I$(top_srcdir)/tests/libtest
+endif
+
+EXTRA_DIST = Makefile.inc
+
+LDADD = $(top_srcdir)/tests/libtest/first.o $(top_builddir)/lib/libcurl.la \
+ @CURL_LIBS@
+DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+
+# Makefile.inc provides the source defines (TESTUTIL, SUPPORTFILES,
+# noinst_PROGRAMS, lib*_SOURCES, and lib*_CFLAGS)
+include Makefile.inc
+
+if NO_UNDEFINED
+# The -no-undefined flag is crucial to build fine on some platforms
+UNDEF = -no-undefined
+endif
diff --git a/tests/unit/Makefile.inc b/tests/unit/Makefile.inc
new file mode 100644
index 000000000..07d13188b
--- /dev/null
+++ b/tests/unit/Makefile.inc
@@ -0,0 +1,8 @@
+# these files are used in every single unit test program
+
+UNITFILES = curlcheck.h
+
+# These are all unit test programs
+noinst_PROGRAMS = unit1300
+
+unit1300_SOURCES = unit1300.c $(UNITFILES)
diff --git a/tests/unit/curlcheck.h b/tests/unit/curlcheck.h
new file mode 100644
index 000000000..c34f99093
--- /dev/null
+++ b/tests/unit/curlcheck.h
@@ -0,0 +1,31 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#define fail_unless(expr, msg) \
+ if(!(expr)) { \
+ fprintf(stderr, "%s:%d Assertion '%s' failed: %s" , \
+ __FILE__, __LINE__, #expr, msg); \
+ unitfail++; \
+ }
+
+extern int unitfail;
+
+#define UNITTEST_START \
+ int test(char *unused) \
+ { \
+ (void)unused; \
+ unit_setup();
+
+#define UNITTEST_STOP \
+ unit_stop(); \
+ return unitfail; \
+ }
+
diff --git a/tests/unit/unit1300.c b/tests/unit/unit1300.c
new file mode 100644
index 000000000..92c0a7ac9
--- /dev/null
+++ b/tests/unit/unit1300.c
@@ -0,0 +1,34 @@
+#include <stdlib.h>
+#include "curl_config.h"
+#include "setup.h"
+
+#include "llist.h"
+#include "curlcheck.h"
+
+struct curl_llist *llist;
+
+static void test_curl_llist_dtor(void *key , void *value)
+{
+ /* used by the llist API, does nothing here */
+ (void)key;
+ (void)value;
+}
+
+static void unit_setup( void )
+{
+ llist = Curl_llist_alloc( test_curl_llist_dtor );
+}
+
+static void unit_stop( void )
+{
+ Curl_llist_destroy( llist, NULL );
+}
+
+UNITTEST_START
+
+ fail_unless( llist->size == 0 , "list initial size should be zero" );
+ fail_unless( llist->head == NULL , "list head should initiate to NULL" );
+ fail_unless( llist->tail == NULL , "list tail should intiate to NULL" );
+ fail_unless( llist->dtor == test_curl_llist_dtor , "list dtor shold initiate to test_curl_llist_dtor" );
+
+UNITTEST_STOP