From b5439a1279f147992ad44b1681a7ab25eb672cdb Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Wed, 2 Jul 2014 21:17:31 -0700 Subject: [PATCH] fix line/column calculation for JSON Errors. + start building a test for http://bugs.eressea.de/view.php?id=1692 --- src/bind_config.c | 3 ++- src/kernel/config.c | 31 ++++++++++++++++-------------- tests/init.lua | 1 + tests/spells.lua | 47 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 67 insertions(+), 15 deletions(-) create mode 100644 tests/spells.lua diff --git a/src/bind_config.c b/src/bind_config.c index 19e99ec77..e0930481f 100644 --- a/src/bind_config.c +++ b/src/bind_config.c @@ -36,8 +36,9 @@ int config_parse(const char *json) int line; char buffer[10]; const char *xp = json, *lp, *ep = cJSON_GetErrorPtr(); - for (line=0,lp=xp;xp && xp=ep) break; } xp = (ep > json + 10) ? ep - 10 : json; strncpy(buffer, xp, sizeof(buffer)); diff --git a/src/kernel/config.c b/src/kernel/config.c index 5aaf90801..4d0fcacfa 100644 --- a/src/kernel/config.c +++ b/src/kernel/config.c @@ -1161,21 +1161,24 @@ int findoption(const char *s, const struct locale *lang) param_t findparam(const char *s, const struct locale * lang) { - param_t result = NOPARAM; - char buffer[64]; - char * str = transliterate(buffer, sizeof(buffer)-sizeof(int), s); - - if (str && *str) { - int i; - const void * match; - void **tokens = get_translations(lang, UT_PARAMS); - critbit_tree *cb = (critbit_tree *)*tokens; - if (cb_find_prefix(cb, str, strlen(str), &match, 1, 0)) { - cb_get_kv(match, &i, sizeof(int)); - result = (param_t)i; + param_t result = NOPARAM; + char buffer[64]; + char * str = transliterate(buffer, sizeof(buffer)-sizeof(int), s); + + if (str && *str) { + int i; + const void * match; + void **tokens = get_translations(lang, UT_PARAMS); + critbit_tree *cb = (critbit_tree *)*tokens; + if (!cb) { + log_error_n("no parameters defined in locale %s", locale_name(lang)); + } + else if (cb_find_prefix(cb, str, strlen(str), &match, 1, 0)) { + cb_get_kv(match, &i, sizeof(int)); + result = (param_t)i; + } } - } - return result; + return result; } param_t findparam_ex(const char *s, const struct locale * lang) diff --git a/tests/init.lua b/tests/init.lua index 032bf94ec..e54c2229f 100644 --- a/tests/init.lua +++ b/tests/init.lua @@ -7,3 +7,4 @@ require "tests.ships" require "tests.study" require "tests.movement" require "tests.castles" +require "tests.spells" diff --git a/tests/spells.lua b/tests/spells.lua new file mode 100644 index 000000000..0c6333569 --- /dev/null +++ b/tests/spells.lua @@ -0,0 +1,47 @@ +require "lunit" + +module("tests.spells", package.seeall, lunit.testcase) + +function setup() + eressea.game.reset() + eressea.settings.set("nmr.removenewbie", "0") + eressea.settings.set("nmr.timeout", "0") + conf = [[{ + "races": { + "human" : {} + }, + "terrains" : { + "plain": { "flags" : [ "land", "walk", "sail" ] } + }, + "spells" : { + "resist_magic" : { + "index" : 97, + "parameters" : "u+" + } + }, + "keywords" : { + "de" : { + "cast" : "ZAUBERE" + } + }, + "strings" : { + "de" : { + "harbour" : "Hafen" + } + } + }]] + + eressea.config.reset() + assert(eressea.config.parse(conf)==0) +end + +function test_antimagic_visibility() + local r = region.create(0, 0, "plain") + local f1 = faction.create("test@example.com", "human", "de") + local mage = unit.create(f1, r, 1) + local target = unit.create(f1, r, 1) + mage:set_skill("magic", 10) + mage:add_spell("resist_magic") + mage:add_order("ZAUBERE Antimagie " .. target.id) + process_orders() +end