forked from github/server
bug 2710: add tests, fix land movement
This commit is contained in:
parent
b50994bb9c
commit
fe463a9f44
|
@ -79,3 +79,66 @@ function test_no_guard_no_move_after_combat() -- bug 1493
|
||||||
u1 = get_unit(uid1)
|
u1 = get_unit(uid1)
|
||||||
assert_equal(r1, u1.region)
|
assert_equal(r1, u1.region)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function test_move_stops_guarding()
|
||||||
|
local r1 = region.create(0, 0, "plain")
|
||||||
|
local r2 = region.create(1, 0, "plain")
|
||||||
|
local f = faction.create("human", "test@example.com", "de")
|
||||||
|
local u = unit.create(f, r1, 1)
|
||||||
|
u:add_item("sword", 1)
|
||||||
|
u:set_skill("melee", 2)
|
||||||
|
u:add_order("NACH O")
|
||||||
|
u:add_order("BEWACHE")
|
||||||
|
u.guard = true
|
||||||
|
process_orders()
|
||||||
|
assert_equal(r2, u.region)
|
||||||
|
assert_false(u.guard)
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_move_to_same_region_stops_guarding()
|
||||||
|
local r1 = region.create(0, 0, "plain")
|
||||||
|
local r2 = region.create(1, 0, "plain")
|
||||||
|
local f = faction.create("human", "test@example.com", "de")
|
||||||
|
local u = unit.create(f, r1, 1)
|
||||||
|
u:add_item("horse", 1)
|
||||||
|
u:add_item("sword", 1)
|
||||||
|
u:set_skill("melee", 2)
|
||||||
|
u:set_skill("riding", 2)
|
||||||
|
u:add_order("NACH O W")
|
||||||
|
u.guard = true
|
||||||
|
process_orders()
|
||||||
|
assert_equal(r1, u.region)
|
||||||
|
assert_false(u.guard)
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_mover_cannot_start_guarding()
|
||||||
|
local r1 = region.create(0, 0, "plain")
|
||||||
|
local r2 = region.create(1, 0, "plain")
|
||||||
|
local f = faction.create("human", "test@example.com", "de")
|
||||||
|
local u = unit.create(f, r1, 1)
|
||||||
|
u:add_item("horse", 1)
|
||||||
|
u:add_item("sword", 1)
|
||||||
|
u:set_skill("melee", 2)
|
||||||
|
u:set_skill("riding", 2)
|
||||||
|
u:add_order("BEWACHE")
|
||||||
|
u:add_order("NACH O")
|
||||||
|
process_orders()
|
||||||
|
assert_equal(r2, u.region)
|
||||||
|
assert_false(u.guard)
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_move_to_same_region_stops_guarding()
|
||||||
|
local r1 = region.create(0, 0, "plain")
|
||||||
|
local r2 = region.create(1, 0, "plain")
|
||||||
|
local f = faction.create("human", "test@example.com", "de")
|
||||||
|
local u = unit.create(f, r1, 1)
|
||||||
|
u:add_item("horse", 1)
|
||||||
|
u:add_item("sword", 1)
|
||||||
|
u:set_skill("melee", 2)
|
||||||
|
u:set_skill("riding", 2)
|
||||||
|
u:add_order("BEWACHE")
|
||||||
|
u:add_order("NACH O W")
|
||||||
|
process_orders()
|
||||||
|
assert_equal(r1, u.region)
|
||||||
|
assert_false(u.guard)
|
||||||
|
end
|
||||||
|
|
|
@ -165,3 +165,20 @@ function assert_capacity(text, u, silver, r1, r2, rx)
|
||||||
process_orders()
|
process_orders()
|
||||||
assert_equal(rx, u.region, text .. "unit should not move")
|
assert_equal(rx, u.region, text .. "unit should not move")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function test_move_to_same_region_leaves_building()
|
||||||
|
local r1 = region.create(0, 0, "plain")
|
||||||
|
local r2 = region.create(1, 0, "plain")
|
||||||
|
local f = faction.create("human", "test@example.com", "de")
|
||||||
|
local u = unit.create(f, r1, 1)
|
||||||
|
local b = building.create(u.region, "castle")
|
||||||
|
b.size = 2
|
||||||
|
u.building = b
|
||||||
|
assert_not_nil(u.building)
|
||||||
|
u:add_item("horse", 1)
|
||||||
|
u:set_skill("riding", 2)
|
||||||
|
u:add_order("NACH O W")
|
||||||
|
process_orders()
|
||||||
|
assert_equal(r1, u.region)
|
||||||
|
assert_nil(u.building)
|
||||||
|
end
|
||||||
|
|
|
@ -519,3 +519,31 @@ function test_build_convoy_max()
|
||||||
assert_equal(100, sh.size)
|
assert_equal(100, sh.size)
|
||||||
assert_equal(25, u:get_item('log'))
|
assert_equal(25, u:get_item('log'))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function test_ship_crew_stops_guarding()
|
||||||
|
local r1 = region.create(0, 0, "plain")
|
||||||
|
local r2 = region.create(1, 0, "ocean")
|
||||||
|
local f = faction.create("human")
|
||||||
|
local u1 = unit.create(f, r1, 1)
|
||||||
|
local u2 = unit.create(f, r1, 1)
|
||||||
|
local sh = ship.create(r1, "longboat")
|
||||||
|
u1.ship = sh
|
||||||
|
u2.ship = sh
|
||||||
|
u1.name = 'Bolgrim'
|
||||||
|
u1.name = 'Bolle'
|
||||||
|
u1:clear_orders()
|
||||||
|
u1:add_order("NACH O W")
|
||||||
|
u1:set_skill("sailing", 1) -- cptskill = 1
|
||||||
|
u2:set_skill("sailing", 9) -- sumskill = 10
|
||||||
|
u2:add_item("sword", 1)
|
||||||
|
u2:set_skill("melee", 2)
|
||||||
|
u2:add_order("BEWACHE")
|
||||||
|
u2.guard = true
|
||||||
|
process_orders()
|
||||||
|
assert_false(u2.guard)
|
||||||
|
assert_equal(sh, u1.ship)
|
||||||
|
assert_equal(sh, u2.ship)
|
||||||
|
assert_equal(r1, sh.region)
|
||||||
|
assert_equal(r1, u1.region)
|
||||||
|
assert_equal(r1, u2.region)
|
||||||
|
end
|
||||||
|
|
|
@ -271,7 +271,7 @@ static int tolua_unit_get_guard(lua_State * L)
|
||||||
static int tolua_unit_set_guard(lua_State * L)
|
static int tolua_unit_set_guard(lua_State * L)
|
||||||
{
|
{
|
||||||
unit *u = (unit *)tolua_tousertype(L, 1, 0);
|
unit *u = (unit *)tolua_tousertype(L, 1, 0);
|
||||||
unsigned int flags = (unsigned int)tolua_tonumber(L, 2, 0);
|
int flags = tolua_toboolean(L, 2, 0);
|
||||||
setguard(u, flags!=0);
|
setguard(u, flags!=0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -705,27 +705,33 @@ bool can_survive(const unit * u, const region * r)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void leave_region(unit* u)
|
||||||
|
{
|
||||||
|
assert(u->region);
|
||||||
|
setguard(u, false);
|
||||||
|
fset(u, UFL_MOVED);
|
||||||
|
if (u->ship || u->building) {
|
||||||
|
/* can_leave must be checked in travel_i */
|
||||||
|
#ifndef NDEBUG
|
||||||
|
bool result = leave(u, false);
|
||||||
|
assert(result);
|
||||||
|
#else
|
||||||
|
leave(u, false);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void move_unit(unit * u, region * r, unit ** ulist)
|
void move_unit(unit * u, region * r, unit ** ulist)
|
||||||
{
|
{
|
||||||
assert(u && r);
|
assert(u && r);
|
||||||
|
|
||||||
assert(u->faction || !"this unit is dead");
|
assert(u->faction || !"this unit is dead");
|
||||||
if (u->region == r)
|
if (!ulist) {
|
||||||
return;
|
|
||||||
if (!ulist)
|
|
||||||
ulist = (&r->units);
|
ulist = (&r->units);
|
||||||
|
}
|
||||||
if (u->region) {
|
if (u->region) {
|
||||||
setguard(u, false);
|
leave_region(u);
|
||||||
fset(u, UFL_MOVED);
|
|
||||||
if (u->ship || u->building) {
|
|
||||||
/* can_leave must be checked in travel_i */
|
|
||||||
#ifndef NDEBUG
|
|
||||||
bool result = leave(u, false);
|
|
||||||
assert(result);
|
|
||||||
#else
|
|
||||||
leave(u, false);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
translist(&u->region->units, ulist, u);
|
translist(&u->region->units, ulist, u);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -143,6 +143,7 @@ extern "C" {
|
||||||
int get_modifier(const struct unit *u, skill_t sk, int level,
|
int get_modifier(const struct unit *u, skill_t sk, int level,
|
||||||
const struct region *r, bool noitem);
|
const struct region *r, bool noitem);
|
||||||
int remove_unit(struct unit **ulist, struct unit *u);
|
int remove_unit(struct unit **ulist, struct unit *u);
|
||||||
|
void leave_region(struct unit* u);
|
||||||
|
|
||||||
/* looking up dead units' factions: */
|
/* looking up dead units' factions: */
|
||||||
struct faction *dfindhash(int no);
|
struct faction *dfindhash(int no);
|
||||||
|
|
|
@ -4,6 +4,7 @@ IF EXIST ..\build-vs11 SET BUILD=..\build-vs11\eressea\Debug
|
||||||
IF EXIST ..\build-vs12 SET BUILD=..\build-vs12\eressea\Debug
|
IF EXIST ..\build-vs12 SET BUILD=..\build-vs12\eressea\Debug
|
||||||
IF EXIST ..\build-vs14 SET BUILD=..\build-vs14\eressea\Debug
|
IF EXIST ..\build-vs14 SET BUILD=..\build-vs14\eressea\Debug
|
||||||
IF EXIST ..\build-vs15 SET BUILD=..\build-vs15\eressea\Debug
|
IF EXIST ..\build-vs15 SET BUILD=..\build-vs15\eressea\Debug
|
||||||
|
IF EXIST ..\build-vs16 SET BUILD=..\build-vs16\eressea\Debug
|
||||||
|
|
||||||
SET SERVER=%BUILD%\eressea.exe
|
SET SERVER=%BUILD%\eressea.exe
|
||||||
%BUILD%\test_eressea.exe
|
%BUILD%\test_eressea.exe
|
||||||
|
|
Loading…
Reference in New Issue