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,7 +10,7 @@ | ||
10 | 10 | ||
11 | 11 | ||
12 | void | 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 | struct DYNTYPE * dyn; | 15 | struct DYNTYPE * dyn; |
16 | 16 | ||
@@ -19,7 +19,7 @@ setHashString(struct DYNTYPE_HASH * hash, const char * key, const char * value) | @@ -19,7 +19,7 @@ setHashString(struct DYNTYPE_HASH * hash, const char * key, const char * value) | ||
19 | } | 19 | } |
20 | 20 | ||
21 | void | 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 | struct DYNTYPE * dyn; | 24 | struct DYNTYPE * dyn; |
25 | 25 | ||
@@ -27,12 +27,21 @@ setHashInt(struct DYNTYPE_HASH * hash, const char * key, const int value) | @@ -27,12 +27,21 @@ setHashInt(struct DYNTYPE_HASH * hash, const char * key, const int value) | ||
27 | dyntype_hash_set(hash, key, dyn); | 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 | int | 38 | int |
31 | main(int argc, char * argv[]) | 39 | main(int argc, char * argv[]) |
32 | { | 40 | { |
33 | struct CRYPT * crypt; | 41 | struct CRYPT * crypt; |
34 | struct PACKET * packet; | 42 | struct PACKET * packet; |
35 | struct DYNTYPE_HASH * data; | 43 | struct DYNTYPE_HASH * data; |
44 | + struct DYNTYPE * _clear; | ||
36 | struct json_object * json; | 45 | struct json_object * json; |
37 | const char * json_str; | 46 | const char * json_str; |
38 | char * encrypted; | 47 | char * encrypted; |
@@ -67,7 +76,7 @@ main(int argc, char * argv[]) | @@ -67,7 +76,7 @@ main(int argc, char * argv[]) | ||
67 | crypt = new(CRYPT, MCRYPT_RIJNDAEL_256, MCRYPT_CFB); | 76 | crypt = new(CRYPT, MCRYPT_RIJNDAEL_256, MCRYPT_CFB); |
68 | encrypted = crypt_encrypt(crypt, json_str, pass, &length); | 77 | encrypted = crypt_encrypt(crypt, json_str, pass, &length); |
69 | 78 | ||
70 | - delete(crypt); | 79 | + delete(&crypt); |
71 | json_object_put(json); | 80 | json_object_put(json); |
72 | 81 | ||
73 | b64d = calloc(BASE64_LENGTH(length), sizeof(char)); | 82 | b64d = calloc(BASE64_LENGTH(length), sizeof(char)); |
@@ -80,13 +89,15 @@ main(int argc, char * argv[]) | @@ -80,13 +89,15 @@ main(int argc, char * argv[]) | ||
80 | printf("%s\n", b64d); | 89 | printf("%s\n", b64d); |
81 | free(b64d); | 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 | return 0; | 103 | return 0; |
@@ -60,13 +60,14 @@ newFromJson(const void * _class, struct json_object * json) | @@ -60,13 +60,14 @@ newFromJson(const void * _class, struct json_object * json) | ||
60 | void | 60 | void |
61 | delete(void * _object) | 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 | struct json_object * | 73 | struct json_object * |
@@ -97,7 +97,7 @@ __destruct(struct DYNTYPE * _this) | @@ -97,7 +97,7 @@ __destruct(struct DYNTYPE * _this) | ||
97 | break; | 97 | break; |
98 | 98 | ||
99 | case DYNTYPE_TYPE_HASH: | 99 | case DYNTYPE_TYPE_HASH: |
100 | - delete((_this->data)._hash); | 100 | + delete(&((_this->data)._hash)); |
101 | break; | 101 | break; |
102 | 102 | ||
103 | default: | 103 | default: |
1 | ACLOCAL_AMFLAGS = -I m4 | 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 | crypt_SOURCES = crypt.c ../base64.c | 7 | crypt_SOURCES = crypt.c ../base64.c |
7 | crypt_LDADD = ../src/libtoken.la $(LIBOBJS) | 8 | crypt_LDADD = ../src/libtoken.la $(LIBOBJS) |
@@ -22,3 +23,11 @@ hash_CFLAGS = -I ../include -I .. | @@ -22,3 +23,11 @@ hash_CFLAGS = -I ../include -I .. | ||
22 | packet_SOURCES = packet.c | 23 | packet_SOURCES = packet.c |
23 | packet_LDADD = ../src/libtoken.la $(LIBOBJS) | 24 | packet_LDADD = ../src/libtoken.la $(LIBOBJS) |
24 | packet_CFLAGS = -I ../include -I .. | 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,7 +22,7 @@ main(int argc, char * argv[]) | ||
22 | 22 | ||
23 | crypt = new(CRYPT, MCRYPT_RIJNDAEL_256, MCRYPT_CFB); | 23 | crypt = new(CRYPT, MCRYPT_RIJNDAEL_256, MCRYPT_CFB); |
24 | encrypted = crypt_encrypt(crypt, data, pass, &length); | 24 | encrypted = crypt_encrypt(crypt, data, pass, &length); |
25 | - delete(crypt); | 25 | + delete(&crypt); |
26 | 26 | ||
27 | b64d = calloc(BASE64_LENGTH(length), sizeof(char)); | 27 | b64d = calloc(BASE64_LENGTH(length), sizeof(char)); |
28 | base64_encode(encrypted, length, b64d, BASE64_LENGTH(length)); | 28 | base64_encode(encrypted, length, b64d, BASE64_LENGTH(length)); |
@@ -28,7 +28,7 @@ main(int argc, char * argv[]) | @@ -28,7 +28,7 @@ main(int argc, char * argv[]) | ||
28 | 28 | ||
29 | crypt = new(CRYPT, MCRYPT_RIJNDAEL_256, MCRYPT_CFB); | 29 | crypt = new(CRYPT, MCRYPT_RIJNDAEL_256, MCRYPT_CFB); |
30 | decrypted = crypt_decrypt(crypt, data, pass, &length); | 30 | decrypted = crypt_decrypt(crypt, data, pass, &length); |
31 | - delete(crypt); | 31 | + delete(&crypt); |
32 | free(data); | 32 | free(data); |
33 | 33 | ||
34 | printf("%s\n", decrypted); | 34 | printf("%s\n", decrypted); |
@@ -20,7 +20,7 @@ main(int argc, char * argv[]) | @@ -20,7 +20,7 @@ main(int argc, char * argv[]) | ||
20 | 20 | ||
21 | printf("%d\n", (dyn->data)._int); | 21 | printf("%d\n", (dyn->data)._int); |
22 | 22 | ||
23 | - delete(dyn); | 23 | + delete(&dyn); |
24 | json_object_put(json); | 24 | json_object_put(json); |
25 | 25 | ||
26 | dyn = new(DYNTYPE, DYNTYPE_TYPE_INT, sizeof(int), 321); | 26 | dyn = new(DYNTYPE, DYNTYPE_TYPE_INT, sizeof(int), 321); |
@@ -28,7 +28,7 @@ main(int argc, char * argv[]) | @@ -28,7 +28,7 @@ main(int argc, char * argv[]) | ||
28 | 28 | ||
29 | printf("%s\n", json_object_to_json_string(json)); | 29 | printf("%s\n", json_object_to_json_string(json)); |
30 | 30 | ||
31 | - delete(dyn); | 31 | + delete(&dyn); |
32 | json_object_put(json); | 32 | json_object_put(json); |
33 | 33 | ||
34 | json = json_object_new_string(TEST_STR); | 34 | json = json_object_new_string(TEST_STR); |
@@ -36,7 +36,7 @@ main(int argc, char * argv[]) | @@ -36,7 +36,7 @@ main(int argc, char * argv[]) | ||
36 | 36 | ||
37 | printf("%s\n", (dyn->data)._string); | 37 | printf("%s\n", (dyn->data)._string); |
38 | 38 | ||
39 | - delete(dyn); | 39 | + delete(&dyn); |
40 | json_object_put(json); | 40 | json_object_put(json); |
41 | 41 | ||
42 | dyn = new(DYNTYPE, DYNTYPE_TYPE_STRING, strlen(TEST_STR), TEST_STR); | 42 | dyn = new(DYNTYPE, DYNTYPE_TYPE_STRING, strlen(TEST_STR), TEST_STR); |
@@ -44,7 +44,7 @@ main(int argc, char * argv[]) | @@ -44,7 +44,7 @@ main(int argc, char * argv[]) | ||
44 | 44 | ||
45 | printf("%s\n", json_object_to_json_string(json)); | 45 | printf("%s\n", json_object_to_json_string(json)); |
46 | 46 | ||
47 | - delete(dyn); | 47 | + delete(&dyn); |
48 | json_object_put(json); | 48 | json_object_put(json); |
49 | 49 | ||
50 | json = json_tokener_parse("{\"key1\":123,\"key2\":321,\"key3\":\"" TEST_STR "\"}"); | 50 | json = json_tokener_parse("{\"key1\":123,\"key2\":321,\"key3\":\"" TEST_STR "\"}"); |
@@ -61,18 +61,18 @@ main(int argc, char * argv[]) | @@ -61,18 +61,18 @@ main(int argc, char * argv[]) | ||
61 | 61 | ||
62 | value = dyntype_hash_get(hash, TEST_KEY1); | 62 | value = dyntype_hash_get(hash, TEST_KEY1); |
63 | printf("%d\n", (value->data)._int); | 63 | printf("%d\n", (value->data)._int); |
64 | - delete(value); | 64 | + delete(&value); |
65 | 65 | ||
66 | value = dyntype_hash_get(hash, TEST_KEY2); | 66 | value = dyntype_hash_get(hash, TEST_KEY2); |
67 | printf("%d\n", (value->data)._int); | 67 | printf("%d\n", (value->data)._int); |
68 | - delete(value); | 68 | + delete(&value); |
69 | 69 | ||
70 | value = dyntype_hash_get(hash, TEST_KEY3); | 70 | value = dyntype_hash_get(hash, TEST_KEY3); |
71 | printf("%s\n", (value->data)._string); | 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 | return 0; | 77 | return 0; |
78 | } | 78 | } |
@@ -29,13 +29,13 @@ main(int argc, char * argv[]) | @@ -29,13 +29,13 @@ main(int argc, char * argv[]) | ||
29 | 29 | ||
30 | dyn = dyntype_hash_get(hash, TEST_KEY1); | 30 | dyn = dyntype_hash_get(hash, TEST_KEY1); |
31 | printf("%d\n", (dyn->data)._int); | 31 | printf("%d\n", (dyn->data)._int); |
32 | - delete(dyn); | 32 | + delete(&dyn); |
33 | 33 | ||
34 | dyn = dyntype_hash_get(hash, TEST_KEY2); | 34 | dyn = dyntype_hash_get(hash, TEST_KEY2); |
35 | printf("%d\n", (dyn->data)._int); | 35 | printf("%d\n", (dyn->data)._int); |
36 | - delete(dyn); | 36 | + delete(&dyn); |
37 | 37 | ||
38 | - delete(hash); | 38 | + delete(&hash); |
39 | 39 | ||
40 | json = json_tokener_parse("{\"key1\":123,\"key2\":321}"); | 40 | json = json_tokener_parse("{\"key1\":123,\"key2\":321}"); |
41 | hash = newFromJson(DYNTYPE_HASH, json); | 41 | hash = newFromJson(DYNTYPE_HASH, json); |
@@ -43,13 +43,13 @@ main(int argc, char * argv[]) | @@ -43,13 +43,13 @@ main(int argc, char * argv[]) | ||
43 | 43 | ||
44 | dyn = dyntype_hash_get(hash, TEST_KEY1); | 44 | dyn = dyntype_hash_get(hash, TEST_KEY1); |
45 | printf("%d\n", (dyn->data)._int); | 45 | printf("%d\n", (dyn->data)._int); |
46 | - delete(dyn); | 46 | + delete(&dyn); |
47 | 47 | ||
48 | dyn = dyntype_hash_get(hash, TEST_KEY2); | 48 | dyn = dyntype_hash_get(hash, TEST_KEY2); |
49 | printf("%d\n", (dyn->data)._int); | 49 | printf("%d\n", (dyn->data)._int); |
50 | - delete(dyn); | 50 | + delete(&dyn); |
51 | 51 | ||
52 | - delete(hash); | 52 | + delete(&hash); |
53 | 53 | ||
54 | return 0; | 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,7 +11,7 @@ | ||
11 | 11 | ||
12 | 12 | ||
13 | void | 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 | struct DYNTYPE * dyn; | 16 | struct DYNTYPE * dyn; |
17 | 17 | ||
@@ -20,7 +20,7 @@ setHashString(struct DYNTYPE_HASH * hash, const char * key, const char * value) | @@ -20,7 +20,7 @@ setHashString(struct DYNTYPE_HASH * hash, const char * key, const char * value) | ||
20 | } | 20 | } |
21 | 21 | ||
22 | void | 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 | struct DYNTYPE * dyn; | 25 | struct DYNTYPE * dyn; |
26 | 26 | ||
@@ -28,13 +28,22 @@ setHashInt(struct DYNTYPE_HASH * hash, const char * key, const int value) | @@ -28,13 +28,22 @@ setHashInt(struct DYNTYPE_HASH * hash, const char * key, const int value) | ||
28 | dyntype_hash_set(hash, key, dyn); | 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 | int | 39 | int |
32 | main(int argc, char * argv[]) | 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 | packet = new(PACKET); | 48 | packet = new(PACKET); |
40 | 49 | ||
@@ -67,13 +76,15 @@ main(int argc, char * argv[]) | @@ -67,13 +76,15 @@ main(int argc, char * argv[]) | ||
67 | 76 | ||
68 | printf("%s\n", json_str); | 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 | json_object_put(json); | 89 | json_object_put(json); |
79 | 90 | ||
@@ -83,13 +94,15 @@ main(int argc, char * argv[]) | @@ -83,13 +94,15 @@ main(int argc, char * argv[]) | ||
83 | printf("%s\n", json_object_to_json_string(json)); | 94 | printf("%s\n", json_object_to_json_string(json)); |
84 | 95 | ||
85 | data = (packet_getData(packet)->data)._hash; | 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 | free(json_str); | 106 | free(json_str); |
94 | 107 | ||
95 | json_object_put(json); | 108 | json_object_put(json); |
@@ -27,7 +27,6 @@ load_symbol(void * dlhandle, const char * const symbol) | @@ -27,7 +27,6 @@ load_symbol(void * dlhandle, const char * const symbol) | ||
27 | 27 | ||
28 | if ((error = dlerror()) != NULL) { | 28 | if ((error = dlerror()) != NULL) { |
29 | fprintf(stderr, "%s\n", error); | 29 | fprintf(stderr, "%s\n", error); |
30 | - exit(EXIT_FAILURE); | ||
31 | } | 30 | } |
32 | 31 | ||
33 | return sym; | 32 | return sym; |
@@ -44,27 +43,51 @@ runtests( | @@ -44,27 +43,51 @@ runtests( | ||
44 | testfunc * tests; | 43 | testfunc * tests; |
45 | const char * const testname; | 44 | const char * const testname; |
46 | //char * const * funcnames; | 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 | size_t index; | 53 | size_t index; |
49 | void * dlhandle; | 54 | void * dlhandle; |
50 | 55 | ||
51 | - dlhandle = dlopen("./cclass.test", RTLD_LAZY); | 56 | + dlhandle = dlopen(testfile, RTLD_LAZY); |
52 | if (!dlhandle) { | 57 | if (!dlhandle) { |
53 | fprintf(stderr, "%s\n", dlerror()); | 58 | fprintf(stderr, "%s\n", dlerror()); |
54 | exit(EXIT_FAILURE); | 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 | // * (void **) (&funcnames) = load_symbol(dlhandle, "funcnames"); | 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 | *_count += *count; | 75 | *_count += *count; |
63 | 76 | ||
64 | printf("running tests for %s\n", testname); | 77 | printf("running tests for %s\n", testname); |
65 | 78 | ||
66 | for (index=0; index<*count; index++) { | 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 | switch (result) { | 92 | switch (result) { |
70 | case TEST_FAILED: (*failures)++; break; | 93 | case TEST_FAILED: (*failures)++; break; |
@@ -99,7 +122,7 @@ main(int argc, char * argv[]) | @@ -99,7 +122,7 @@ main(int argc, char * argv[]) | ||
99 | 122 | ||
100 | dirent = readdir(dir); | 123 | dirent = readdir(dir); |
101 | while (dirent) { | 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 | runtests(dirent->d_name, &count, &failures, &errors); | 126 | runtests(dirent->d_name, &count, &failures, &errors); |
104 | } | 127 | } |
105 | 128 | ||
@@ -113,7 +136,7 @@ main(int argc, char * argv[]) | @@ -113,7 +136,7 @@ main(int argc, char * argv[]) | ||
113 | failures, | 136 | failures, |
114 | errors); | 137 | errors); |
115 | 138 | ||
116 | - return 0; | 139 | + return failures + errors; |
117 | } | 140 | } |
118 | 141 | ||
119 | // vim: set et ts=4 sw=4: | 142 | // vim: set et ts=4 sw=4: |
@@ -10,6 +10,12 @@ enum RESULT_TYPES { | @@ -10,6 +10,12 @@ enum RESULT_TYPES { | ||
10 | TEST_ERROR | 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 | typedef int (* testfunc)(void); | 19 | typedef int (* testfunc)(void); |
14 | #define FUNCS_COUNT(array) (sizeof((array)) / sizeof(testfunc)) | 20 | #define FUNCS_COUNT(array) (sizeof((array)) / sizeof(testfunc)) |
15 | 21 |
Please
register
or
login
to post a comment