Commit c2bc1b06597b19dc0ecb8f1e733f724325d54951
1 parent
ffe14cc4
the new testing framework works and the tests for cclass are done...actually i t…
…ry to figure out how to tell autotools to build this correctly.
Showing
15 changed files
with
343 additions
and
94 deletions
| ... | ... | @@ -10,7 +10,7 @@ |
| 10 | 10 | |
| 11 | 11 | |
| 12 | 12 | void |
| 13 | -setHashString(struct DYNTYPE_HASH * hash, const char * key, const char * value) | |
| 13 | +setHashString(struct DYNTYPE_HASH * hash, const char * const key, const char * value) | |
| 14 | 14 | { |
| 15 | 15 | struct DYNTYPE * dyn; |
| 16 | 16 | |
| ... | ... | @@ -19,7 +19,7 @@ setHashString(struct DYNTYPE_HASH * hash, const char * key, const char * value) |
| 19 | 19 | } |
| 20 | 20 | |
| 21 | 21 | void |
| 22 | -setHashInt(struct DYNTYPE_HASH * hash, const char * key, const int value) | |
| 22 | +setHashInt(struct DYNTYPE_HASH * hash, const char * const key, const int value) | |
| 23 | 23 | { |
| 24 | 24 | struct DYNTYPE * dyn; |
| 25 | 25 | |
| ... | ... | @@ -27,12 +27,21 @@ setHashInt(struct DYNTYPE_HASH * hash, const char * key, const int value) |
| 27 | 27 | dyntype_hash_set(hash, key, dyn); |
| 28 | 28 | } |
| 29 | 29 | |
| 30 | +void | |
| 31 | +deleteHashValue(struct DYNTYPE_HASH * hash, const char * const key) | |
| 32 | +{ | |
| 33 | + struct DYNTYPE * dyn = dyntype_hash_get(hash, key); | |
| 34 | + | |
| 35 | + delete(&dyn); | |
| 36 | +} | |
| 37 | + | |
| 30 | 38 | int |
| 31 | 39 | main(int argc, char * argv[]) |
| 32 | 40 | { |
| 33 | 41 | struct CRYPT * crypt; |
| 34 | 42 | struct PACKET * packet; |
| 35 | 43 | struct DYNTYPE_HASH * data; |
| 44 | + struct DYNTYPE * _clear; | |
| 36 | 45 | struct json_object * json; |
| 37 | 46 | const char * json_str; |
| 38 | 47 | char * encrypted; |
| ... | ... | @@ -67,7 +76,7 @@ main(int argc, char * argv[]) |
| 67 | 76 | crypt = new(CRYPT, MCRYPT_RIJNDAEL_256, MCRYPT_CFB); |
| 68 | 77 | encrypted = crypt_encrypt(crypt, json_str, pass, &length); |
| 69 | 78 | |
| 70 | - delete(crypt); | |
| 79 | + delete(&crypt); | |
| 71 | 80 | json_object_put(json); |
| 72 | 81 | |
| 73 | 82 | b64d = calloc(BASE64_LENGTH(length), sizeof(char)); |
| ... | ... | @@ -80,13 +89,15 @@ main(int argc, char * argv[]) |
| 80 | 89 | printf("%s\n", b64d); |
| 81 | 90 | free(b64d); |
| 82 | 91 | |
| 83 | - delete(dyntype_hash_get(data, "#C#")); | |
| 84 | - delete(dyntype_hash_get(data, "usr")); | |
| 85 | - delete(dyntype_hash_get(data, "pas")); | |
| 86 | - delete(dyntype_hash_get(data, "val")); | |
| 87 | - delete(packet_getHeader(packet)); | |
| 88 | - delete(packet_getData(packet)); | |
| 89 | - delete(packet); | |
| 92 | + deleteHashValue(data, "#C#"); | |
| 93 | + deleteHashValue(data, "usr"); | |
| 94 | + deleteHashValue(data, "pas"); | |
| 95 | + deleteHashValue(data, "val"); | |
| 96 | + _clear = packet_getHeader(packet); | |
| 97 | + delete(&_clear); | |
| 98 | + _clear = packet_getData(packet); | |
| 99 | + delete(&_clear); | |
| 100 | + delete(&packet); | |
| 90 | 101 | |
| 91 | 102 | |
| 92 | 103 | return 0; | ... | ... |
| ... | ... | @@ -60,13 +60,14 @@ newFromJson(const void * _class, struct json_object * json) |
| 60 | 60 | void |
| 61 | 61 | delete(void * _object) |
| 62 | 62 | { |
| 63 | - const struct CCLASS ** class = _object; | |
| 63 | + const struct CCLASS ** class = *(void**)_object; | |
| 64 | 64 | |
| 65 | - if (_object && *class && (*class)->__destruct) { | |
| 66 | - (*class)->__destruct(_object); | |
| 65 | + if (*(void**)_object && *class && (*class)->__destruct) { | |
| 66 | + (*class)->__destruct(*(void**)_object); | |
| 67 | 67 | } |
| 68 | 68 | |
| 69 | - free(_object); | |
| 69 | + free(*(void**)_object); | |
| 70 | + *(void**)_object = NULL; | |
| 70 | 71 | } |
| 71 | 72 | |
| 72 | 73 | struct json_object * | ... | ... |
| 1 | 1 | ACLOCAL_AMFLAGS = -I m4 |
| 2 | 2 | |
| 3 | -TESTS = crypt decrypt dyntype hash packet | |
| 4 | -check_PROGRAMS = crypt decrypt dyntype hash packet | |
| 3 | +TESTS = crypt decrypt dyntype hash packet runtest | |
| 4 | +check_PROGRAMS = crypt decrypt dyntype hash packet runtest | |
| 5 | +noinst_LTLIBRARIES = cclassTest.la | |
| 5 | 6 | |
| 6 | 7 | crypt_SOURCES = crypt.c ../base64.c |
| 7 | 8 | crypt_LDADD = ../src/libtoken.la $(LIBOBJS) |
| ... | ... | @@ -22,3 +23,11 @@ hash_CFLAGS = -I ../include -I .. |
| 22 | 23 | packet_SOURCES = packet.c |
| 23 | 24 | packet_LDADD = ../src/libtoken.la $(LIBOBJS) |
| 24 | 25 | packet_CFLAGS = -I ../include -I .. |
| 26 | + | |
| 27 | +cclassTest_la_SOURCES = cclassTest.c | |
| 28 | +cclassTest_la_LDFLAGS = -avoid-version -module -shared -export-dynamic | |
| 29 | +cclassTest_la_CFLAGS = -nostartfiles -fPIC -I. -I../include | |
| 30 | + | |
| 31 | +runtest_SOURCES = runtest.c | |
| 32 | +runtest_LDADD = ../src/libtoken.la $(LIBOBJS) -ldl | |
| 33 | +runtest_CFLAGS = -rdynamic | ... | ... |
tests/cclassTest.c
0 → 100644
| 1 | +#include <sys/types.h> | |
| 2 | +#include <json/json.h> | |
| 3 | + | |
| 4 | +#include "runtest.h" | |
| 5 | +#include "mock/class.h" | |
| 6 | +#include "token/cclass.h" | |
| 7 | + | |
| 8 | + | |
| 9 | +char testname[] = "cclassTest"; | |
| 10 | +struct MOCK_CLASS * mock = NULL; | |
| 11 | + | |
| 12 | +void | |
| 13 | +setUp() | |
| 14 | +{ | |
| 15 | + mock = NULL; | |
| 16 | + _reset(); | |
| 17 | +} | |
| 18 | + | |
| 19 | +void | |
| 20 | +tearDown() | |
| 21 | +{ | |
| 22 | + if (NULL != mock) { | |
| 23 | + delete(&mock); | |
| 24 | + } | |
| 25 | +} | |
| 26 | + | |
| 27 | +int | |
| 28 | +testNew(void) | |
| 29 | +{ | |
| 30 | + mock = new(MOCK_CLASS, 123); | |
| 31 | + | |
| 32 | + ASSERT_NOT_NULL(mock); | |
| 33 | + ASSERT_EQUAL(1, _called); | |
| 34 | + ASSERT_EQUAL(123, mock_class_getValue(mock)); | |
| 35 | + | |
| 36 | + return TEST_OK; | |
| 37 | +} | |
| 38 | + | |
| 39 | +int | |
| 40 | +testNewFromJson(void) | |
| 41 | +{ | |
| 42 | + struct json_object * json = json_object_new_int(123); | |
| 43 | + | |
| 44 | + mock = newFromJson(MOCK_CLASS, json); | |
| 45 | + json_object_put(json); | |
| 46 | + | |
| 47 | + ASSERT_NOT_NULL(mock); | |
| 48 | + ASSERT_EQUAL(1, _called); | |
| 49 | + ASSERT_EQUAL(123, mock_class_getValue(mock)); | |
| 50 | + | |
| 51 | + return TEST_OK; | |
| 52 | +} | |
| 53 | + | |
| 54 | +int | |
| 55 | +testDelete(void) | |
| 56 | +{ | |
| 57 | + mock = new(MOCK_CLASS, 123); | |
| 58 | + | |
| 59 | + ASSERT_NOT_NULL(mock); | |
| 60 | + | |
| 61 | + _reset(); | |
| 62 | + delete(&mock); | |
| 63 | + | |
| 64 | + ASSERT_NULL(mock); | |
| 65 | + ASSERT_EQUAL(1, _called); | |
| 66 | + | |
| 67 | + return TEST_OK; | |
| 68 | +} | |
| 69 | + | |
| 70 | +int | |
| 71 | +testToJson(void) | |
| 72 | +{ | |
| 73 | + struct json_object * json = NULL; | |
| 74 | + mock = new(MOCK_CLASS, 123); | |
| 75 | + int value; | |
| 76 | + | |
| 77 | + json = toJson(mock); | |
| 78 | + | |
| 79 | + ASSERT_NOT_NULL(json); | |
| 80 | + value = json_object_get_int(json); | |
| 81 | + json_object_put(json); | |
| 82 | + | |
| 83 | + ASSERT_EQUAL(123, value); | |
| 84 | + ASSERT_EQUAL(1, _called); | |
| 85 | + | |
| 86 | + return TEST_OK; | |
| 87 | +} | |
| 88 | + | |
| 89 | +testfunc tests[] = { | |
| 90 | + testNew, | |
| 91 | + testNewFromJson, | |
| 92 | + testDelete, | |
| 93 | + testToJson | |
| 94 | +}; | |
| 95 | +size_t count = FUNCS_COUNT(tests); | |
| 96 | + | |
| 97 | +// vim: set et ts=4 sw=4: | ... | ... |
tests/cclass_test.c
deleted
100644 → 0
| 1 | -#include <sys/types.h> | |
| 2 | - | |
| 3 | -#include "runtest.h" | |
| 4 | - | |
| 5 | - | |
| 6 | -char testname[] = "cclass_test"; | |
| 7 | - | |
| 8 | -int | |
| 9 | -dummy_ok(void) | |
| 10 | -{ | |
| 11 | - return TEST_OK; | |
| 12 | -} | |
| 13 | - | |
| 14 | -int | |
| 15 | -dummy_failed(void) | |
| 16 | -{ | |
| 17 | - return TEST_FAILED; | |
| 18 | -} | |
| 19 | - | |
| 20 | -int | |
| 21 | -dummy_error(void) | |
| 22 | -{ | |
| 23 | - return TEST_ERROR; | |
| 24 | -} | |
| 25 | - | |
| 26 | -testfunc tests[] = { | |
| 27 | - dummy_ok, | |
| 28 | - dummy_failed, | |
| 29 | - dummy_error | |
| 30 | -}; | |
| 31 | -size_t count = FUNCS_COUNT(tests); | |
| 32 | - | |
| 33 | -// vim: set et ts=4 sw=4: |
| ... | ... | @@ -22,7 +22,7 @@ main(int argc, char * argv[]) |
| 22 | 22 | |
| 23 | 23 | crypt = new(CRYPT, MCRYPT_RIJNDAEL_256, MCRYPT_CFB); |
| 24 | 24 | encrypted = crypt_encrypt(crypt, data, pass, &length); |
| 25 | - delete(crypt); | |
| 25 | + delete(&crypt); | |
| 26 | 26 | |
| 27 | 27 | b64d = calloc(BASE64_LENGTH(length), sizeof(char)); |
| 28 | 28 | base64_encode(encrypted, length, b64d, BASE64_LENGTH(length)); | ... | ... |
| ... | ... | @@ -20,7 +20,7 @@ main(int argc, char * argv[]) |
| 20 | 20 | |
| 21 | 21 | printf("%d\n", (dyn->data)._int); |
| 22 | 22 | |
| 23 | - delete(dyn); | |
| 23 | + delete(&dyn); | |
| 24 | 24 | json_object_put(json); |
| 25 | 25 | |
| 26 | 26 | dyn = new(DYNTYPE, DYNTYPE_TYPE_INT, sizeof(int), 321); |
| ... | ... | @@ -28,7 +28,7 @@ main(int argc, char * argv[]) |
| 28 | 28 | |
| 29 | 29 | printf("%s\n", json_object_to_json_string(json)); |
| 30 | 30 | |
| 31 | - delete(dyn); | |
| 31 | + delete(&dyn); | |
| 32 | 32 | json_object_put(json); |
| 33 | 33 | |
| 34 | 34 | json = json_object_new_string(TEST_STR); |
| ... | ... | @@ -36,7 +36,7 @@ main(int argc, char * argv[]) |
| 36 | 36 | |
| 37 | 37 | printf("%s\n", (dyn->data)._string); |
| 38 | 38 | |
| 39 | - delete(dyn); | |
| 39 | + delete(&dyn); | |
| 40 | 40 | json_object_put(json); |
| 41 | 41 | |
| 42 | 42 | dyn = new(DYNTYPE, DYNTYPE_TYPE_STRING, strlen(TEST_STR), TEST_STR); |
| ... | ... | @@ -44,7 +44,7 @@ main(int argc, char * argv[]) |
| 44 | 44 | |
| 45 | 45 | printf("%s\n", json_object_to_json_string(json)); |
| 46 | 46 | |
| 47 | - delete(dyn); | |
| 47 | + delete(&dyn); | |
| 48 | 48 | json_object_put(json); |
| 49 | 49 | |
| 50 | 50 | json = json_tokener_parse("{\"key1\":123,\"key2\":321,\"key3\":\"" TEST_STR "\"}"); |
| ... | ... | @@ -61,18 +61,18 @@ main(int argc, char * argv[]) |
| 61 | 61 | |
| 62 | 62 | value = dyntype_hash_get(hash, TEST_KEY1); |
| 63 | 63 | printf("%d\n", (value->data)._int); |
| 64 | - delete(value); | |
| 64 | + delete(&value); | |
| 65 | 65 | |
| 66 | 66 | value = dyntype_hash_get(hash, TEST_KEY2); |
| 67 | 67 | printf("%d\n", (value->data)._int); |
| 68 | - delete(value); | |
| 68 | + delete(&value); | |
| 69 | 69 | |
| 70 | 70 | value = dyntype_hash_get(hash, TEST_KEY3); |
| 71 | 71 | printf("%s\n", (value->data)._string); |
| 72 | - delete(value); | |
| 72 | + delete(&value); | |
| 73 | 73 | } |
| 74 | 74 | |
| 75 | - delete(dyn); | |
| 75 | + delete(&dyn); | |
| 76 | 76 | |
| 77 | 77 | return 0; |
| 78 | 78 | } | ... | ... |
| ... | ... | @@ -29,13 +29,13 @@ main(int argc, char * argv[]) |
| 29 | 29 | |
| 30 | 30 | dyn = dyntype_hash_get(hash, TEST_KEY1); |
| 31 | 31 | printf("%d\n", (dyn->data)._int); |
| 32 | - delete(dyn); | |
| 32 | + delete(&dyn); | |
| 33 | 33 | |
| 34 | 34 | dyn = dyntype_hash_get(hash, TEST_KEY2); |
| 35 | 35 | printf("%d\n", (dyn->data)._int); |
| 36 | - delete(dyn); | |
| 36 | + delete(&dyn); | |
| 37 | 37 | |
| 38 | - delete(hash); | |
| 38 | + delete(&hash); | |
| 39 | 39 | |
| 40 | 40 | json = json_tokener_parse("{\"key1\":123,\"key2\":321}"); |
| 41 | 41 | hash = newFromJson(DYNTYPE_HASH, json); |
| ... | ... | @@ -43,13 +43,13 @@ main(int argc, char * argv[]) |
| 43 | 43 | |
| 44 | 44 | dyn = dyntype_hash_get(hash, TEST_KEY1); |
| 45 | 45 | printf("%d\n", (dyn->data)._int); |
| 46 | - delete(dyn); | |
| 46 | + delete(&dyn); | |
| 47 | 47 | |
| 48 | 48 | dyn = dyntype_hash_get(hash, TEST_KEY2); |
| 49 | 49 | printf("%d\n", (dyn->data)._int); |
| 50 | - delete(dyn); | |
| 50 | + delete(&dyn); | |
| 51 | 51 | |
| 52 | - delete(hash); | |
| 52 | + delete(&hash); | |
| 53 | 53 | |
| 54 | 54 | return 0; |
| 55 | 55 | } | ... | ... |
tests/mock/class.c
0 → 100644
| 1 | +#include <assert.h> | |
| 2 | +#include <json/json.h> | |
| 3 | + | |
| 4 | +#include "token/cclass.h" | |
| 5 | +#include "class.h" | |
| 6 | + | |
| 7 | +char _called; | |
| 8 | + | |
| 9 | +void | |
| 10 | +inline | |
| 11 | +_reset() | |
| 12 | +{ | |
| 13 | + _called = 0; | |
| 14 | +} | |
| 15 | + | |
| 16 | +static | |
| 17 | +void | |
| 18 | +__construct(struct MOCK_CLASS * _this, va_list * params) | |
| 19 | +{ | |
| 20 | + _called = 1; | |
| 21 | + _this->value = va_arg(* params, int); | |
| 22 | +} | |
| 23 | + | |
| 24 | +static | |
| 25 | +void | |
| 26 | +__jsonConst(struct MOCK_CLASS * _this, json_object * json) | |
| 27 | +{ | |
| 28 | + _called = 1; | |
| 29 | + assert(json_type_int == json_object_get_type(json)); | |
| 30 | + | |
| 31 | + _this->value = json_object_get_int(json); | |
| 32 | +} | |
| 33 | + | |
| 34 | +static | |
| 35 | +void | |
| 36 | +__destruct(struct MOCK_CLASS * _this) | |
| 37 | +{ | |
| 38 | + _called = 1; | |
| 39 | +} | |
| 40 | + | |
| 41 | +static | |
| 42 | +struct json_object * | |
| 43 | +__toJson(struct MOCK_CLASS * _this) | |
| 44 | +{ | |
| 45 | + struct json_object * json = json_object_new_int(_this->value); | |
| 46 | + | |
| 47 | + _called = 1; | |
| 48 | + return json; | |
| 49 | +} | |
| 50 | + | |
| 51 | +static const | |
| 52 | +struct CCLASS _mock_class = { | |
| 53 | + sizeof(struct MOCK_CLASS), | |
| 54 | + (ctor)__construct, | |
| 55 | + (jCtor)__jsonConst, | |
| 56 | + (dtor)__destruct, | |
| 57 | + (jTo)__toJson | |
| 58 | +}; | |
| 59 | + | |
| 60 | +const struct CCLASS * const MOCK_CLASS = &_mock_class; | |
| 61 | + | |
| 62 | +/** | |
| 63 | + * ~~~ method implementations ~~~~~~~~ | |
| 64 | + */ | |
| 65 | + | |
| 66 | +int | |
| 67 | +mock_class_getValue(struct MOCK_CLASS * _this) | |
| 68 | +{ | |
| 69 | + return _this->value; | |
| 70 | +} | |
| 71 | + | |
| 72 | +void | |
| 73 | +mock_class_setValue(struct MOCK_CLASS * _this, int value) | |
| 74 | +{ | |
| 75 | + _this->value = value; | |
| 76 | +} | |
| 77 | + | |
| 78 | +/** | |
| 79 | + * ~~~ helper for mock assertions ~~~~~~~~ | |
| 80 | + */ | |
| 81 | +void * | |
| 82 | +getConstruct() | |
| 83 | +{ | |
| 84 | + return __construct; | |
| 85 | +} | |
| 86 | + | |
| 87 | +void * | |
| 88 | +getJsonConst() | |
| 89 | +{ | |
| 90 | + return __jsonConst; | |
| 91 | +} | |
| 92 | +// vim: set et ts=4 sw=4: | ... | ... |
tests/mock/class.h
0 → 100644
| 1 | +#ifndef __MOCK_CLASS_H__ | |
| 2 | +#define __MOCK_CLASS_H__ | |
| 3 | + | |
| 4 | +#include "token/cclass.h" | |
| 5 | + | |
| 6 | + | |
| 7 | +extern char _called; | |
| 8 | + | |
| 9 | +extern void inline | |
| 10 | +_reset() | |
| 11 | +{ | |
| 12 | + _called = 0; | |
| 13 | +} | |
| 14 | + | |
| 15 | +struct MOCK_CLASS { | |
| 16 | + const struct CCLASS * const class; | |
| 17 | + int value; | |
| 18 | +}; | |
| 19 | + | |
| 20 | +extern const struct CCLASS * const MOCK_CLASS; | |
| 21 | + | |
| 22 | +/** | |
| 23 | + * ~~~ method declarations ~~~~~~~~ | |
| 24 | + */ | |
| 25 | + | |
| 26 | +int mock_class_getValue(struct MOCK_CLASS * _this); | |
| 27 | +void mock_class_setValue(struct MOCK_CLASS * _this, int value); | |
| 28 | + | |
| 29 | +#endif//__MOCK_CLASS_H__ | |
| 30 | +// vim: set et ts=4 sw=4: | ... | ... |
| ... | ... | @@ -11,7 +11,7 @@ |
| 11 | 11 | |
| 12 | 12 | |
| 13 | 13 | void |
| 14 | -setHashString(struct DYNTYPE_HASH * hash, const char * key, const char * value) | |
| 14 | +setHashString(struct DYNTYPE_HASH * hash, const char * const key, const char * value) | |
| 15 | 15 | { |
| 16 | 16 | struct DYNTYPE * dyn; |
| 17 | 17 | |
| ... | ... | @@ -20,7 +20,7 @@ setHashString(struct DYNTYPE_HASH * hash, const char * key, const char * value) |
| 20 | 20 | } |
| 21 | 21 | |
| 22 | 22 | void |
| 23 | -setHashInt(struct DYNTYPE_HASH * hash, const char * key, const int value) | |
| 23 | +setHashInt(struct DYNTYPE_HASH * hash, const char * const key, const int value) | |
| 24 | 24 | { |
| 25 | 25 | struct DYNTYPE * dyn; |
| 26 | 26 | |
| ... | ... | @@ -28,13 +28,22 @@ setHashInt(struct DYNTYPE_HASH * hash, const char * key, const int value) |
| 28 | 28 | dyntype_hash_set(hash, key, dyn); |
| 29 | 29 | } |
| 30 | 30 | |
| 31 | +void | |
| 32 | +deleteHashValue(struct DYNTYPE_HASH * hash, const char * const key) | |
| 33 | +{ | |
| 34 | + struct DYNTYPE * dyn = dyntype_hash_get(hash, key); | |
| 35 | + | |
| 36 | + delete(&dyn); | |
| 37 | +} | |
| 38 | + | |
| 31 | 39 | int |
| 32 | 40 | main(int argc, char * argv[]) |
| 33 | 41 | { |
| 34 | - struct PACKET * packet; | |
| 35 | - struct DYNTYPE_HASH * data; | |
| 36 | - struct json_object * json; | |
| 37 | - char * json_str; | |
| 42 | + struct PACKET * packet; | |
| 43 | + struct DYNTYPE_HASH * data; | |
| 44 | + struct DYNTYPE * _clear; | |
| 45 | + struct json_object * json; | |
| 46 | + char * json_str; | |
| 38 | 47 | |
| 39 | 48 | packet = new(PACKET); |
| 40 | 49 | |
| ... | ... | @@ -67,13 +76,15 @@ main(int argc, char * argv[]) |
| 67 | 76 | |
| 68 | 77 | printf("%s\n", json_str); |
| 69 | 78 | |
| 70 | - delete(dyntype_hash_get(data, "#C#")); | |
| 71 | - delete(dyntype_hash_get(data, "usr")); | |
| 72 | - delete(dyntype_hash_get(data, "pas")); | |
| 73 | - delete(dyntype_hash_get(data, "val")); | |
| 74 | - delete(packet_getHeader(packet)); | |
| 75 | - delete(packet_getData(packet)); | |
| 76 | - delete(packet); | |
| 79 | + deleteHashValue(data, "#C#"); | |
| 80 | + deleteHashValue(data, "usr"); | |
| 81 | + deleteHashValue(data, "pas"); | |
| 82 | + deleteHashValue(data, "val"); | |
| 83 | + _clear = packet_getHeader(packet); | |
| 84 | + delete(&_clear); | |
| 85 | + _clear = packet_getData(packet); | |
| 86 | + delete(&_clear); | |
| 87 | + delete(&packet); | |
| 77 | 88 | |
| 78 | 89 | json_object_put(json); |
| 79 | 90 | |
| ... | ... | @@ -83,13 +94,15 @@ main(int argc, char * argv[]) |
| 83 | 94 | printf("%s\n", json_object_to_json_string(json)); |
| 84 | 95 | |
| 85 | 96 | data = (packet_getData(packet)->data)._hash; |
| 86 | - delete(dyntype_hash_get(data, "#C#")); | |
| 87 | - delete(dyntype_hash_get(data, "usr")); | |
| 88 | - delete(dyntype_hash_get(data, "pas")); | |
| 89 | - delete(dyntype_hash_get(data, "val")); | |
| 90 | - delete(packet_getHeader(packet)); | |
| 91 | - delete(packet_getData(packet)); | |
| 92 | - delete(packet); | |
| 97 | + deleteHashValue(data, "#C#"); | |
| 98 | + deleteHashValue(data, "usr"); | |
| 99 | + deleteHashValue(data, "pas"); | |
| 100 | + deleteHashValue(data, "val"); | |
| 101 | + _clear = packet_getHeader(packet); | |
| 102 | + delete(&_clear); | |
| 103 | + _clear = packet_getData(packet); | |
| 104 | + delete(&_clear); | |
| 105 | + delete(&packet); | |
| 93 | 106 | free(json_str); |
| 94 | 107 | |
| 95 | 108 | json_object_put(json); | ... | ... |
| ... | ... | @@ -27,7 +27,6 @@ load_symbol(void * dlhandle, const char * const symbol) |
| 27 | 27 | |
| 28 | 28 | if ((error = dlerror()) != NULL) { |
| 29 | 29 | fprintf(stderr, "%s\n", error); |
| 30 | - exit(EXIT_FAILURE); | |
| 31 | 30 | } |
| 32 | 31 | |
| 33 | 32 | return sym; |
| ... | ... | @@ -44,27 +43,51 @@ runtests( |
| 44 | 43 | testfunc * tests; |
| 45 | 44 | const char * const testname; |
| 46 | 45 | //char * const * funcnames; |
| 46 | + char testfile[NAME_MAX+3] = "./"; | |
| 47 | + | |
| 48 | + strcat(testfile, filename); | |
| 49 | + | |
| 50 | + void (*setUp)() = NULL; | |
| 51 | + void (*tearDown)() = NULL; | |
| 47 | 52 | |
| 48 | 53 | size_t index; |
| 49 | 54 | void * dlhandle; |
| 50 | 55 | |
| 51 | - dlhandle = dlopen("./cclass.test", RTLD_LAZY); | |
| 56 | + dlhandle = dlopen(testfile, RTLD_LAZY); | |
| 52 | 57 | if (!dlhandle) { |
| 53 | 58 | fprintf(stderr, "%s\n", dlerror()); |
| 54 | 59 | exit(EXIT_FAILURE); |
| 55 | 60 | } |
| 56 | 61 | |
| 57 | - * (void **) (&count) = load_symbol(dlhandle, "count"); | |
| 58 | - * (void **) (&tests) = load_symbol(dlhandle, "tests"); | |
| 59 | - * (void **) (&testname) = load_symbol(dlhandle, "testname"); | |
| 62 | + * (void **) (&count) = load_symbol(dlhandle, "count"); | |
| 63 | + * (void **) (&tests) = load_symbol(dlhandle, "tests"); | |
| 64 | + * (void **) (&testname) = load_symbol(dlhandle, "testname"); | |
| 60 | 65 | // * (void **) (&funcnames) = load_symbol(dlhandle, "funcnames"); |
| 66 | + | |
| 67 | + * (void **) (&setUp) = load_symbol(dlhandle, "setUp"); | |
| 68 | + * (void **) (&tearDown) = load_symbol(dlhandle, "tearDown"); | |
| 61 | 69 | |
| 70 | + if (NULL == count || NULL == tests || NULL == testname) { | |
| 71 | + *errors = TEST_ERROR; | |
| 72 | + return; | |
| 73 | + } | |
| 74 | + | |
| 62 | 75 | *_count += *count; |
| 63 | 76 | |
| 64 | 77 | printf("running tests for %s\n", testname); |
| 65 | 78 | |
| 66 | 79 | for (index=0; index<*count; index++) { |
| 67 | - int result = tests[index](); | |
| 80 | + int result; | |
| 81 | + | |
| 82 | + if (NULL != setUp) { | |
| 83 | + setUp(); | |
| 84 | + } | |
| 85 | + | |
| 86 | + result = tests[index](); | |
| 87 | + | |
| 88 | + if (NULL != setUp) { | |
| 89 | + tearDown(); | |
| 90 | + } | |
| 68 | 91 | |
| 69 | 92 | switch (result) { |
| 70 | 93 | case TEST_FAILED: (*failures)++; break; |
| ... | ... | @@ -99,7 +122,7 @@ main(int argc, char * argv[]) |
| 99 | 122 | |
| 100 | 123 | dirent = readdir(dir); |
| 101 | 124 | while (dirent) { |
| 102 | - if (0 == strcmp(".test", dirent->d_name + strlen(dirent->d_name) - 5)) { | |
| 125 | + if (0 == strcmp("Test.la", dirent->d_name + strlen(dirent->d_name) - 7)) { | |
| 103 | 126 | runtests(dirent->d_name, &count, &failures, &errors); |
| 104 | 127 | } |
| 105 | 128 | |
| ... | ... | @@ -113,7 +136,7 @@ main(int argc, char * argv[]) |
| 113 | 136 | failures, |
| 114 | 137 | errors); |
| 115 | 138 | |
| 116 | - return 0; | |
| 139 | + return failures + errors; | |
| 117 | 140 | } |
| 118 | 141 | |
| 119 | 142 | // vim: set et ts=4 sw=4: | ... | ... |
| ... | ... | @@ -10,6 +10,12 @@ enum RESULT_TYPES { |
| 10 | 10 | TEST_ERROR |
| 11 | 11 | }; |
| 12 | 12 | |
| 13 | +#define ASSERT_NULL(value) if (NULL != (value)) return TEST_FAILED | |
| 14 | +#define ASSERT_NOT_NULL(value) if (NULL == (value)) return TEST_FAILED | |
| 15 | +#define ASSERT_EQUAL(val1,val2) if ((val1) != (val2)) return TEST_FAILED | |
| 16 | +#define ASSERT_NOT_EQUAL(val1,val2) if ((val1) == (val2)) return TEST_FAILED | |
| 17 | + | |
| 18 | + | |
| 13 | 19 | typedef int (* testfunc)(void); |
| 14 | 20 | #define FUNCS_COUNT(array) (sizeof((array)) / sizeof(testfunc)) |
| 15 | 21 | ... | ... |
Please
register
or
login
to post a comment