From b57db72396a37df7345ca882498e201b53c5c208 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sat, 19 May 2012 20:49:47 +0200 Subject: [PATCH] fix broken tests and clear locales (badly) when clearing global stte --- src/kernel/item_test.c | 30 ++++++++++++++++++++++++++++++ src/tests.c | 10 ++++++++-- src/tests_test.c | 30 ++++++++++++++++++++++++++++++ src/util/language.c | 8 +++++++- 4 files changed, 75 insertions(+), 3 deletions(-) create mode 100644 src/kernel/item_test.c create mode 100644 src/tests_test.c diff --git a/src/kernel/item_test.c b/src/kernel/item_test.c new file mode 100644 index 000000000..f12845ab4 --- /dev/null +++ b/src/kernel/item_test.c @@ -0,0 +1,30 @@ +#include + +#include + +#include +#include + +void test_resource_type(CuTest * tc) +{ + resource_type *rtype; + const char *names[2] = { 0 , 0 }; + + CuAssertPtrEquals(tc, 0, rt_find("herpderp")); + + names[0] = names[1] = "herpderp"; + new_resourcetype(names, NULL, RTF_NONE); + names[0] = names[1] = "herp"; + rtype = new_resourcetype(names, NULL, RTF_NONE); + names[0] = names[1] = "herpes"; + new_resourcetype(names, NULL, RTF_NONE); + + CuAssertPtrEquals(tc, rtype, rt_find("herp")); +} + +CuSuite *get_item_suite(void) +{ + CuSuite *suite = CuSuiteNew(); + SUITE_ADD_TEST(suite, test_resource_type); + return suite; +} diff --git a/src/tests.c b/src/tests.c index 193f3553a..f0d88806f 100644 --- a/src/tests.c +++ b/src/tests.c @@ -100,6 +100,8 @@ void test_cleanup(void) test_clear_resources(); global.functions.maintenance = NULL; global.functions.wage = NULL; + default_locale = 0; + locales = 0; /* TODO: this is evil and leaky */ free_gamedata(); } @@ -155,9 +157,13 @@ void test_create_world(void) building_type *btype; ship_type *stype; item_type * itype; - const char * names[2] = { "horse", "horse_p" }; + const char * horses[2] = { "horse", "horse_p" }; - itype = test_create_itemtype(names); + make_locale("de"); + init_resources(); + assert(!olditemtype[I_HORSE]); + + itype = test_create_itemtype(horses); olditemtype[I_HORSE] = itype; t_plain = test_create_terrain("plain", LAND_REGION | FOREST_REGION | WALK_INTO | CAVALRY_REGION); diff --git a/src/tests_test.c b/src/tests_test.c new file mode 100644 index 000000000..3f8a65513 --- /dev/null +++ b/src/tests_test.c @@ -0,0 +1,30 @@ +#include +#include + +#include + +static void test_recreate_world(CuTest * tc) +{ + test_cleanup(); + CuAssertPtrEquals(tc, 0, find_locale("de")); + CuAssertPtrEquals(tc, 0, it_find("money")); + CuAssertPtrEquals(tc, 0, it_find("horse")); + test_create_world(); + CuAssertPtrEquals(tc, default_locale, find_locale("de")); + CuAssertPtrNotNull(tc, default_locale); + CuAssertPtrNotNull(tc, it_find("money")); + CuAssertPtrNotNull(tc, it_find("horse")); + CuAssertPtrNotNull(tc, findregion(0, 0)); + test_cleanup(); + CuAssertPtrEquals(tc, 0, find_locale("de")); + CuAssertPtrEquals(tc, 0, it_find("money")); + CuAssertPtrEquals(tc, 0, it_find("horse")); + CuAssertPtrEquals(tc, 0, findregion(0, 0)); +} + +CuSuite *get_tests_suite(void) +{ + CuSuite *suite = CuSuiteNew(); + SUITE_ADD_TEST(suite, test_recreate_world); + return suite; +} diff --git a/src/util/language.c b/src/util/language.c index 9bb36cd2d..2af939234 100644 --- a/src/util/language.c +++ b/src/util/language.c @@ -57,6 +57,10 @@ locale *make_locale(const char *name) locale *l = (locale *) calloc(sizeof(locale), 1); locale **lp = &locales; + if (!locales) { + nextlocaleindex = 0; + } + while (*lp && (*lp)->hashkey != hkey) lp = &(*lp)->next; if (*lp) { @@ -164,8 +168,10 @@ void locale_setstring(locale * lang, const char *key, const char *value) unsigned int hkey = hashstring(key); unsigned int id = hkey & (SMAXHASH - 1); struct locale_str *find; - if (lang == NULL) + if (!lang) { lang = default_locale; + } + assert(lang); find = lang->strings[id]; while (find) { if (find->hashkey == hkey && strcmp(key, find->key) == 0)