Browse Source

started tests and coverage report.

release0.1.5
Georg Hopp 14 years ago
parent
commit
75106d2a62
  1. 2
      .gitignore
  2. 4
      Makefile.am.coverage
  3. 3
      configure.ac
  4. 26
      include/class/class.h
  5. 4
      m4/gcov.m4
  6. 1
      src/http/Makefile.am
  7. 1
      src/logger/Makefile.am
  8. 27
      tests/Makefile.am
  9. 58
      tests/classTest.c
  10. 49
      tests/mock/mock_class.c
  11. 24
      tests/mock/mock_class.h
  12. 18
      tests/runtest.c
  13. 1
      tests/runtest.h

2
.gitignore

@ -24,4 +24,4 @@ coveragereport/
/missing
stamp-h1
src/taskrambler
/tests/classTest

4
Makefile.am.coverage

@ -1,7 +1,7 @@
# Coverage targets
if HAVE_GCOV
#if HAVE_GCOV
.PHONY: clean-gcda
clean-gcda:
@ -24,4 +24,4 @@ if HAVE_GCOV
clean-local: clean-coverage-html
endif # HAVE_GCOV
#endif # HAVE_GCOV

3
configure.ac

@ -4,7 +4,8 @@
AC_PREREQ([2.68])
AC_INIT([taskrambler], [0.0.1], [Georg Hopp <georg@steffers.org>])
LT_INIT
AM_INIT_AUTOMAKE([subdir-objects])
AM_INIT_AUTOMAKE
#AM_INIT_AUTOMAKE([subdir-objects])
AM_SILENT_RULES([yes])
AC_COPYRIGHT([Copyright © 2012 Georg Hopp])
AC_REVISION([$Revision: 0.01 $])

26
include/class/class.h

@ -50,19 +50,19 @@
const char _[sizeof(struct c_##parent)]
#define _NULL NULL
#define CREATE_CLASS(name,_parent,...) \
static struct class c_##name; \
static class_ptr _classInit_(void) { \
c_##name.parent = _##_parent; \
c_##name.init = NULL; \
return &c_##name; \
} \
static struct class c_##name = { \
CLASS_MAGIC, \
NULL, \
sizeof(struct c_##name), \
_classInit_, \
INIT_IFACE_IMPL(__VA_ARGS__) \
#define CREATE_CLASS(name,_parent,...) \
static struct class c_##name; \
static class_ptr _classInit##name##_(void) { \
c_##name.parent = _##_parent; \
c_##name.init = NULL; \
return &c_##name; \
} \
static struct class c_##name = { \
CLASS_MAGIC, \
NULL, \
sizeof(struct c_##name), \
_classInit##name##_, \
INIT_IFACE_IMPL(__VA_ARGS__) \
}; struct class * const _##name = &c_##name
#define INIT_CLASS(class) ((class)->init? (class)->init() : (class))

4
m4/gcov.m4

@ -14,7 +14,7 @@ AC_DEFUN([AC_TDD_GCOV],
[use_gcov=$enableval], [use_gcov=no])
AM_CONDITIONAL(HAVE_GCOV, test "x$use_gcov" = "xyes")
if test "x$use_gcov" = "xyes"; then
# if test "x$use_gcov" = "xyes"; then
# we need gcc:
if test "$GCC" != "yes"; then
AC_MSG_ERROR([GCC is required for --enable-gcov])
@ -72,6 +72,6 @@ AC_DEFUN([AC_TDD_GCOV],
COVERAGE_CXXFLAGS="-O0 -fprofile-arcs -ftest-coverage"
COVERAGE_LDFLAGS="-lgcov"
fi
#fi
]) # AC_TDD_GCOV

1
src/http/Makefile.am

@ -1,4 +1,5 @@
ACLOCAL_AMFLAGS = -I m4
AUTOMAKE_OPTIONS = subdir-objects
MSG = message.c \
message/has_keep_alive.c \

1
src/logger/Makefile.am

@ -1,4 +1,5 @@
ACLOCAL_AMFLAGS = -I m4
AUTOMAKE_OPTIONS = subdir-objects
noinst_LIBRARIES = liblogger.a

27
tests/Makefile.am

@ -1,21 +1,26 @@
ACLOCAL_AMFLAGS = -I m4
#TESTS_ENVIRONMENT = valgrind --error-exitcode=123 --leak-check=full --quiet
#TESTS = cclassTest loggerTest socketTest serverTest
#check_PROGRAMS = cclassTest loggerTest socketTest serverTest
#
#COMMON = runtest.c ../src/interface/class.c
#CCLASS = $(COMMON) mock/class.c
TESTS_ENVIRONMENT = valgrind --error-exitcode=123 --leak-check=full --quiet
TESTS = classTest# loggerTest socketTest serverTest
check_PROGRAMS = classTest# loggerTest socketTest serverTest
COMMON = runtest.c
CLASS = $(COMMON) \
../src/class/interface.c \
../src/class/interface/class.c \
mock/mock_class.c
#LOGGER = $(COMMON) ../src/logger.c ../src/interface/logger.c \
# ../src/logger/stderr.c ../src/logger/syslog.c
#SOCKET = $(LOGGER) ../src/socket.c ../src/socket/listen.c \
# ../src/socket/accept.c ../src/socket/connect.c
#SERVER = $(SOCKET) ../src/server.c ../src/server/run.c \
# ../src/server/close_conn.c ../src/utils/signalHandling.c
#
#cclassTest_SOURCES = $(CCLASS) cclassTest.c
#cclassTest_CFLAGS = -Wall -ggdb -O0 -finline-functions -I ../include -I .. -I .
#
classTest_SOURCES = $(CLASS) classTest.c
classTest_CFLAGS = -Wall -ggdb -O0 -fprofile-arcs -ftest-coverage -I ../include -I .. -I .
classTest_LDFLAGS = -lgcov
#loggerTest_SOURCES = $(LOGGER) loggerTest.c
#loggerTest_CFLAGS = -Wall -ggdb -O0 -I ../include -I .. -I .
#
@ -25,4 +30,4 @@ ACLOCAL_AMFLAGS = -I m4
#serverTest_SOURCES = $(SERVER) serverTest.c
#serverTest_CFLAGS = -Wall -ggdb -O0 -I ../include -I .. -I .
EXTRA_DIST = runtest.h mock/class.h
EXTRA_DIST = runtest.h mock/mock_class.h

58
tests/cclassTest.c → tests/classTest.c

@ -18,15 +18,15 @@
*/
#include <stdio.h>
#include <sys/types.h>
#include <json/json.h>
#include "runtest.h"
#include "mock/class.h"
#include "cclass.h"
#include "mock/mock_class.h"
#include "class.h"
const char testname[] = "cclassTest";
MOCK_CLASS mock = NULL;
MockClass mock = NULL;
static
int
@ -45,7 +45,7 @@ __tearDown()
{
if (NULL != mock) {
ASSERT_OBJECT(mock);
delete(&mock);
delete(mock);
}
return TEST_OK;
@ -56,27 +56,11 @@ static
int
testNew(void)
{
mock = new(MOCK_CLASS, 123);
mock = new(MockClass, 123);
ASSERT_OBJECT_NOT_NULL(mock);
ASSERT_EQUAL(1, _called);
ASSERT_EQUAL(123, mock_class_getValue(mock));
return TEST_OK;
}
static
int
testNewFromJson(void)
{
struct json_object * json = json_object_new_int(123);
mock = newFromJson(MOCK_CLASS, json);
json_object_put(json);
ASSERT_OBJECT_NOT_NULL(mock);
ASSERT_EQUAL(1, _called);
ASSERT_EQUAL(123, mock_class_getValue(mock));
ASSERT_EQUAL(123, mockClassGetValue(mock));
return TEST_OK;
}
@ -85,12 +69,12 @@ static
int
testDelete(void)
{
mock = new(MOCK_CLASS, 123);
mock = new(MockClass, 123);
ASSERT_NOT_NULL(mock);
_reset();
delete(&mock);
delete(mock);
ASSERT_NULL(mock);
ASSERT_EQUAL(1, _called);
@ -98,33 +82,9 @@ testDelete(void)
return TEST_OK;
}
static
int
testToJson(void)
{
struct json_object * json = NULL;
mock = new(MOCK_CLASS, 123);
int value;
_reset();
toJson(mock, &json);
ASSERT_NOT_NULL(json);
value = json_object_get_int(json);
json_object_put(json);
ASSERT_EQUAL(123, value);
ASSERT_EQUAL(1, _called);
return TEST_OK;
}
const testfunc tests[] = {
testNew,
testNewFromJson,
testDelete,
testToJson
};
const size_t count = FUNCS_COUNT(tests);

49
tests/mock/class.c → tests/mock/mock_class.c

@ -18,54 +18,55 @@
*/
#include <assert.h>
#include <json/json.h>
#include <stdarg.h>
#include "cclass.h"
#include "class.h"
#include "mock_class.h"
char _called;
INIT_CLASS(MOCK_CLASS);
__construct(MOCK_CLASS)
void
_reset()
{
_called = 1;
this->value = va_arg(* params, int);
_called = 0;
}
__jsonConst(MOCK_CLASS)
static
inline
int
mockCtor(void * _this, va_list * params)
{
MockClass this = _this;
_called = 1;
assert(json_type_int == json_object_get_type(json));
this->value = va_arg(* params, int);
this->value = json_object_get_int(json);
return 0;
}
__clear(MOCK_CLASS) {}
__destruct(MOCK_CLASS)
static
inline
void
mockDtor(void * _this)
{
_called = 1;
}
__toJson(MOCK_CLASS)
{
*json = json_object_new_int(this->value);
_called = 1;
}
INIT_IFACE(Class, mockCtor, mockDtor, NULL);
CREATE_CLASS(MockClass, NULL, IFACE(Class));
/**
* ~~~ method implementations ~~~~~~~~
*/
int
mock_class_getValue(MOCK_CLASS this)
mockClassGetValue(MockClass this)
{
return this->value;
}
void
mock_class_setValue(MOCK_CLASS this, int value)
mockClassSetValue(MockClass this, int value)
{
this->value = value;
}
@ -76,13 +77,7 @@ mock_class_setValue(MOCK_CLASS this, int value)
void *
getConstruct()
{
return __construct;
}
void *
getJsonConst()
{
return __jsonConst;
return mockCtor;
}
// vim: set et ts=4 sw=4:

24
tests/mock/class.h → tests/mock/mock_class.h

@ -20,25 +20,20 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __MOCK_CLASS_H__
#define __MOCK_CLASS_H__
#ifndef __MOCK_MOCK_CLASS_H__
#define __MOCK_MOCK_CLASS_H__
#include "cclass.h"
#include "class.h"
extern char _called;
#ifndef _RESET
#define _RESET
void
inline
_reset()
{
_called = 0;
}
#endif//_RESET
void _reset();
#endif // _RESET
CLASS(MOCK_CLASS) {
CLASS(MockClass) {
int value;
};
@ -46,8 +41,9 @@ CLASS(MOCK_CLASS) {
* ~~~ method declarations ~~~~~~~~
*/
int mock_class_getValue(MOCK_CLASS this);
void mock_class_setValue(MOCK_CLASS this, int value);
int mockClassGetValue(MockClass this);
void mockClassSetValue(MockClass this, int value);
#endif//__MOCK_MOCK_CLASS_H__
#endif//__MOCK_CLASS_H__
// vim: set et ts=4 sw=4:

18
tests/runtest.c

@ -22,7 +22,7 @@
#include <sys/types.h>
#include "runtest.h"
#include "cclass.h"
#include "class.h"
#define TEST_OK_CHAR '.'
@ -37,15 +37,23 @@ const char results[3] = {
};
int
isObjectNull(void * _object)
isObject(void * object)
{
const CCLASS * class = _object - sizeof(CCLASS);
class_ptr class = GET_CLASS(object);
if (! isObject(_object)) {
return (class->magic == CLASS_MAGIC);
}
int
isObjectNull(void * object)
{
class_ptr class = GET_CLASS(object);
if (! isObject(object)) {
return 0;
}
return isMemNull(_object, (*class)->size);
return isMemNull(object, class->object_size);
}
int

1
tests/runtest.h

@ -130,6 +130,7 @@ extern int (* const tearDown)();
int isMemNull(void * _mem, size_t size);
int isObjectNull(void * _object);
int isObject(void * _object);
#endif//__RUNTEST_h__
// vim: set et ts=4 sw=4:
Loading…
Cancel
Save