diff options
author | Daniel Stenberg <daniel@haxx.se> | 2011-01-01 17:33:42 +0100 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2011-01-03 19:38:10 +0100 |
commit | 35e1d6538a8767526b9cae66134441b146503a21 (patch) | |
tree | 871888fc2da33021b88546f78c33e90add2d675b /tests/unit | |
parent | 45cea7196870f2b5e7096a619dc1a9725295ca1a (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.am | 68 | ||||
-rw-r--r-- | tests/unit/Makefile.inc | 8 | ||||
-rw-r--r-- | tests/unit/curlcheck.h | 31 | ||||
-rw-r--r-- | tests/unit/unit1300.c | 34 |
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 |