2020-04-22 03:03:44 +02:00
|
|
|
local tcname = 'tests.shared.parser'
|
2020-05-03 16:52:40 +02:00
|
|
|
local lunit = require('lunit')
|
2020-04-22 03:03:44 +02:00
|
|
|
if _VERSION >= 'Lua 5.2' then
|
|
|
|
_ENV = module(tcname, 'seeall')
|
|
|
|
else
|
2020-05-03 16:52:40 +02:00
|
|
|
module(tcname, lunit.testcase, package.seeall)
|
2020-04-22 03:03:44 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
function setup()
|
|
|
|
eressea.free_game()
|
|
|
|
eressea.settings.set("rules.food.flags", "4") -- FOOD_IS_FREE
|
|
|
|
eressea.settings.set("rules.move.owner_leave", "0")
|
|
|
|
end
|
|
|
|
|
|
|
|
function test_parser()
|
|
|
|
local r = region.create(0, 0, "mountain")
|
|
|
|
local f = faction.create('human')
|
|
|
|
local u = unit.create(f, r, 1)
|
|
|
|
local filename = "orders.txt"
|
|
|
|
|
|
|
|
local file = io.open(filename, "w")
|
|
|
|
assert_not_nil(file)
|
|
|
|
f.password = 'Hodor'
|
|
|
|
file:write('ERESSEA ' .. itoa36(f.id) .. ' "Hodor"\n')
|
|
|
|
file:write('EINHEIT ' .. itoa36(u.id) .. "\n")
|
|
|
|
file:write("BENENNEN EINHEIT 'Goldene Herde'\n")
|
|
|
|
file:close()
|
|
|
|
|
|
|
|
eressea.read_orders(filename)
|
|
|
|
process_orders()
|
|
|
|
os.remove(filename)
|
|
|
|
assert_equal("Goldene Herde", u.name)
|
|
|
|
end
|
|
|
|
|
|
|
|
local function set_order(u, str)
|
|
|
|
u:clear_orders()
|
|
|
|
u:add_order(str)
|
|
|
|
end
|
|
|
|
|
|
|
|
function test_prefix()
|
|
|
|
local r0 = region.create(0, 0, "plain")
|
|
|
|
local f1 = faction.create('human')
|
|
|
|
local u1 = unit.create(f1, r0, 1)
|
|
|
|
|
|
|
|
set_order(u1, "PRAEFIX See")
|
|
|
|
process_orders()
|
|
|
|
assert_not_nil(u1:show():find("Seemensch"))
|
|
|
|
|
|
|
|
u1.race = "elf"
|
|
|
|
assert_not_nil(u1:show():find("Seeelf"))
|
|
|
|
|
|
|
|
set_order(u1, "PRAEFIX Mond")
|
|
|
|
process_orders()
|
|
|
|
assert_not_nil(u1:show():find("Mondelf"))
|
|
|
|
|
|
|
|
set_order(u1, "PRAEFIX")
|
|
|
|
process_orders()
|
|
|
|
assert_not_nil(u1:show():find("Elf"))
|
|
|
|
|
|
|
|
set_order(u1, "PRAEFIX Erz")
|
|
|
|
process_orders()
|
|
|
|
assert_not_nil(u1:show():find("Erzelf"))
|
|
|
|
u1.faction.locale = "en"
|
|
|
|
assert_not_nil(u1:show():find("archelf"))
|
|
|
|
end
|
|
|
|
|
|
|
|
function test_recruit()
|
|
|
|
local r = region.create(0, 0, "plain")
|
|
|
|
local f = faction.create('human')
|
|
|
|
local u = unit.create(f, r, 1)
|
|
|
|
|
|
|
|
u:add_item("money", 1000)
|
|
|
|
set_order(u, "REKRUTIERE 5")
|
|
|
|
process_orders()
|
|
|
|
for u in f.units do
|
|
|
|
assert_equal(6, u.number)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
function test_give_horses()
|
|
|
|
local r = region.create(0, 0, "plain")
|
|
|
|
local f = faction.create("human", "noreply@eressea.de", "de")
|
|
|
|
local u = unit.create(f, r, 1)
|
|
|
|
|
|
|
|
r:set_resource("horse", 0)
|
|
|
|
u:add_item("horse", 21)
|
|
|
|
u:add_item("dolphin", 10)
|
|
|
|
u:add_order("GIB 0 7 PFERD")
|
|
|
|
u:add_order("GIB 0 5 DELPHIN")
|
|
|
|
process_orders()
|
|
|
|
assert_equal(7, r:get_resource("horse"))
|
|
|
|
assert_equal(5, u:get_item("dolphin"))
|
|
|
|
assert_equal(14, u:get_item("horse"))
|
|
|
|
end
|
|
|
|
|
|
|
|
function test_give_silver()
|
|
|
|
local r = region.create(0, 0, "plain")
|
|
|
|
local f = faction.create("human", "noreply@eressea.de", "de")
|
|
|
|
local u = unit.create(f, r, 1)
|
|
|
|
|
|
|
|
r:set_resource("peasant", 0)
|
|
|
|
r:set_resource("money", 11)
|
|
|
|
u:clear_orders()
|
|
|
|
u:add_item("money", 20)
|
|
|
|
u:add_order("GIB 0 10 SILBER")
|
|
|
|
process_orders()
|
|
|
|
assert_equal(21, r:get_resource("money"))
|
|
|
|
assert_equal(10, u:get_item("money"))
|
|
|
|
end
|
|
|
|
|
|
|
|
function test_give_horses()
|
|
|
|
local r = region.create(0, 0, "plain")
|
|
|
|
local f = faction.create('human')
|
|
|
|
local u = unit.create(f, r, 1)
|
|
|
|
|
|
|
|
r:set_resource("horse", 0)
|
|
|
|
u:add_item("horse", 21)
|
|
|
|
u:add_item("dolphin", 10)
|
|
|
|
u:add_order("GIB 0 7 PFERD")
|
|
|
|
u:add_order("GIB 0 5 DELPHIN")
|
|
|
|
process_orders()
|
|
|
|
assert_equal(7, r:get_resource("horse"))
|
|
|
|
assert_equal(5, u:get_item("dolphin"))
|
|
|
|
assert_equal(14, u:get_item("horse"))
|
|
|
|
end
|
|
|
|
|
|
|
|
function test_give_silver()
|
|
|
|
local r = region.create(0, 0, "plain")
|
|
|
|
local f = faction.create('human')
|
|
|
|
local u = unit.create(f, r, 1)
|
|
|
|
|
|
|
|
r:set_resource("peasant", 0)
|
|
|
|
r:set_resource("money", 11)
|
|
|
|
u:clear_orders()
|
|
|
|
u:add_item("money", 20)
|
|
|
|
u:add_order("GIB 0 10 SILBER")
|
|
|
|
process_orders()
|
|
|
|
assert_equal(21, r:get_resource("money"))
|
|
|
|
assert_equal(10, u:get_item("money"))
|
|
|
|
end
|
|
|
|
|
|
|
|
function test_build_castle_one_stage()
|
|
|
|
local r = region.create(0, 0, 'plain')
|
|
|
|
local f = faction.create('human')
|
|
|
|
local u = unit.create(f, r, 2)
|
|
|
|
|
|
|
|
u:add_item('stone', 4)
|
|
|
|
|
|
|
|
u:set_skill('building', 1)
|
|
|
|
u:add_order('MACHE BURG')
|
|
|
|
|
|
|
|
process_orders()
|
|
|
|
assert_equal(2, u.building.size)
|
|
|
|
assert_equal(2, u:get_item('stone'))
|
|
|
|
end
|
|
|
|
|
|
|
|
function test_build_castle()
|
|
|
|
local r = region.create(0, 0, "plain")
|
|
|
|
local f = faction.create('human')
|
|
|
|
local u = unit.create(f, r, 1)
|
|
|
|
|
|
|
|
u:add_item('stone', 1)
|
|
|
|
u:set_skill('building', 1)
|
|
|
|
u:add_order("MACHE BURG")
|
|
|
|
process_orders()
|
|
|
|
assert_not_nil(u.building)
|
|
|
|
assert_equal(1, u.building.size)
|
|
|
|
assert_equal(u.building.name, "Burg")
|
|
|
|
end
|
|
|
|
|
|
|
|
function test_route()
|
|
|
|
local r1 = region.create(0, 0, "plain")
|
|
|
|
local r2 = region.create(1, 0, "plain")
|
|
|
|
local f = faction.create("human", "route@example.com")
|
|
|
|
local u = unit.create(f, r1, 1)
|
|
|
|
u:add_order("ROUTE O W P")
|
|
|
|
process_orders()
|
|
|
|
assert_equal("ROUTE West PAUSE Ost", u:get_order(0))
|
|
|
|
assert_equal(r2, u.region)
|
|
|
|
end
|
|
|
|
|
|
|
|
function test_route_horse()
|
|
|
|
local r1 = region.create(0, 0, "plain")
|
|
|
|
local r2 = region.create(1, 0, "plain")
|
|
|
|
local f = faction.create("human", "route@example.com")
|
|
|
|
local u = unit.create(f, r1, 1)
|
|
|
|
u:add_order("ROUTE O P W P")
|
|
|
|
u:add_item('horse', 1)
|
|
|
|
u:set_skill('riding', 1)
|
|
|
|
process_orders()
|
|
|
|
assert_equal("ROUTE West PAUSE Ost PAUSE", u:get_order(0))
|
|
|
|
assert_equal(r2, u.region)
|
|
|
|
end
|
|
|
|
|
|
|
|
function test_route_pause()
|
|
|
|
local r1 = region.create(0, 0, "plain")
|
|
|
|
local r2 = region.create(1, 0, "plain")
|
|
|
|
local f = faction.create("human", "route@example.com")
|
|
|
|
local u = unit.create(f, r1, 1)
|
|
|
|
u:add_order("ROUTE P O W")
|
|
|
|
process_orders()
|
|
|
|
assert_equal("ROUTE P O W", u:get_order(0))
|
|
|
|
assert_equal(r1, u.region)
|
|
|
|
end
|
|
|
|
|
|
|
|
function test_immunity_stops_guard()
|
|
|
|
eressea.settings.set("NewbieImmunity", 2)
|
|
|
|
local f = faction.create('human')
|
|
|
|
local r = region.create(0, 0, 'plain')
|
|
|
|
local u = unit.create(f, r)
|
|
|
|
u:set_skill('polearm', 2)
|
|
|
|
u:add_item('lance', 1)
|
|
|
|
u:add_order('BEWACHE')
|
|
|
|
process_orders()
|
|
|
|
assert_equal(f.age, 1)
|
|
|
|
assert_true(not u.guard)
|
|
|
|
process_orders()
|
|
|
|
assert_equal(f.age, 2)
|
|
|
|
assert_true(u.guard)
|
|
|
|
end
|
|
|
|
|
|
|
|
function test_region_keys()
|
|
|
|
local r = region.create(0, 0, 'plain')
|
|
|
|
assert_nil(r:get_key('test'))
|
|
|
|
assert_nil(r:get_key('more'))
|
|
|
|
r:set_key('test', 42)
|
|
|
|
r:set_key('more') -- default is 1
|
|
|
|
assert_equal(42, r:get_key('test'))
|
|
|
|
assert_equal(1, r:get_key('more'))
|
|
|
|
end
|
|
|
|
|
|
|
|
function test_faction_keys()
|
|
|
|
local f = faction.create('human')
|
|
|
|
assert_nil(f:get_key('test'))
|
|
|
|
assert_nil(f:get_key('more'))
|
|
|
|
f:set_key('test', 42)
|
|
|
|
f:set_key('more') -- default is 1
|
|
|
|
assert_equal(42, f:get_key('test'))
|
|
|
|
assert_equal(1, f:get_key('more'))
|
|
|
|
end
|
|
|
|
|
|
|
|
function test_cartmaking()
|
|
|
|
local f = faction.create('human')
|
|
|
|
local r = region.create(0, 0, 'plain')
|
|
|
|
local u = unit.create(f, r)
|
|
|
|
u:set_skill('cartmaking', 1)
|
|
|
|
u:add_item('log', 10)
|
|
|
|
u:add_order('MACHE Wagen')
|
|
|
|
process_orders()
|
|
|
|
assert_equal(1, u:get_item('cart'))
|
|
|
|
assert_equal(5, u:get_item('log'))
|
|
|
|
end
|
|
|
|
|
|
|
|
function test_promote_after_recruit()
|
|
|
|
local f = faction.create('human')
|
|
|
|
local r1 = region.create(0, 0, 'plain')
|
|
|
|
local r2 = region.create(1, 0, 'plain')
|
|
|
|
local u1 = unit.create(f, r1, 1)
|
|
|
|
u1.name = 'Xolgrim'
|
|
|
|
local u2 = unit.create(f, r2, 55)
|
|
|
|
u2:add_order('REKRUTIERE 1')
|
|
|
|
u1:add_order('BEFOERDERE')
|
|
|
|
u1:add_item('money', 57)
|
|
|
|
u2:add_item('money', 150)
|
|
|
|
local fl = u1.flags
|
|
|
|
process_orders()
|
|
|
|
assert_equal(56, u2.number)
|
|
|
|
assert_equal(fl + 128, u1.flags) -- UFL_HERO
|
|
|
|
assert_equal(0, u1:get_item('money'))
|
|
|
|
end
|