Merge pull request #134 from badgerman/stype-ctor

shiptype constructor default initialization
This commit is contained in:
Enno Rehling 2015-02-06 01:08:01 +01:00
commit 308a63668b
7 changed files with 64 additions and 14 deletions

View File

@ -363,6 +363,7 @@ static void test_btype_defaults(CuTest *tc) {
btype = bt_get_or_create("hodor");
CuAssertPtrNotNull(tc, btype);
CuAssertStrEquals(tc, "hodor", btype->_name);
CuAssertPtrEquals(tc, 0, btype->maintenance);
CuAssertPtrEquals(tc, 0, btype->construction);
CuAssertTrue(tc, !btype->name);
@ -370,7 +371,6 @@ static void test_btype_defaults(CuTest *tc) {
CuAssertTrue(tc, !btype->age);
CuAssertTrue(tc, !btype->protection);
CuAssertTrue(tc, !btype->taxes);
CuAssertStrEquals(tc, "hodor", btype->_name);
CuAssertDblEquals(tc, 1.0, btype->auraregen, 0.0);
CuAssertIntEquals(tc, -1, btype->maxsize);
CuAssertIntEquals(tc, -1, btype->capacity);

View File

@ -320,6 +320,30 @@ static void test_buildings_default(CuTest * tc)
test_cleanup();
}
static const char * ship_defaults_data = "{\"ships\": { "
"\"hodor\" : { }"
"}}";
static void test_ships_default(CuTest * tc)
{
cJSON *json = cJSON_Parse(ship_defaults_data);
const ship_type *st;
ship_type clone;
test_cleanup();
st = st_get_or_create("hodor");
clone = *st;
CuAssertIntEquals(tc, 0, memcmp(st, &clone, sizeof(ship_type)));
CuAssertPtrNotNull(tc, json);
json_config(json);
CuAssertPtrEquals(tc, (void *)st, (void *)st_find("hodor"));
CuAssertIntEquals(tc, 0, memcmp(st, &clone, sizeof(ship_type)));
test_cleanup();
}
static void test_configs(CuTest * tc)
{
const char * data = "{\"include\": [ \"test.json\" ] }";
@ -470,6 +494,7 @@ CuSuite *get_jsonconf_suite(void)
SUITE_ADD_TEST(suite, test_skills);
SUITE_ADD_TEST(suite, test_directions);
SUITE_ADD_TEST(suite, test_items);
SUITE_ADD_TEST(suite, test_ships_default);
SUITE_ADD_TEST(suite, test_ships);
SUITE_ADD_TEST(suite, test_buildings);
SUITE_ADD_TEST(suite, test_buildings_default);

View File

@ -110,6 +110,7 @@ ship_type *st_get_or_create(const char * name) {
if (!st) {
st = (ship_type *)calloc(sizeof(ship_type), 1);
st->_name = _strdup(name);
st->storm = 1.0;
ql_push(&shiptypes, (void *)st);
}
return st;

View File

@ -38,6 +38,7 @@ extern "C" {
int range; /* range in regions */
int flags; /* flags */
int combat; /* modifier for combat */
int fishing; /* weekly income from fishing */
double storm; /* multiplier for chance to drift in storm */
double damage; /* multiplier for damage taken by the ship */
@ -49,8 +50,6 @@ extern "C" {
int minskill; /* min. skill to sail this (crew) */
int sumskill; /* min. sum of crew+captain */
int fishing; /* weekly income from fishing */
int at_bonus; /* Verändert den Angriffsskill (default: 0) */
int df_bonus; /* Verändert den Verteidigungskill (default: 0) */
float tac_bonus;

View File

@ -342,10 +342,36 @@ void test_shipowner_goes_to_empty_unit_after_leave(CuTest * tc)
CuAssertPtrEquals(tc, u2, ship_owner(sh));
}
static void test_stype_defaults(CuTest *tc) {
ship_type *stype;
test_cleanup();
stype = st_get_or_create("hodor");
CuAssertPtrNotNull(tc, stype);
CuAssertStrEquals(tc, "hodor", stype->_name);
CuAssertPtrEquals(tc, 0, stype->construction);
CuAssertPtrEquals(tc, 0, stype->coasts);
CuAssertDblEquals(tc, 0.0, stype->damage, 0.0);
CuAssertDblEquals(tc, 1.0, stype->storm, 0.0);
CuAssertDblEquals(tc, 0.0, stype->tac_bonus, 0.0);
CuAssertIntEquals(tc, 0, stype->cabins);
CuAssertIntEquals(tc, 0, stype->cargo);
CuAssertIntEquals(tc, 0, stype->combat);
CuAssertIntEquals(tc, 0, stype->fishing);
CuAssertIntEquals(tc, 0, stype->range);
CuAssertIntEquals(tc, 0, stype->cptskill);
CuAssertIntEquals(tc, 0, stype->minskill);
CuAssertIntEquals(tc, 0, stype->sumskill);
CuAssertIntEquals(tc, 0, stype->at_bonus);
CuAssertIntEquals(tc, 0, stype->df_bonus);
CuAssertIntEquals(tc, 0, stype->flags);
test_cleanup();
}
CuSuite *get_ship_suite(void)
{
CuSuite *suite = CuSuiteNew();
SUITE_ADD_TEST(suite, test_register_ship);
SUITE_ADD_TEST(suite, test_stype_defaults);
SUITE_ADD_TEST(suite, test_ship_set_owner);
SUITE_ADD_TEST(suite, test_shipowner_resets_when_empty);
SUITE_ADD_TEST(suite, test_shipowner_goes_to_next_when_empty);

View File

@ -491,21 +491,21 @@ static int parse_ships(xmlDocPtr doc)
xmlFree(propValue);
st->cabins = xml_ivalue(node, "cabins", 0) * PERSON_WEIGHT;
st->cargo = xml_ivalue(node, "cargo", 0);
st->combat = xml_ivalue(node, "combat", 0);
st->cptskill = xml_ivalue(node, "cptskill", 0);
st->damage = xml_fvalue(node, "damage", 0.0);
st->cargo = xml_ivalue(node, "cargo", st->cargo);
st->combat = xml_ivalue(node, "combat", st->combat);
st->damage = xml_fvalue(node, "damage", st->damage);
if (xml_bvalue(node, "nocoast", false))
st->flags |= SFL_NOCOAST;
if (xml_bvalue(node, "fly", false))
st->flags |= SFL_FLY;
if (xml_bvalue(node, "opensea", false))
st->flags |= SFL_OPENSEA;
st->fishing = xml_ivalue(node, "fishing", 0);
st->minskill = xml_ivalue(node, "minskill", 0);
st->range = xml_ivalue(node, "range", 0);
st->storm = xml_fvalue(node, "storm", 1.0);
st->sumskill = xml_ivalue(node, "sumskill", 0);
st->fishing = xml_ivalue(node, "fishing", st->fishing);
st->cptskill = xml_ivalue(node, "cptskill", st->cptskill);
st->minskill = xml_ivalue(node, "minskill", st->minskill);
st->sumskill = xml_ivalue(node, "sumskill", st->sumskill);
st->range = xml_ivalue(node, "range", st->range);
st->storm = xml_fvalue(node, "storm", st->storm);
/* reading eressea/ships/ship/construction */
xpath->node = node;

View File

@ -240,13 +240,12 @@ const message_type *register_msg(const char *type, int n_param, ...) {
void assert_messages(struct CuTest * tc, struct mlist *msglist, const message_type **types,
int num_msgs, bool exact_match, ...) {
va_list args;
int found, argc;
int found = 0, argc = 0;
struct message *msg;
bool match = true;
va_start(args, exact_match);
found = 0;
while (msglist) {
if (found >= num_msgs) {
if (exact_match) {