static void json_skill(cJSON *json, struct locale *lang) { cJSON *child; if (json->type != cJSON_Object) { log_error("skill for locale `%s` not a json object: %d", locale_name(lang), json->type); return; } for (child = json->child; child; child = child->next) { skill_t sk = findskill(child->string); if (sk != NOSKILL) { if (child->type == cJSON_String) { init_skill(lang, sk, child->valuestring); locale_setstring(lang, mkname("skill", skillnames[sk]), child->valuestring); } else if (child->type == cJSON_Array) { cJSON *entry; for (entry = child->child; entry; entry = entry->next) { init_skill(lang, sk, entry->valuestring); if (entry == child->child) { locale_setstring(lang, mkname("skill", skillnames[sk]), entry->valuestring); } } } else { log_error("invalid type %d for skill `%s`", child->type, child->string); } } else { log_error("unknown skill `%s` for locale `%s`", child->string, locale_name(lang)); } } }
static void json_keyword(cJSON *json, struct locale *lang) { cJSON *child; if (json->type != cJSON_Object) { log_error("keywords for locale `%s` not a json object: %d", locale_name(lang), json->type); return; } for (child = json->child; child; child = child->next) { keyword_t kwd = findkeyword(child->string); if (kwd != NOKEYWORD) { if (child->type == cJSON_String) { init_keyword(lang, kwd, child->valuestring); locale_setstring(lang, mkname("keyword", keywords[kwd]), child->valuestring); } else if (child->type == cJSON_Array) { cJSON *entry; for (entry = child->child; entry; entry = entry->next) { init_keyword(lang, kwd, entry->valuestring); if (entry == child->child) { locale_setstring(lang, mkname("keyword", keywords[kwd]), entry->valuestring); } } } else { log_error("invalid type %d for keyword `%s`", child->type, child->string); } } else { log_error("unknown keyword `%s` for locale `%s`", child->string, locale_name(lang)); } } }
static void setup_sabotage(void) { struct locale *lang; test_setup(); lang = get_or_create_locale("de"); locale_setstring(lang, parameters[P_SHIP], "SCHIFF"); locale_setstring(lang, parameters[P_ANY], "ALLE"); init_parameters(lang); init_locales(); }
void test_getspell_unit(CuTest * tc) { spell *sp; struct unit * u; struct faction * f; struct region * r; struct locale * lang; test_cleanup(); test_create_world(); r = findregion(0, 0); f = test_create_faction(0); u = test_create_unit(f, r); create_mage(u, M_GRAY); skill_enabled[SK_MAGIC] = 1; set_level(u, SK_MAGIC, 1); lang = find_locale("de"); sp = create_spell("testspell", 0); locale_setstring(lang, mkname("spell", sp->sname), "Herp-a-derp"); CuAssertPtrEquals(tc, 0, unit_getspell(u, "Herp-a-derp", lang)); unit_add_spell(u, 0, sp, 1); CuAssertPtrNotNull(tc, unit_getspell(u, "Herp-a-derp", lang)); }
void test_getspell_school(CuTest * tc) { spell *sp; struct unit * u; struct faction * f; struct region * r; struct locale * lang; struct spellbook * book; test_cleanup(); test_create_world(); r = findregion(0, 0); f = test_create_faction(0); f->magiegebiet = M_TYBIED; u = test_create_unit(f, r); create_mage(u, f->magiegebiet); skill_enabled[SK_MAGIC] = 1; set_level(u, SK_MAGIC, 1); lang = find_locale("de"); sp = create_spell("testspell", 0); locale_setstring(lang, mkname("spell", sp->sname), "Herp-a-derp"); CuAssertPtrEquals(tc, 0, unit_getspell(u, "Herp-a-derp", lang)); book = faction_get_spellbook(f); CuAssertPtrNotNull(tc, book); spellbook_add(book, sp, 1); CuAssertPtrEquals(tc, sp, unit_getspell(u, "Herp-a-derp", lang)); }
static void setup_piracy(void) { struct locale *lang; ship_type *st_boat; config_set("rules.ship.storms", "0"); lang = get_or_create_locale("de"); locale_setstring(lang, directions[D_EAST], "OSTEN"); init_directions(lang); test_create_terrain("ocean", SEA_REGION); st_boat = test_create_shiptype("boat"); st_boat->cargo = 1000; mt_create_error(144); mt_create_error(146); mt_create_va(mt_new("piratenovictim", NULL), "ship:ship", "unit:unit", "region:region", MT_NEW_END); mt_create_va(mt_new("piratesawvictim", NULL), "ship:ship", "unit:unit", "region:region", "dir:int", MT_NEW_END); mt_create_va(mt_new("shipsail", NULL), "ship:ship", "from:region", "to:region", MT_NEW_END); mt_create_va(mt_new("shipfly", NULL), "ship:ship", "from:region", "to:region", MT_NEW_END); mt_create_va(mt_new("shipnoshore", NULL), "ship:ship", "region:region", MT_NEW_END); mt_create_va(mt_new("travel", NULL), "unit:unit", "start:region", "end:region", "mode:int", "regions:regions", MT_NEW_END); }
static void test_parse_maketemp(CuTest *tc) { char cmd[32]; order *ord; struct locale * lang = get_or_create_locale("en"); locale_setstring(lang, keyword(K_MAKE), "MAKE"); locale_setstring(lang, keyword(K_MAKETEMP), "MAKETEMP"); locale_setstring(lang, "TEMP", "TEMP"); init_locale(lang); ord = parse_order("MAKET herp", lang); CuAssertPtrNotNull(tc, ord); CuAssertStrEquals(tc, "MAKETEMP herp", get_command(ord, cmd, sizeof(cmd))); CuAssertIntEquals(tc, K_MAKETEMP, getkeyword(ord)); CuAssertIntEquals(tc, K_MAKETEMP, init_order(ord)); CuAssertStrEquals(tc, "herp", getstrtoken()); free_order(ord); }
building_type * test_create_buildingtype(const char * name) { building_type * btype = (building_type*)calloc(sizeof(building_type), 1); btype->flags = BTF_NAMECHANGE; btype->_name = _strdup(name); locale_setstring(default_locale, name, name); bt_register(btype); return btype; }
ship_type * test_create_shiptype(const char ** names) { ship_type * stype = (ship_type*)calloc(sizeof(ship_type), 1); stype->name[0] = _strdup(names[0]); stype->name[1] = _strdup(names[1]); locale_setstring(default_locale, names[0], names[0]); st_register(stype); return stype; }
void test_findresourcetype(CuTest * tc) { const resource_type *rtype, *rresult; struct locale * lang; test_cleanup(); test_create_world(); lang = get_locale("de"); locale_setstring(lang, "horse", "Pferd"); locale_setstring(lang, "peasant", "Bauer"); rtype = get_resourcetype(R_HORSE); rresult = findresourcetype("Pferd", lang); CuAssertPtrNotNull(tc, rresult); CuAssertPtrEquals(tc, (void*)rtype, (void*)rresult); CuAssertPtrNotNull(tc, findresourcetype("Bauer", lang)); }
static void test_init_directions(CuTest *tc) { struct locale *lang; test_cleanup(); lang = get_or_create_locale("en"); locale_setstring(lang, "dir_nw", "NW"); init_directions(lang); CuAssertIntEquals(tc, D_NORTHWEST, get_direction("nw", lang)); test_cleanup(); }
static void json_locale(cJSON *json, struct locale *lang) { cJSON *child; if (json->type != cJSON_Object) { log_error("strings is not a json object: %d", json->type); return; } for (child = json->child; child; child = child->next) { if (child->type == cJSON_String) { locale_setstring(lang, child->string, child->valuestring); } } }
static void setup_give(struct give *env) { struct terrain_type *ter = test_create_terrain("plain", LAND_REGION); race *rc; assert(env->f1); rc = test_create_race(env->f1->race ? env->f1->race->_name : "humon"); rc->ec_flags |= ECF_GIVEPERSON; env->r = test_create_region(0, 0, ter); env->src = test_create_unit(env->f1, env->r); env->itype = it_get_or_create(rt_get_or_create("money")); env->itype->flags |= ITF_HERB; if (env->f2) { ally_set(&env->f2->allies, env->f1, HELP_GIVE); env->dst = test_create_unit(env->f2, env->r); } else { env->dst = NULL; } if (env->lang) { locale_setstring(env->lang, env->itype->rtype->_name, "SILBER"); init_locale(env->lang); env->f1->locale = env->lang; } config_set("rules.give.max_men", "-1"); /* success messages: */ mt_create_va(mt_new("receive_person", NULL), "unit:unit", "target:unit", "amount:int", MT_NEW_END); mt_create_va(mt_new("give_person", NULL), "unit:unit", "target:unit", "amount:int", MT_NEW_END); mt_create_va(mt_new("give_person_peasants", NULL), "unit:unit", "amount:int", MT_NEW_END); mt_create_va(mt_new("give_person_ocean", NULL), "unit:unit", "amount:int", MT_NEW_END); mt_create_va(mt_new("receive", NULL), "unit:unit", "target:unit", "resource:resource", "amount:int", MT_NEW_END); mt_create_va(mt_new("give", NULL), "unit:unit", "target:unit", "resource:resource", "amount:int", MT_NEW_END); mt_create_va(mt_new("give_peasants", NULL), "unit:unit", "resource:resource", "amount:int", MT_NEW_END); /* error messages: */ mt_create_error(120); mt_create_error(128); mt_create_error(129); mt_create_error(96); mt_create_error(10); mt_create_feedback("feedback_give_forbidden"); mt_create_feedback("peasants_give_invalid"); mt_create_va(mt_new("too_many_units_in_faction", NULL), "unit:unit", "region:region", "command:order", "allowed:int", MT_NEW_END); mt_create_va(mt_new("too_many_units_in_alliance", NULL), "unit:unit", "region:region", "command:order", "allowed:int", MT_NEW_END); mt_create_va(mt_new("feedback_no_contact", NULL), "unit:unit", "region:region", "command:order", "target:unit", MT_NEW_END); mt_create_va(mt_new("giverestriction", NULL), "unit:unit", "region:region", "command:order", "turns:int", MT_NEW_END); mt_create_va(mt_new("error_unit_size", NULL), "unit:unit", "region:region", "command:order", "maxsize:int", MT_NEW_END); mt_create_va(mt_new("nogive_reserved", NULL), "unit:unit", "region:region", "command:order", "resource:resource", "reservation:int", MT_NEW_END); mt_create_va(mt_new("race_notake", NULL), "unit:unit", "region:region", "command:order", "race:race", MT_NEW_END); mt_create_va(mt_new("race_noregroup", NULL), "unit:unit", "region:region", "command:order", "race:race", MT_NEW_END); }
void test_finditemtype(CuTest * tc) { const item_type *itype; const resource_type *rtype; struct locale * lang; test_cleanup(); test_create_world(); lang = get_locale("de"); locale_setstring(lang, "horse", "Pferd"); rtype = get_resourcetype(R_HORSE); itype = finditemtype("Pferd", lang); CuAssertPtrNotNull(tc, itype); CuAssertPtrEquals(tc, (void*)rtype->itype, (void*)itype); }
static void test_move_to_vortex(CuTest *tc) { region *r1, *r2, *r = 0; terrain_type *t_plain; unit *u; struct locale *lang; test_cleanup(); lang = get_or_create_locale("en"); locale_setstring(lang, "vortex", "wirbel"); init_locale(lang); t_plain = test_create_terrain("plain", LAND_REGION | FOREST_REGION | WALK_INTO | CAVALRY_REGION); r1 = test_create_region(0, 0, t_plain); r2 = test_create_region(5, 0, t_plain); CuAssertPtrNotNull(tc, create_special_direction(r1, r2, 10, "", "vortex", true)); u = test_create_unit(test_create_faction(rc_get_or_create("hodor")), r1); CuAssertIntEquals(tc, E_MOVE_NOREGION, movewhere(u, "barf", r1, &r)); CuAssertIntEquals(tc, E_MOVE_OK, movewhere(u, "wirbel", r1, &r)); CuAssertPtrEquals(tc, r2, r); }
static void test_create_order(CuTest *tc) { char cmd[32]; order *ord; struct locale * lang; test_cleanup(); lang = get_or_create_locale("en"); locale_setstring(lang, "keyword::move", "MOVE"); ord = create_order(K_MOVE, lang, "NORTH"); CuAssertPtrNotNull(tc, ord); CuAssertIntEquals(tc, K_MOVE, getkeyword(ord)); CuAssertStrEquals(tc, "MOVE NORTH", get_command(ord, cmd, sizeof(cmd))); CuAssertIntEquals(tc, K_MOVE, init_order(ord)); CuAssertStrEquals(tc, "NORTH", getstrtoken()); free_order(ord); test_cleanup(); }
static void setup_resources(void) { struct locale *lang; item_type *itype; test_setup(); itype = it_get_or_create(rt_get_or_create("stone")); itype->rtype->flags = RTF_LIMITED | RTF_POOLED; itype->construction = calloc(1, sizeof(construction)); itype->construction->skill = SK_QUARRYING; itype->construction->minskill = 1; rmt_create(itype->rtype); init_resources(); lang = get_or_create_locale("de"); /* CR tags are translated from this */ locale_setstring(lang, "money", "Silber"); locale_setstring(lang, "money_p", "Silber"); locale_setstring(lang, "horse", "Pferd"); locale_setstring(lang, "horse_p", "Pferde"); locale_setstring(lang, "peasant", "Bauer"); locale_setstring(lang, "peasant_p", "Bauern"); locale_setstring(lang, "stone", "Stein"); locale_setstring(lang, "stone_p", "Steine"); locale_setstring(lang, "tree", "Blume"); locale_setstring(lang, "tree_p", "Blumen"); locale_setstring(lang, "sapling", "Schoessling"); locale_setstring(lang, "sapling_p", "Schoesslinge"); locale_setstring(lang, "mallornsapling", "Mallornschoessling"); locale_setstring(lang, "mallornsapling_p", "Mallornschoesslinge"); locale_setstring(lang, "mallorntree", "Mallorn"); locale_setstring(lang, "mallorntree_p", "Mallorn"); }
static void init_language(void) { struct locale* lang; int i; lang = get_or_create_locale("de"); locale_setstring(lang, "skill::unarmed", "Waffenloser Kampf"); locale_setstring(lang, "keyword::attack", "ATTACKIERE"); locale_setstring(lang, "keyword::study", "LERNE"); locale_setstring(lang, "keyword::tax", "TREIBE"); locale_setstring(lang, "keyword::loot", "PLUENDERE"); locale_setstring(lang, "keyword::piracy", "PIRATERIE"); locale_setstring(lang, "keyword::guard", "BEWACHE"); locale_setstring(lang, "keyword::move", "NACH"); locale_setstring(lang, "keyword::message", "BOTSCHAFT"); locale_setstring(lang, "REGION", "REGION"); locale_setstring(lang, "east", "O"); for (i = 0; i < MAXKEYWORDS; ++i) { if (!locale_getstring(lang, mkname("keyword", keywords[i]))) locale_setstring(lang, mkname("keyword", keywords[i]), keywords[i]); } for (i = 0; i < MAXSKILLS; ++i) { if (!locale_getstring(lang, mkname("skill", skillnames[i]))) locale_setstring(lang, mkname("skill", skillnames[i]), skillnames[i]); } init_keywords(lang); init_skills(lang); }
void locale_set(const char *lang, const char *key, const char *str) { struct locale *loc = get_locale(lang); if (loc) { locale_setstring(loc, key, str); } }