From c693c54976572a502d7a12446d4fa1e7216c096a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Wilfried=20G=C3=B6esgens?= Date: Sat, 5 Sep 2009 15:51:05 +0000 Subject: [PATCH] * start a unit-test-suite with http://cunit.sourceforge.net/ So far only some basics of StrBuf are tested. --- libcitadel/configure.in | 8 +- libcitadel/tests/Makefile.in | 54 +++++ libcitadel/tests/stringbuf_test.c | 320 ++++++++++++++++++++++++++++++ libcitadel/tests/stringbuf_test.h | 14 ++ 4 files changed, 394 insertions(+), 2 deletions(-) create mode 100644 libcitadel/tests/Makefile.in create mode 100644 libcitadel/tests/stringbuf_test.c create mode 100644 libcitadel/tests/stringbuf_test.h diff --git a/libcitadel/configure.in b/libcitadel/configure.in index 62deba686..90b057e2c 100755 --- a/libcitadel/configure.in +++ b/libcitadel/configure.in @@ -9,7 +9,7 @@ AC_INIT(libcitadel, 7.63, https://uncensored.citadel.org) AC_CONFIG_SRCDIR(Makefile.in) AC_CONFIG_AUX_DIR(conftools) - +AC_CONFIG_SRCDIR(tests/Makefile.in) dnl dnl Increment LIBREVISION if source code has changed at all @@ -72,6 +72,10 @@ if test "x$ok_zlib" = xyes ; then AC_DEFINE(HAVE_ZLIB,[],[whether we have zlib]) fi +AC_CHECK_HEADER(CUnit/CUnit.h, [AC_DEFINE(ENABLE_TESTS, [], [whether we should compile the test-suite])]) + + + AC_CHECK_HEADERS(iconv.h) @@ -165,7 +169,7 @@ AC_C_CONST AC_TYPE_SIZE_T AC_CHECK_FUNCS(memmove bcopy) -AC_CONFIG_FILES(Makefile libcitadel.pc) +AC_CONFIG_FILES(Makefile libcitadel.pc tests/Makefile) AC_CONFIG_HEADER(sysdep.h) AC_OUTPUT diff --git a/libcitadel/tests/Makefile.in b/libcitadel/tests/Makefile.in new file mode 100644 index 000000000..7081a29ff --- /dev/null +++ b/libcitadel/tests/Makefile.in @@ -0,0 +1,54 @@ +# $Id: Makefile.in 7752 2009-08-29 10:37:43Z dothebart $ + +AUTOCONF=@AUTOCONF@ +CC=@CC@ +CFLAGS=@CFLAGS@ +DEFS=@DEFS@ +INSTALL=@INSTALL@ +LIBOBJS=@LIBOBJS@ -lcunit -lcitadel +LIBS=@LIBS@ +LDFLAGS=@LDFLAGS@ -L ../lib/.libs +SED=@SED@ +LCUNIT_DEFS= +srcdir=../ +prefix=@prefix@ +top_builddir=`pwd` + +# End of configuration section + +TARGETS=stringbuf_test +all: $(TARGETS) + + +.SUFFIXES: .cpp .c .o + +clean: + rm -f *.o + +distclean: clean + rm -f Makefile config.cache config.log config.status \ + po/Makefile \ + $(srcdir)/TAGS + +stringbuf_test: $(LIBOBJS) stringbuf_test.o + $(CC) $(LDFLAGS) $(LIBOBJS) $(LIBS) \ + stringbuf_test.o \ + -o stringbuf_test \ + $(LIBS) + +.c.o: + $(CC) $(CFLAGS) $(DEFS) -c $< + +Makefile: $(srcdir)/tests/Makefile.in $(srcdir)/config.status + CONFIG_FILES=Makefile CONFIG_HEADERS= $(SHELL) ./config.status + +config.status: $(srcdir)/configure + $(SHELL) ./config.status --recheck + +$(srcdir)/configure: $(srcdir)/configure.ac $(srcdir)/aclocal.m4 + cd $(srcdir) && $(AUTOCONF) + +$(srcdir)/aclocal.m4: $(srcdir)/acinclude.m4 + cd $(srcdir) && $(ACLOCAL) + + diff --git a/libcitadel/tests/stringbuf_test.c b/libcitadel/tests/stringbuf_test.c new file mode 100644 index 000000000..48143b8ad --- /dev/null +++ b/libcitadel/tests/stringbuf_test.c @@ -0,0 +1,320 @@ + +/* + * CUnit - A Unit testing framework library for C. + * Copyright (C) 2001 Anil Kumar + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include +#include + +#include "stringbuf_test.h" +#include "../lib/libcitadel.h" + +static int success_init(void) { return 0; } +static int success_clean(void) { return 0; } + +static void testSuccess1(void) { CU_ASSERT(1); } +static void testSuccess2(void) { CU_ASSERT(1); } +static void testSuccess3(void) { CU_ASSERT(1); } + +static int group_failure_init(void) { return 1;} +static int group_failure_clean(void) { return 1; } + +static void testGroupFailure1(void) { CU_ASSERT(0); } +static void testGroupFailure2(void) { CU_ASSERT(2); } + +static void testfailure1(void) { CU_ASSERT(12 <= 10); } +static void testfailure2(void) { CU_ASSERT(2); } +static void testfailure3(void) { CU_ASSERT(3); } +/* +static void test1(void) +{ + CU_ASSERT((char *)2 != "THis is positive test."); + CU_ASSERT((char *)2 == "THis is negative test. test 1"); +} + +static void test2(void) +{ + CU_ASSERT((char *)2 != "THis is positive test."); + CU_ASSERT((char *)3 == "THis is negative test. test 2"); +} +*/ +static void TestCreateBuf(void) +{ + StrBuf *Buf; + StrBuf *Buf2; + long len; + long i; + + Buf = NewStrBuf(); + CU_ASSERT(Buf != NULL); + FreeStrBuf(&Buf); + + CU_ASSERT(Buf == NULL); + Buf = NewStrBufPlain(HKEY("ABC")); + CU_ASSERT(StrLength(Buf) == 3); + CU_ASSERT_NSTRING_EQUAL("ABC", ChrPtr(Buf), 3); + + len = StrLength(Buf); + for (i=0; i< 500; i ++) + { + StrBufAppendBufPlain(Buf, HKEY("ABC"), 0); + len += 3; + CU_ASSERT(StrLength(Buf) == len); + } + StrBufShrinkToFit(Buf, 1); + FreeStrBuf(&Buf); + CU_ASSERT(Buf == NULL); + + Buf = NewStrBufPlain(HKEY("ABC")); + len = StrLength(Buf); + for (i=0; i< 500; i ++) + { + StrBufAppendPrintf(Buf, "%s", "ABC"); + len += 3; + CU_ASSERT(StrLength(Buf) == len); + } + StrBufShrinkToFit(Buf, 1); + + Buf2 = NewStrBufDup(Buf); + CU_ASSERT(StrLength(Buf) == StrLength(Buf2)); + + CU_ASSERT_NSTRING_EQUAL(ChrPtr(Buf2), ChrPtr(Buf), StrLength(Buf2)); + + CU_ASSERT(StrBufIsNumber(Buf) == 0); + + FlushStrBuf(Buf2); + CU_ASSERT(StrLength(Buf2) == 0); + + FLUSHStrBuf(Buf); + CU_ASSERT(StrLength(Buf) == 0); + + FreeStrBuf(&Buf); + FreeStrBuf(&Buf2); + CU_ASSERT(Buf == NULL); + CU_ASSERT(Buf2 == NULL); + + + Buf = NewStrBufPlain(HKEY("123456")); + CU_ASSERT(StrBufIsNumber(Buf) == 1); + + + +} + +static void testSuccessAssertTrue(void) +{ + CU_ASSERT_TRUE(CU_TRUE); + CU_ASSERT_TRUE(!CU_FALSE); +} + +static void testSuccessAssertFalse(void) +{ + CU_ASSERT_FALSE(CU_FALSE); + CU_ASSERT_FALSE(!CU_TRUE); +} + +static void testSuccessAssertEqual(void) +{ + CU_ASSERT_EQUAL(10, 10); + CU_ASSERT_EQUAL(0, 0); + CU_ASSERT_EQUAL(0, -0); + CU_ASSERT_EQUAL(-12, -12); +} + +static void testSuccessAssertNotEqual(void) +{ + CU_ASSERT_NOT_EQUAL(10, 11); + CU_ASSERT_NOT_EQUAL(0, -1); + CU_ASSERT_NOT_EQUAL(-12, -11); +} + +static void testSuccessAssertPtrEqual(void) +{ + CU_ASSERT_PTR_EQUAL((void*)0x100, (void*)0x100); +} + +static void testSuccessAssertPtrNotEqual(void) +{ + CU_ASSERT_PTR_NOT_EQUAL((void*)0x100, (void*)0x101); +} + +static void testSuccessAssertPtrNull(void) +{ + CU_ASSERT_PTR_NULL(NULL); + CU_ASSERT_PTR_NULL(0x0); +} + +static void testSuccessAssertPtrNotNull(void) +{ + CU_ASSERT_PTR_NOT_NULL((void*)0x23); +} + +static void testSuccessAssertStringEqual(void) +{ + char str1[] = "test" ; + char str2[] = "test" ; + + CU_ASSERT_STRING_EQUAL(str1, str2); +} + +static void testSuccessAssertStringNotEqual(void) +{ + char str1[] = "test" ; + char str2[] = "testtsg" ; + + CU_ASSERT_STRING_NOT_EQUAL(str1, str2); +} + +static void testSuccessAssertNStringEqual(void) +{ + char str1[] = "test" ; + char str2[] = "testgfsg" ; + + CU_ASSERT_NSTRING_EQUAL(str1, str2, strlen(str1)); + CU_ASSERT_NSTRING_EQUAL(str1, str1, strlen(str1)); + CU_ASSERT_NSTRING_EQUAL(str1, str1, strlen(str1) + 1); +} + +static void testSuccessAssertNStringNotEqual(void) +{ + char str1[] = "test" ; + char str2[] = "teet" ; + char str3[] = "testgfsg" ; + + CU_ASSERT_NSTRING_NOT_EQUAL(str1, str2, 3); + CU_ASSERT_NSTRING_NOT_EQUAL(str1, str3, strlen(str1) + 1); +} + +static void testSuccessAssertDoubleEqual(void) +{ + CU_ASSERT_DOUBLE_EQUAL(10, 10.0001, 0.0001); + CU_ASSERT_DOUBLE_EQUAL(10, 10.0001, -0.0001); + CU_ASSERT_DOUBLE_EQUAL(-10, -10.0001, 0.0001); + CU_ASSERT_DOUBLE_EQUAL(-10, -10.0001, -0.0001); +} + +static void testSuccessAssertDoubleNotEqual(void) +{ + CU_ASSERT_DOUBLE_NOT_EQUAL(10, 10.001, 0.0001); + CU_ASSERT_DOUBLE_NOT_EQUAL(10, 10.001, -0.0001); + CU_ASSERT_DOUBLE_NOT_EQUAL(-10, -10.001, 0.0001); + CU_ASSERT_DOUBLE_NOT_EQUAL(-10, -10.001, -0.0001); +} + +static void AddTests(void) +{ + CU_pSuite pGroup = NULL; + CU_pTest pTest = NULL; + + pGroup = CU_add_suite("Sucess", success_init, success_clean); + pTest = CU_add_test(pGroup, "testSuccess1", testSuccess1); + pTest = CU_add_test(pGroup, "testSuccess2", testSuccess2); + pTest = CU_add_test(pGroup, "testSuccess3", testSuccess3); + + pGroup = CU_add_suite("failure", NULL, NULL); + pTest = CU_add_test(pGroup, "testfailure1", testfailure1); + pTest = CU_add_test(pGroup, "testfailure2", testfailure2); + pTest = CU_add_test(pGroup, "testfailure3", testfailure3); + + pGroup = CU_add_suite("group_failure", group_failure_init, group_failure_clean); + pTest = CU_add_test(pGroup, "testGroupFailure1", testGroupFailure1); + pTest = CU_add_test(pGroup, "testGroupFailure2", testGroupFailure2); +} + +static void AddStrBufSimlpeTests(void) +{ + CU_pSuite pGroup = NULL; + CU_pTest pTest = NULL; + + pGroup = CU_add_suite("TestStringBufSimpleAppenders", NULL, NULL); + pTest = CU_add_test(pGroup, "testCreateBuf", TestCreateBuf); + + + +/* + pGroup = CU_add_suite("TestBooleanAssert", NULL, NULL); + pTest = CU_add_test(pGroup, "testSuccessAssertTrue", testSuccessAssertTrue); + pTest = CU_add_test(pGroup, "testSuccessAssertFalse", testSuccessAssertFalse); + + pGroup = CU_add_suite("TestEqualityAssert", NULL, NULL); + pTest = CU_add_test(pGroup, "testSuccessAssertEqual", testSuccessAssertEqual); + pTest = CU_add_test(pGroup, "testSuccessAssertNotEqual", testSuccessAssertNotEqual); + + pGroup = CU_add_suite("TestPointerAssert", NULL, NULL); + pTest = CU_add_test(pGroup, "testSuccessAssertPtrEqual", testSuccessAssertPtrEqual); + pTest = CU_add_test(pGroup, "testSuccessAssertPtrNotEqual", testSuccessAssertPtrNotEqual); + + pGroup = CU_add_suite("TestNullnessAssert", NULL, NULL); + pTest = CU_add_test(pGroup, "testSuccessAssertPtrNull", testSuccessAssertPtrNull); + pTest = CU_add_test(pGroup, "testSuccessAssertPtrNotNull", testSuccessAssertPtrNotNull); + + pGroup = CU_add_suite("TestStringAssert", NULL, NULL); + pTest = CU_add_test(pGroup, "testSuccessAssertStringEqual", testSuccessAssertStringEqual); + pTest = CU_add_test(pGroup, "testSuccessAssertStringNotEqual", testSuccessAssertStringNotEqual); + + pGroup = CU_add_suite("TestNStringAssert", NULL, NULL); + pTest = CU_add_test(pGroup, "testSuccessAssertNStringEqual", testSuccessAssertNStringEqual); + pTest = CU_add_test(pGroup, "testSuccessAssertNStringNotEqual", testSuccessAssertNStringNotEqual); + + pGroup = CU_add_suite("TestDoubleAssert", NULL, NULL); + pTest = CU_add_test(pGroup, "testSuccessAssertDoubleEqual", testSuccessAssertDoubleEqual); + pTest = CU_add_test(pGroup, "testSuccessAssertDoubleNotEqual", testSuccessAssertDoubleNotEqual); +*/ +} + + +int main(int argc, char* argv[]) +{ + setvbuf(stdout, NULL, _IONBF, 0); + + StartLibCitadel(8); + if (argc > 1) { + CU_BOOL Run = CU_FALSE ; + + CU_set_output_filename("TestAutomated"); + if (CU_initialize_registry()) { + printf("\nInitialize of test Registry failed."); + } + + if (!strcmp("--test", argv[1])) { + Run = CU_TRUE ; + AddTests(); + } + else if (!strcmp("--atest", argv[1])) { + Run = CU_TRUE ; + AddStrBufSimlpeTests(); + } + else if (!strcmp("--alltest", argv[1])) { + Run = CU_TRUE ; + AddTests(); +// AddAssertTests(); + } + + if (CU_TRUE == Run) { + //CU_console_run_tests(); + printf("\nTests completed with return value %d.\n", CU_basic_run_tests()); + + ///CU_automated_run_tests(); + } + + CU_cleanup_registry(); + } + + return 0; +} diff --git a/libcitadel/tests/stringbuf_test.h b/libcitadel/tests/stringbuf_test.h new file mode 100644 index 000000000..5199378bc --- /dev/null +++ b/libcitadel/tests/stringbuf_test.h @@ -0,0 +1,14 @@ + +#ifndef CUNIT_AUTOMATED_H_SEEN +#define CUNIT_AUTOMATED_H_SEEN + +#include +#include + + +CU_EXPORT void CU_automated_run_tests(void); +CU_EXPORT CU_ErrorCode CU_list_tests_to_file(void); +CU_EXPORT void CU_set_output_filename(const char* szFilenameRoot); + + +#endif /* CUNIT_AUTOMATED_H_SEEN */ -- 2.30.2