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
00039 void setup(void) {
00040 cctk_setdatadir(BUILD_ROOT"lib");
00041 cctk_setlog(LOGDIR"/unit/common/arch.out");
00042 cctk_init_std_archetypes();
00043 }
00044
00045 void teardown(void) {
00046
00047 }
00048
00049 START_TEST(test_find_archetype_by_object_name) {
00050 archetype *arch;
00051
00052 arch = find_archetype_by_object_name("large city");
00053 fail_unless(arch != NULL, "Searching for an existing arch name (large city) should work");
00054 fail_unless(!strcmp(arch->clone.name, "large city"), "Searching for an existing arch name shoud have returned us large city but returned %s", arch->clone.name);
00055 arch = find_archetype_by_object_name("Cloak of Magic Resistance");
00056 fail_unless(arch != NULL, "Searching for an existing arch name (Cloak of Magic Resistance) should work");
00057 fail_unless(!strcmp(arch->clone.name, "Cloak of Magic Resistance"), "Searching for an existing arch name shoud have returned us Cloak of Magic Resistance but returned %s", arch->clone.name);
00058 arch = find_archetype_by_object_name("Cloak of Magic Resistanc");
00059 fail_unless(arch == NULL, "Searching for an inexistant arch name (Cloak of Magic Resistanc) should return NULL");
00060 arch = find_archetype_by_object_name("some really non existant archetype");
00061 fail_unless(arch == NULL, "Searching for an inexistant arch name (some really non existant archetype) should return NULL");
00062 arch = find_archetype_by_object_name("");
00063 fail_unless(arch == NULL, "Searching for empty arch name should return NULL");
00064 arch = find_archetype_by_object_name(NULL);
00065 fail_unless(arch == NULL, "Searching for NULL arch name should return NULL");
00066 }
00067 END_TEST
00068
00069 START_TEST(test_find_archetype_by_object_type_name) {
00070 archetype *arch;
00071
00072 arch = find_archetype_by_object_type_name(66, "large city");
00073 fail_unless(arch != NULL, "Searching for an existing arch name (large city) + type (66) should work");
00074 fail_unless(arch->clone.type == 66, "Requested type 66 but got %d", arch->clone.type);
00075 fail_unless(!strcmp(arch->clone.name, "large city"), "Searching for an existing arch name shoud have returned us large city but returned %s", arch->clone.name);
00076 arch = find_archetype_by_object_type_name(87, "Cloak of Magic Resistance");
00077 fail_unless(arch != NULL, "Searching for an existing arch name (Cloak of Magic Resistance) + type (87) should work");
00078 fail_unless(arch->clone.type == 87, "Requested type 87 but got %d", arch->clone.type);
00079 fail_unless(!strcmp(arch->clone.name, "Cloak of Magic Resistance"), "Searching for an existing arch name shoud have returned us Cloak of Magic Resistance but returned %s", arch->clone.name);
00080 arch = find_archetype_by_object_type_name(87, "Cloak of Magic Resistanc");
00081 fail_unless(arch == NULL, "Searching for an inexistant arch name (Cloak of Magic Resistanc) should return NULL");
00082 arch = find_archetype_by_object_type_name(88, "Cloak of Magic Resistance");
00083 fail_unless(arch == NULL, "Searching for an existing arch name (Cloak of Magic Resistance) but with wrong type (88) should return NULL");
00084 }
00085 END_TEST
00086
00087
00088 START_TEST(test_get_archetype_by_skill_name) {
00089 archetype *arch;
00090
00091 arch = get_archetype_by_skill_name("alchemy", SKILL);
00092 fail_unless(arch != NULL, "Should be able to discover the alchemy skill");
00093 fail_unless(!strcmp(arch->name, "skill_alchemy"), "should have returned skill_alchemy but returned %s", arch->name);
00094 arch = get_archetype_by_skill_name("alchemy", SKILLSCROLL);
00095 fail_unless(arch != NULL, "Should be able to discover the scroll of alchemy skill or something similar");
00096 arch = get_archetype_by_skill_name("one handed weapons", -1);
00097 fail_unless(arch != NULL, "Should be able to discover something related to the 'one handed weapons' skill");
00098 arch = get_archetype_by_skill_name(NULL, -1);
00099 fail_unless(arch == NULL, "Asking for null skill should return null");
00100 }
00101 END_TEST
00102
00103 START_TEST(test_get_archetype_by_type_subtype) {
00104 archetype *arch;
00105
00106 arch = get_archetype_by_type_subtype(SKILL, SK_LITERACY);
00107 fail_unless(arch != NULL, "Should be able to find an arch of type SKILL, subtype SK_LITERACY");
00108 fail_unless(arch->clone.type == SKILL, "Arch of type SKILL, subtype SK_LITERACY shoud have type %d but has type %d", SKILL, arch->clone.type);
00109 fail_unless(arch->clone.subtype == SK_LITERACY, "Arch of type SKILL, subtype SK_LITERACY shoud have subtype %d but has subtype %d", SK_LITERACY, arch->clone.subtype);
00110 fail_unless(arch != NULL, "Should be able to find an arch of type quest, subtype SK_LITERACY");
00111 arch = get_archetype_by_type_subtype(SKILL, -1);
00112 fail_unless(arch != NULL, "Should be able to find an arch of type SKILL, no subtype");
00113 fail_unless(arch->clone.type == SKILL, "arch of type SKILL, no subtype should have type %d but has %d", SKILL, arch->clone.type);
00114 arch = get_archetype_by_type_subtype(-1, SK_LITERACY);
00115 fail_unless(arch != NULL, "Should be able to find an arch of type unknown, SK_LITERACY");
00116 fail_unless(arch->clone.subtype == SK_LITERACY, "arch of type unknown, subtype quest in progress shoud have subtype %d but has subtype %d", SK_LITERACY, arch->clone.subtype);
00117 arch = get_archetype_by_type_subtype(-1, -1);
00118 fail_unless(arch != NULL, "Should be able to find arch of type unknown, subtype unknown, despite this being useless");
00119 arch = get_archetype_by_type_subtype(OBJECT_TYPE_MAX+1, -1);
00120 if (arch != NULL)
00121 fail("Should be not able to find arch of inexistant type but got %p (%s)", arch, arch->name);
00122 }
00123 END_TEST
00124
00125
00126 START_TEST(test_create_archetype_by_object_name) {
00127 object *ob;
00128
00129 ob = create_archetype_by_object_name("writing pen");
00130 fail_unless(ob != NULL, "Should never return null");
00131 fail_unless(strncmp(ob->name, ARCH_SINGULARITY, strlen(ARCH_SINGULARITY)), "Searching for writing pen should NOT have returned a singularity");
00132 fail_unless(!strncmp(ob->name, "writing pen", strlen(ob->name)), "Searching for writing pen should have returned something with same base name but returned '%s'", ob->name);
00133 ob = create_archetype_by_object_name("writing pen of hell raiser +3");
00134 fail_unless(ob != NULL, "Should never return null");
00135 fail_unless(strncmp(ob->name, ARCH_SINGULARITY, strlen(ARCH_SINGULARITY)), "Searching for writing pen of hell raiser +3 should NOT have returned a singularity");
00136 fail_unless(!strncmp(ob->name, "writing pen of hell raiser +3", strlen(ob->name)), "Searching for writing pen of hell raiser +3 should have returned something with same base name but returned %s", ob->name);
00137 ob = create_archetype_by_object_name("%*");
00138 fail_unless(ob != NULL, "Inexistent item shuold return a singularity");
00139 fail_unless(!strncmp(ob->name, ARCH_SINGULARITY, strlen(ARCH_SINGULARITY)), "Searching for %* should have returned a singularity");
00140 ob = create_archetype_by_object_name("");
00141 fail_unless(ob != NULL, "Inexistent item shuold return a singularity");
00142 fail_unless(!strncmp(ob->name, ARCH_SINGULARITY, strlen(ARCH_SINGULARITY)), "Searching for \"\" should have returned a singularity");
00143 }
00144 END_TEST
00145
00146 START_TEST(test_init_archetypes) {
00147
00148 archetype *arch = find_archetype("empty_archetype");
00149
00150 fail_unless(arch != NULL, "init_archetype should have an 'empty_archetype' loaded");
00151 }
00152 END_TEST
00153
00154 START_TEST(test_clear_archetable) {
00155 clear_archetable();
00156 }
00157 END_TEST
00158
00159 START_TEST(test_free_all_archs) {
00160 archetype *arch;
00161
00162 free_all_archs();
00163 arch = find_archetype("empty_archetype");
00164 fail_unless(arch == NULL, "init_archetype should not have an 'empty_archetype' loaded after call to free_all_archs");
00165 init_archetypes();
00166 arch = find_archetype("empty_archetype");
00167 fail_unless(arch != NULL, "init_archetype should have an 'empty_archetype' loaded");
00168 }
00169 END_TEST
00170
00171 START_TEST(test_get_archetype_struct) {
00172 archetype *arch = get_archetype_struct();
00173
00174 fail_unless(arch != NULL, "get_archetype_struct should not return NULL");
00175 fail_unless(arch->name == NULL, "arch->name of get_archetype_struct should be inited to NULL");
00176 fail_unless(arch->head == NULL, "arch->head of get_archetype_struct should be inited to NULL");
00177 fail_unless(arch->next == NULL, "arch->next of get_archetype_struct should be inited to NULL");
00178 fail_unless(arch->more == NULL, "arch->more of get_archetype_struct should be inited to NULL");
00179 fail_unless(arch->clone.other_arch == NULL, "arch->clone.other_arch of get_archetype_struct should be inited to NULL");
00180 fail_unless(arch->clone.contr == NULL, "arch->clone.contr of get_archetype_struct should be inited to NULL");
00181 fail_unless(arch->clone.next == NULL, "arch->clone.next of get_archetype_struct should be inited to NULL");
00182 fail_unless(arch->clone.prev == NULL, "arch->clone.prev of get_archetype_struct should be inited to NULL");
00183 fail_unless(arch->clone.active_next == NULL, "arch->clone.active_next of get_archetype_struct should be inited to NULL");
00184 fail_unless(arch->clone.active_prev == NULL, "arch->clone.active_prev of get_archetype_struct should be inited to NULL");
00185 fail_unless(arch->clone.below == NULL, "arch->clone.below of get_archetype_struct should be inited to NULL");
00186 fail_unless(arch->clone.above == NULL, "arch->clone.above of get_archetype_struct should be inited to NULL");
00187 fail_unless(arch->clone.inv == NULL, "arch->clone.inv of get_archetype_struct should be inited to NULL");
00188 fail_unless(arch->clone.container == NULL, "arch->clone.container of get_archetype_struct should be inited to NULL");
00189 fail_unless(arch->clone.env == NULL, "arch->clone.env of get_archetype_struct should be inited to NULL");
00190 fail_unless(arch->clone.more == NULL, "arch->clone.more of get_archetype_struct should be inited to NULL");
00191 fail_unless(arch->clone.head == NULL, "arch->clone.head of get_archetype_struct should be inited to NULL");
00192 fail_unless(arch->clone.map == NULL, "arch->clone.map of get_archetype_struct should be inited to NULL");
00193
00194 fail_unless(arch->clone.name == NULL, "arch->clone.name of get_archetype_struct should be inited to NULL");
00195 fail_unless(arch->clone.name_pl == NULL, "arch->clone.name_pl of get_archetype_struct should be inited to NULL");
00196 fail_unless(arch->clone.title == NULL, "arch->clone.title of get_archetype_struct should be inited to NULL");
00197 fail_unless(arch->clone.race == NULL, "arch->clone.race of get_archetype_struct should be inited to NULL");
00198 fail_unless(arch->clone.slaying == NULL, "arch->clone.slaying of get_archetype_struct should be inited to NULL");
00199 fail_unless(arch->clone.msg == NULL, "arch->clone.msg of get_archetype_struct should be inited to NULL");
00200 fail_unless(arch->clone.skill == NULL, "arch->clone.skill of get_archetype_struct should be inited to NULL");
00201 fail_unless(arch->clone.lore == NULL, "arch->clone.lore of get_archetype_struct should be inited to NULL");
00202
00203 fail_unless(arch->clone.current_weapon == NULL, "arch->clone.current_weapon of get_archetype_struct should be inited to NULL");
00204 fail_unless(arch->clone.enemy == NULL, "arch->clone.enemy of get_archetype_struct should be inited to NULL");
00205 fail_unless(arch->clone.attacked_by == NULL, "arch->clone.attacked_by of get_archetype_struct should be inited to NULL");
00206 fail_unless(arch->clone.randomitems == NULL, "arch->clone.randomitems of get_archetype_struct should be inited to NULL");
00207 fail_unless(arch->clone.chosen_skill == NULL, "arch->clone.chosen_skill of get_archetype_struct should be inited to NULL");
00208 fail_unless(arch->clone.spellitem == NULL, "arch->clone.spellitem of get_archetype_struct should be inited to NULL");
00209 fail_unless(arch->clone.spell == NULL, "arch->clone.spell of get_archetype_struct should be inited to NULL");
00210 fail_unless(arch->clone.spellarg == NULL, "arch->clone.spellarg of get_archetype_struct should be inited to NULL");
00211 fail_unless(arch->clone.arch == arch, "arch->clone.arch of get_archetype_struct should be inited to arch");
00212 fail_unless(arch->clone.other_arch == NULL, "arch->clone.other_arch of get_archetype_struct should be inited to NULL");
00213 fail_unless(arch->clone.custom_name == NULL, "arch->clone.custom_name of get_archetype_struct should be inited to NULL");
00214 fail_unless(arch->clone.key_values == NULL, "arch->clone.key_values of get_archetype_struct should be inited to NULL");
00215 }
00216 END_TEST
00217
00218 START_TEST(test_arch_to_object) {
00219 archetype *arch;
00220 object *obj;
00221
00222 arch = find_archetype("empty_archetype");
00223 obj = arch_to_object(arch);
00224 fail_unless(obj != NULL, "instanciating an arch should not return null");
00225 }
00226 END_TEST
00227
00228 START_TEST(test_create_singularity) {
00229 object *obj;
00230
00231 obj = create_singularity("XYZABCD");
00232 fail_unless(obj != NULL, "create_singularity should not return null");
00233 fail_unless(strstr(obj->name, "XYZABCD") != NULL, "create_singularity(\"XYZABCD\") should put XYZABCD somewhere in singularity name");
00234 }
00235 END_TEST
00236
00237 START_TEST(test_create_archetype) {
00238 object *obj;
00239
00240 obj = create_archetype("empty_archetype");
00241 fail_unless(obj != NULL, "create_archetype(\"empty_archetype\") should not return null");
00242 }
00243 END_TEST
00244
00245 START_TEST(test_find_archetype) {
00246 archetype *arch;
00247
00248 arch = find_archetype("empty_archetype");
00249 fail_unless(arch != NULL, "find_archetype(\"empty_archetype\") should not return null");
00250 arch = find_archetype("elvenboots");
00251 fail_unless(arch != NULL, "find_archetype(\"elvenboots\") should not return null");
00252 arch = find_archetype("AA1234567890");
00253 fail_unless(arch == NULL, "find_archetype(\"AA1234567890\") should return null");
00254 }
00255 END_TEST
00256
00257 START_TEST(test_object_create_arch) {
00258 archetype *arch;
00259 object *obj;
00260
00261 arch = find_archetype("dark_palace_4");
00262 obj = object_create_arch(arch);
00263 fail_unless(obj != NULL, "Should be able to fully instanciate the dark_palace");
00264 fail_unless(obj->head == NULL, "The object is full, so we should have got it's head. So head should be null but was %p for object %p", obj->head, obj);
00265 fail_unless(obj->more != NULL, "The object is full and multisquare, so more should not return null");
00266 }
00267 END_TEST
00268
00269 Suite *arch_suite(void) {
00270 Suite *s = suite_create("arch");
00271 TCase *tc_core = tcase_create("Core");
00272
00273
00274 tcase_add_checked_fixture(tc_core, setup, teardown);
00275
00276 suite_add_tcase(s, tc_core);
00277 tcase_add_test(tc_core, test_find_archetype_by_object_name);
00278 tcase_add_test(tc_core, test_find_archetype_by_object_type_name);
00279 tcase_add_test(tc_core, test_get_archetype_by_skill_name);
00280 tcase_add_test(tc_core, test_get_archetype_by_type_subtype);
00281 tcase_add_test(tc_core, test_create_archetype_by_object_name);
00282 tcase_add_test(tc_core, test_init_archetypes);
00283 tcase_add_test(tc_core, test_clear_archetable);
00284 tcase_add_test(tc_core, test_free_all_archs);
00285 tcase_add_test(tc_core, test_get_archetype_struct);
00286 tcase_add_test(tc_core, test_arch_to_object);
00287 tcase_add_test(tc_core, test_create_singularity);
00288 tcase_add_test(tc_core, test_create_archetype);
00289 tcase_add_test(tc_core, test_find_archetype);
00290 tcase_add_test(tc_core, test_object_create_arch);
00291
00292 return s;
00293 }
00294
00295 int main(void) {
00296 int nf;
00297 Suite *s = arch_suite();
00298 SRunner *sr = srunner_create(s);
00299
00300 srunner_set_xml(sr, LOGDIR "/unit/common/arch.xml");
00301 srunner_set_log(sr, LOGDIR "/unit/common/arch.out");
00302 srunner_run_all(sr, CK_ENV);
00303 nf = srunner_ntests_failed(sr);
00304 srunner_free(sr);
00305 return (nf == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
00306 }