00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include <global.h>
00034 #include <stdlib.h>
00035 #include <check.h>
00036 #include <loader.h>
00037 #include <toolkit_common.h>
00038 #include <object.h>
00039 #include <stringbuffer.h>
00040
00041 void setup(void) {
00042 cctk_setdatadir(BUILD_ROOT "lib");
00043 cctk_setlog(LOGDIR "/unit/common/loader.out");
00044 cctk_init_std_archetypes();
00045 }
00046
00047 void teardown(void) {
00048
00049 }
00050
00051 START_TEST(test_get_ob_diff) {
00052 StringBuffer *buf;
00053 object *orc;
00054 archetype *arch;
00055 char *result;
00056
00057 arch = find_archetype("orc");
00058 fail_unless(arch != NULL, "Can't find 'orc' archetype!");
00059 orc = arch_to_object(arch);
00060 fail_unless(orc != NULL, "Couldn't create first orc!");
00061
00062 buf = stringbuffer_new();
00063 get_ob_diff(buf, orc, &arch->clone);
00064 result = stringbuffer_finish(buf);
00065 fail_unless(result && result[0] == '\0', "diff obj/clone was %s!", result);
00066 free(result);
00067
00068 orc->speed = 0.5;
00069 orc->speed_left = arch->clone.speed_left;
00070 FREE_AND_COPY(orc->name, "Orc chief");
00071
00072 buf = stringbuffer_new();
00073 get_ob_diff(buf, orc, &arch->clone);
00074 result = stringbuffer_finish(buf);
00075 fail_unless(result && strcmp(result, "name Orc chief\nspeed 0.500000\n") == 0, "diff modified obj/clone was %s!", result);
00076 free(result);
00077
00078 orc->stats.hp = 50;
00079 orc->stats.Wis = 59;
00080 orc->expmul = 8.5;
00081 orc->stats.dam = 168;
00082
00083 buf = stringbuffer_new();
00084 get_ob_diff(buf, orc, &arch->clone);
00085 result = stringbuffer_finish(buf);
00086 fail_unless(result && strcmp(result, "name Orc chief\nWis 59\nhp 50\nexpmul 8.500000\ndam 168\nspeed 0.500000\n") == 0, "2n diff modified obj/clone was %s!", result);
00087 free(result);
00088 }
00089 END_TEST
00090
00091 START_TEST(test_dump_object) {
00093 StringBuffer *buf;
00094 object *empty;
00095 char *result;
00096 char expect[10000];
00097
00098
00099 empty = arch_to_object(empty_archetype);
00100 fail_unless(empty != NULL, "Couldn't create empty archetype!");
00101
00102 snprintf(expect, sizeof(expect), "arch empty_archetype\nend\n");
00103 buf = stringbuffer_new();
00104 dump_object(empty, buf);
00105 result = stringbuffer_finish(buf);
00106 fail_unless(result && strcmp(result, expect) == 0, "dump_object was \"%s\" instead of \"%s\"!", result, expect);
00107 free(result);
00108
00109
00110 empty->head = arch_to_object(empty_archetype);
00111 empty->inv = arch_to_object(empty_archetype);
00112 empty->more = arch_to_object(empty_archetype);
00113 empty->owner = arch_to_object(empty_archetype);
00114 empty->env = arch_to_object(empty_archetype);
00115 fail_unless(empty->head != NULL, "Couldn't create empty archetype as head!");
00116 fail_unless(empty->inv != NULL, "Couldn't create empty archetype as inv!");
00117 fail_unless(empty->more != NULL, "Couldn't create empty archetype as more!");
00118 fail_unless(empty->owner != NULL, "Couldn't create empty archetype as owner!");
00119 fail_unless(empty->env != NULL, "Couldn't create empty archetype as env!");
00120
00121 snprintf(expect, sizeof(expect), "arch empty_archetype\nmore %d\nhead %d\nenv %d\ninv %d\nowner %d\nend\n", empty->more->count, empty->head->count, empty->env->count, empty->inv->count, empty->owner->count);
00122 buf = stringbuffer_new();
00123 dump_object(empty, buf);
00124 result = stringbuffer_finish(buf);
00125 fail_unless(result && strcmp(result, expect) == 0, "dump_object was \"%s\" instead of \"%s\"!", result, expect);
00126 free(result);
00127 }
00128 END_TEST
00129
00130 Suite *loader_suite(void) {
00131 Suite *s = suite_create("loader");
00132 TCase *tc_core = tcase_create("Core");
00133
00134
00135 tcase_add_checked_fixture(tc_core, setup, teardown);
00136
00137 suite_add_tcase(s, tc_core);
00138 tcase_add_test(tc_core, test_get_ob_diff);
00139 tcase_add_test(tc_core, test_dump_object);
00140
00141 return s;
00142 }
00143
00144 int main(void) {
00145 int nf;
00146 Suite *s = loader_suite();
00147 SRunner *sr = srunner_create(s);
00148
00149 srunner_set_xml(sr, LOGDIR "/unit/common/loader.xml");
00150 srunner_set_log(sr, LOGDIR "/unit/common/loader.out");
00151 srunner_run_all(sr, CK_ENV);
00152 nf = srunner_ntests_failed(sr);
00153 srunner_free(sr);
00154 return (nf == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
00155 }