forked from github/server
write a test that proves the bug in turn 966
This commit is contained in:
parent
95092a8085
commit
325a0ccbf1
|
@ -153,8 +153,8 @@ static int tolua_unit_get_group(lua_State * L)
|
|||
static int tolua_unit_set_group(lua_State * L)
|
||||
{
|
||||
unit *self = (unit *)tolua_tousertype(L, 1, 0);
|
||||
int result = join_group(self, tolua_tostring(L, 2, 0));
|
||||
lua_pushinteger(L, result);
|
||||
group *g = join_group(self, tolua_tostring(L, 2, 0));
|
||||
lua_pushboolean(L, g!=NULL);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -179,7 +179,7 @@ void set_group(struct unit *u, struct group *g)
|
|||
}
|
||||
}
|
||||
|
||||
bool join_group(unit * u, const char *name)
|
||||
group *join_group(unit * u, const char *name)
|
||||
{
|
||||
group *g = NULL;
|
||||
|
||||
|
@ -192,7 +192,7 @@ bool join_group(unit * u, const char *name)
|
|||
}
|
||||
|
||||
set_group(u, g);
|
||||
return true;
|
||||
return g;
|
||||
}
|
||||
|
||||
void write_groups(struct storage *store, const faction * f)
|
||||
|
|
|
@ -36,7 +36,7 @@ extern "C" {
|
|||
} group;
|
||||
|
||||
extern struct attrib_type at_group; /* attribute for units assigned to a group */
|
||||
extern bool join_group(struct unit *u, const char *name);
|
||||
extern struct group *join_group(struct unit *u, const char *name);
|
||||
extern void set_group(struct unit *u, struct group *g);
|
||||
extern struct group * get_group(const struct unit *u);
|
||||
extern void free_group(struct group *g);
|
||||
|
|
|
@ -68,8 +68,8 @@ static void test_group(CuTest * tc)
|
|||
assert(r && f);
|
||||
u = test_create_unit(f, r);
|
||||
assert(u);
|
||||
CuAssertTrue(tc, join_group(u, "hodor"));
|
||||
CuAssertPtrNotNull(tc, (g = get_group(u)));
|
||||
CuAssertPtrNotNull(tc, (g = join_group(u, "hodor")));
|
||||
CuAssertPtrEquals(tc, g, get_group(u));
|
||||
CuAssertStrEquals(tc, "hodor", g->name);
|
||||
CuAssertIntEquals(tc, 1, g->members);
|
||||
set_group(u, 0);
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
|
||||
#include "save.h"
|
||||
#include "unit.h"
|
||||
#include "group.h"
|
||||
#include "ally.h"
|
||||
#include "faction.h"
|
||||
#include "version.h"
|
||||
#include <CuTest.h>
|
||||
|
@ -61,10 +63,51 @@ static void test_readwrite_unit(CuTest * tc)
|
|||
test_cleanup();
|
||||
}
|
||||
|
||||
static void test_readwrite_dead_faction(CuTest *tc) {
|
||||
faction *f, *f2;
|
||||
unit * u;
|
||||
group *g;
|
||||
ally *al;
|
||||
int fno;
|
||||
|
||||
test_cleanup();
|
||||
f = test_create_faction(0);
|
||||
fno = f->no;
|
||||
CuAssertPtrEquals(tc, f, factions);
|
||||
CuAssertPtrEquals(tc, 0, f->next);
|
||||
f2 = test_create_faction(0);
|
||||
CuAssertPtrEquals(tc, f2, factions->next);
|
||||
u = test_create_unit(f2, test_create_region(0, 0, 0));
|
||||
CuAssertPtrNotNull(tc, u);
|
||||
g = join_group(u, "group");
|
||||
CuAssertPtrNotNull(tc, g);
|
||||
al = ally_add(&g->allies, f);
|
||||
CuAssertPtrNotNull(tc, al);
|
||||
|
||||
CuAssertPtrEquals(tc, f, factions);
|
||||
destroyfaction(&factions);
|
||||
CuAssertTrue(tc, !f->_alive);
|
||||
CuAssertPtrEquals(tc, f2, factions);
|
||||
writegame("test.dat");
|
||||
free_gamedata();
|
||||
f = f2 = NULL;
|
||||
readgame("test.dat", false);
|
||||
CuAssertPtrEquals(tc, 0, findfaction(fno));
|
||||
f2 = factions;
|
||||
CuAssertPtrNotNull(tc, f2);
|
||||
u = f2->units;
|
||||
CuAssertPtrNotNull(tc, u);
|
||||
g = get_group(u);
|
||||
CuAssertPtrNotNull(tc, g);
|
||||
CuAssertPtrEquals(tc, 0, g->allies);
|
||||
test_cleanup();
|
||||
}
|
||||
|
||||
CuSuite *get_save_suite(void)
|
||||
{
|
||||
CuSuite *suite = CuSuiteNew();
|
||||
SUITE_ADD_TEST(suite, test_readwrite_data);
|
||||
SUITE_ADD_TEST(suite, test_readwrite_unit);
|
||||
SUITE_ADD_TEST(suite, test_readwrite_dead_faction);
|
||||
return suite;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue