server/src/scripts/tests.lua
Enno Rehling bc3612935b new implementation blessedharvest and raindance (in lua)
lots of lua interfacing for spells.
region.adj (Lua) is kewl.
2009-07-23 19:19:01 +00:00

670 lines
17 KiB
Lua
Raw Blame History

local function test_rename()
free_game()
local r = region.create(0, 0, "plain")
local f = faction.create("enno@eressea.de", "human", "de")
local u = unit.create(f, r)
u:add_item("aoh", 1)
assert(u:get_item("ao_healing")==1)
end
local function test_blessed()
free_game()
local r = region.create(0, 0, "plain")
local f = faction.create("enno@eressea.de", "human", "de")
local u = unit.create(f, r)
r:set_resource("peasant", 100)
r:set_resource("money", 0)
u:add_item("money", 1000)
u.magic = "gwyrrd"
u.race = "elf"
u:set_skill("magic", 20)
u.aura = 200
u:add_spell("raindance")
u:add_spell("blessedharvest")
u:clear_orders()
u:add_order("ZAUBERE STUFE 3 Regentanz")
print(r:get_resource("money"))
process_orders()
print(r:get_resource("money"))
u:clear_orders()
u:add_order("ARBEITEN")
for i=1,3 do
process_orders()
print(r:get_resource("money"))
end
end
local function test_pure()
free_game()
local r = region.create(0, 0, "plain")
end
local function test_read_write()
free_game()
local r = region.create(0, 0, "plain")
local f = faction.create("enno@eressea.de", "human", "de")
local u = unit.create(f, r)
u.number = 2
local fno = f.id
local uno = u.id
local result = 0
assert(r.terrain=="plain")
result = write_game("test_read_write.dat", "binary")
assert(result==0)
assert(get_region(0, 0)~=nil)
assert(get_faction(fno)~=nil)
assert(get_unit(uno)~=nil)
r = nil
f = nil
u = nil
free_game()
assert(get_region(0, 0)==nil)
assert(get_faction(fno)==nil)
assert(get_unit(uno)==nil)
result = read_game("test_read_write.dat", "binary")
assert(result==0)
assert(get_region(0, 0)~=nil)
assert(get_faction(fno)~=nil)
assert(get_unit(uno)~=nil)
free_game()
end
local function test_gmtool()
free_game()
local r1 = region.create(1, 0, "plain")
local r2 = region.create(1, 1, "plain")
local r3 = region.create(1, 2, "plain")
gmtool.open()
gmtool.select(r1, true)
gmtool.select_at(0, 1, true)
gmtool.select(r2, true)
gmtool.select_at(0, 2, true)
gmtool.select(r3, false)
gmtool.select(r3, true)
gmtool.select_at(0, 3, false)
gmtool.select(r3, false)
local selections = 0
for r in gmtool.get_selection() do
selections=selections+1
end
assert(selections==2)
assert(gmtool.get_cursor()==nil)
gmtool.close()
end
local function test_faction()
free_game()
local r = region.create(0, 0, "plain")
local f = faction.create("enno@eressea.de", "human", "de")
assert(f)
f.info = "Spazz"
assert(f.info=="Spazz")
f:add_item("donotwant", 42)
f:add_item("stone", 42)
f:add_item("sword", 42)
local items = 0
for u in f.items do
items = items + 1
end
assert(items==2)
unit.create(f, r)
unit.create(f, r)
local units = 0
for u in f.units do
units = units + 1
end
assert(units==2)
end
local function test_unit()
free_game()
local r = region.create(0, 0, "plain")
local f = faction.create("enno@eressea.de", "human", "de")
local u = unit.create(f, r)
u.number = 20
u.name = "Enno"
assert(u.name=="Enno")
u.info = "Spazz"
assert(u.info=="Spazz")
u:add_item("sword", 4)
assert(u:get_item("sword")==4)
assert(u:get_pooled("sword")==4)
u:use_pooled("sword", 2)
assert(u:get_item("sword")==2)
end
local function test_region()
free_game()
local r = region.create(0, 0, "plain")
r:set_resource("horse", 42)
r:set_resource("money", 45)
r:set_resource("peasant", 200)
assert(r:get_resource("horse") == 42)
assert(r:get_resource("money") == 45)
assert(r:get_resource("peasant") == 200)
r.name = nil
r.info = nil
assert(r.name=="")
assert(r.info=="")
r.name = "Alabasterheim"
r.info = "Hier wohnen die siebzehn Zwerge"
assert(tostring(r) == "Alabasterheim (0,0)")
end
local function test_building()
free_game()
local u
local f = faction.create("enno@eressea.de", "human", "de")
local r = region.create(0, 0, "plain")
local b = building.create(r, "castle")
u = unit.create(f, r)
u.number = 1
u.building = b
u = unit.create(f, r)
u.number = 2
-- u.building = b
u = unit.create(f, r)
u.number = 3
u.building = b
local units = 0
for u in b.units do
units = units + 1
end
assert(units==2)
local r2 = region.create(0, 1, "plain")
assert(b.region==r)
b.region = r2
assert(b.region==r2)
assert(r2.buildings()==b)
end
local function loadscript(name)
local script = scriptpath .. "/" .. name
print("- loading " .. script)
if pcall(dofile, script)==0 then
print("Could not load " .. script)
end
end
local function test_message()
free_game()
local r = region.create(0, 0, "plain")
local f = faction.create("enno@eressea.de", "human", "de")
local u = unit.create(f, r)
local msg = message.create("item_create_spell")
msg:set_unit("mage", u)
msg:set_int("number", 1)
msg:set_resource("item", "sword")
msg:send_region(r)
msg:send_faction(f)
return msg
end
local function test_hashtable()
free_game()
local f = faction.create("enno@eressea.de", "human", "de")
f.objects:set("enno", "smart guy")
f.objects:set("age", 10)
assert(f.objects:get("jesus") == nil)
assert(f.objects:get("enno") == "smart guy")
assert(f.objects:get("age") == 10)
f.objects:set("age", nil)
assert(f.objects:get("age") == nil)
end
function test_events()
local fail = 1
local function msg_handler(u, evt)
str = evt:get(0)
u2 = evt:get(1)
assert(u2~=nil)
assert(str=="Du Elf stinken")
message_unit(u, u2, "thanks unit, i got your message: " .. str)
message_faction(u, u2.faction, "thanks faction, i got your message: " .. str)
message_region(u, "thanks region, i got your message: " .. str)
fail = 0
end
plain = region.create(0, 0, "plain")
skill = 8
f = faction.create("enno@eressea.de", "orc", "de")
f.age = 20
u = unit.create(f, plain)
u.number = 1
u:add_item("money", u.number*100)
u:clear_orders()
u:add_order("NUMMER PARTEI test")
u:add_handler("message", msg_handler)
msg = "BOTSCHAFT EINHEIT " .. itoa36(u.id) .. " Du~Elf~stinken"
f = faction.create("enno@eressea.de", "elf", "de")
f.age = 20
u = unit.create(f, plain)
u.number = 1
u:add_item("money", u.number*100)
u:clear_orders()
u:add_order("NUMMER PARTEI eviL")
u:add_order(msg)
process_orders()
assert(fail==0)
end
local function test_recruit2()
free_game()
local r = region.create(0, 0, "plain")
local f = faction.create("enno@eressea.de", "human", "de")
local u = unit.create(f, r)
u.number = 1
u:add_item("money", 2000)
u:clear_orders()
u:add_order("MACHE TEMP 1")
u:add_order("REKRUTIERE 1 Elf")
u:add_order("REKRUTIERE 1 mensch")
u:add_order("REKRUTIERE 1")
process_orders()
print(u:get_item("money"))
print(u.number)
end
local function test_owners()
free_game()
local r = region.create(0, 0, "plain")
local f1 = faction.create("enno@eressea.de", "human", "de")
local u1 = unit.create(f1, r, 1)
local f2 = faction.create("enno@eressea.de", "human", "de")
local u2 = unit.create(f2, r, 1)
local u3 = unit.create(f2, r, 1)
local b3 = building.create(r, "castle")
b3.size = 2
u3.building = b3
local b1 = building.create(r, "castle")
b1.size = 1
u1.building = b1
local b2 = building.create(r, "castle")
b2.size = 2
u2.building = b2
update_owners()
assert(r.owner==u3.faction)
b1.size=3
b2.size=3
update_owners()
assert(r.owner==u2.faction)
b1.size=4
update_owners()
assert(r.owner==u1.faction)
end
local function test_recruit()
free_game()
local r = region.create(0, 0, "plain")
local f = faction.create("enno@eressea.de", "human", "de")
local u = unit.create(f, r)
u.number = 1
local n = 3
r:set_resource("peasant", 200)
u:clear_orders()
u:add_item("money", 110*n+20)
u:add_order("REKRUTIERE " .. n)
process_orders()
assert(u.number == n+1)
local p = r:get_resource("peasant")
assert(p<200 and p>=200-n)
-- assert(u:get_item("money")==10)
end
local function test_spells()
free_game()
local r = region.create(0, 0, "plain")
local f = faction.create("enno@eressea.de", "human", "de")
local u = unit.create(f, r, 1)
u.race = "elf"
u:clear_orders()
u:add_item("money", 10000)
u:set_skill("magic", 5)
u:add_order("LERNE MAGIE Illaun")
process_orders()
local sp
local nums = 0
if f.spells~=nil then
for sp in f.spells do
nums = nums + 1
end
assert(nums>0)
for sp in u.spells do
nums = nums - 1
end
assert(nums==0)
else
for sp in u.spells do
nums = nums + 1
end
assert(nums>0)
end
end
local function test_produce()
free_game()
local r = region.create(0, 0, "plain")
local f = faction.create("enno@eressea.de", "human", "de")
local u = unit.create(f, r, 1)
u:clear_orders()
u:set_skill("weaponsmithing", 3)
u:add_item("iron", 2)
u:add_item("money", u.number * 10)
u:add_order("MACHE Schwert")
process_orders()
assert(u:get_item("iron")==1)
assert(u:get_item("sword")==1)
end
local function test_alliance()
free_game()
local r = region.create(0, 0, "plain")
local f1 = faction.create("enno@eressea.de", "human", "de")
local u1 = unit.create(f1, r, 1)
u1:add_item("money", u1.number * 100)
local f2 = faction.create("info@eressea.de", "human", "de")
local u2 = unit.create(f2, r, 1)
u2:add_item("money", u2.number * 100)
assert(f1.alliance==nil)
assert(f2.alliance==nil)
u1:clear_orders()
u2:clear_orders()
u1:add_order("ALLIANZ NEU pink")
u1:add_order("ALLIANZ EINLADEN " .. itoa36(f2.id))
u2:add_order("ALLIANZ BEITRETEN pink")
process_orders()
assert(f1.alliance~=nil)
assert(f2.alliance~=nil)
assert(f2.alliance==f1.alliance)
u1:clear_orders()
u2:clear_orders()
u1:add_order("ALLIANZ KOMMANDO " .. itoa36(f2.id))
process_orders()
assert(f1.alliance~=nil)
assert(f2.alliance~=nil)
assert(f2.alliance==f1.alliance)
u1:clear_orders()
u2:clear_orders()
u2:add_order("ALLIANZ AUSSTOSSEN " .. itoa36(f1.id))
process_orders()
assert(f1.alliance==nil)
assert(f2.alliance~=nil)
u1:clear_orders()
u2:clear_orders()
u2:add_order("ALLIANZ NEU zing")
u1:add_order("ALLIANZ BEITRETEN zing") -- no invite!
process_orders()
assert(f1.alliance==nil)
assert(f2.alliance~=nil)
u1:clear_orders()
u2:clear_orders()
u1:add_order("ALLIANZ NEU zack")
u1:add_order("ALLIANZ EINLADEN " .. itoa36(f2.id))
u2:add_order("ALLIANZ BEITRETEN zack")
process_orders()
assert(f1.alliance==f2.alliance)
assert(f2.alliance~=nil)
end
local function spells_csv()
local f = io.open("spells.csv", "w")
for sp in spells() do
f:write('"' .. sp.name .. '",' .. sp.level .. ',' .. sp.school .. ',"' .. sp.text .. '"\n')
end
f:close()
fail = 1
end
function test_taxes()
free_game()
local r = region.create(0, 0, "plain")
r.peasants = 1000
r:set_resource("money", 5000)
local f = faction.create("enno@eressea.de", "human", "de")
local u = unit.create(f, r, 1)
u:add_item("money", u.number * 10)
u:clear_orders()
u:add_order("LERNE Holzf<7A>llen") -- do not work
local b = building.create(r, "watch")
b.size = 10
u.building = b
update_owners()
process_orders()
assert(u:get_item("money")==50)
end
function test_market()
free_game()
local r
for x = -1, 1 do for y = -1, 1 do
r = region.create(x, y, "plain")
r.peasants = 5000
end end
r = get_region(0, 0)
local b = building.create(r, "market")
b.size = 10
local f = faction.create("enno@eressea.de", "human", "de")
f.id = 42
local u = unit.create(f, r, 1)
u.building = b
u:add_item("money", u.number * 10000)
for i = 0, 5 do
local rn = r:next(i)
end
process_orders()
local len = 0
for i in u.items do
len = len + 1
end
assert(len>1)
end
function test_work()
free_game()
local r = region.create(0, 0, "plain")
local f = faction.create("enno@eressea.de", "human", "de")
f.id = 42
local u = unit.create(f, r, 1)
u:add_item("money", u.number * 10) -- humans cost 10
u:set_skill("herbalism", 5)
u:clear_orders()
u:add_order("ARBEITEN")
process_orders()
assert(u:get_item("money")>=10)
end
function test_upkeep()
free_game()
local r = region.create(0, 0, "plain")
local f = faction.create("enno@eressea.de", "human", "de")
f.id = 42
local u = unit.create(f, r, 5)
u:add_item("money", u.number * 11)
u:clear_orders()
u:add_order("LERNE Waffenbau")
process_orders()
assert(u:get_item("money")==u.number)
end
function test_id()
free_game()
local r = region.create(0, 0, "plain")
local f = faction.create("enno@eressea.de", "human", "de")
f.id = atoi36("42")
assert(get_faction(42)~=f)
assert(get_faction("42")==f)
assert(get_faction(atoi36("42"))==f)
local u = unit.create(f, r, 1)
u.id = atoi36("42")
assert(get_unit(42)~=u)
assert(get_unit("42")==u)
assert(get_unit(atoi36("42"))==u)
local b = building.create(r, "castle")
-- <not working> b.id = atoi36("42")
local fortytwo = itoa36(b.id)
assert(get_building(fortytwo)==b)
assert(get_building(atoi36(fortytwo))==b)
local s = ship.create(r, "canoe")
if (s==nil) then
s = ship.create(r, "boat")
end
-- <not working> s.id = atoi36("42")
local fortytwo = itoa36(s.id)
assert(get_ship(fortytwo)==s)
assert(get_ship(atoi36(fortytwo))==s)
end
function test_herbalism()
free_game()
local r = region.create(0, 0, "plain")
local f = faction.create("enno@eressea.de", "human", "de")
f.id = 42
local u = unit.create(f, r, 1)
u:add_item("money", u.number * 100)
u:set_skill("herbalism", 5)
u:clear_orders()
u:add_order("MACHE Samen")
process_orders()
end
function test_leave()
free_game()
local r = region.create(0, 0, "plain")
local f = faction.create("enno@eressea.de", "human", "de")
f.id = 42
local b1 = building.create(r, "castle")
b1.size = 10
local b2 = building.create(r, "lighthouse")
b2.size = 10
local u = unit.create(f, r, 1)
u.building = b1
u:add_item("money", u.number * 100)
u:clear_orders()
u:add_order("BETRETE BURG " .. itoa36(b2.id))
update_owners()
process_orders()
assert(u.building==b1)
end
function test_mallorn()
free_game()
local r = region.create(0, 0, "plain")
r:set_flag(1, false) -- not mallorn
r:set_resource("tree", 100)
assert(r:get_resource("tree")==100)
local m = region.create(0, 0, "plain")
m:set_flag(1, true) -- not mallorn
m:set_resource("tree", 100)
assert(m:get_resource("tree")==100)
local f = faction.create("enno@eressea.de", "human", "de")
local u1 = unit.create(f, r, 1)
u1:add_item("money", u1.number * 100)
u1:set_skill("forestry", 2)
u1:clear_orders()
u1:add_order("MACHE HOLZ")
local u2 = unit.create(f, m, 1)
u2:add_item("money", u2.number * 100)
u2:set_skill("forestry", 2)
u2:clear_orders()
u2:add_order("MACHE HOLZ")
local u3 = unit.create(f, m, 1)
u3:add_item("money", u3.number * 100)
u3:set_skill("forestry", 2)
u3:clear_orders()
u3:add_order("MACHE Mallorn")
process_orders()
assert(u1:get_item("log")==2)
assert(u2:get_item("log")==2)
assert(u3:get_item("mallorn")==1)
end
function test_storage()
free_game()
local r = region.create(0, 0, "plain")
local f = faction.create("enno@eressea.de", "human", "de")
f.id = 42
local u = unit.create(f, r, 1)
u:add_item("money", u.number * 100)
store = storage.create("test.unit.dat", "wb")
assert(store)
store:write_unit(u)
store:close()
free_game()
-- recreate world:
r = region.create(0, 0, "plain")
f = faction.create("enno@eressea.de", "human", "de")
f.id = 42
store = storage.create("test.unit.dat", "rb")
assert(store)
u = store:read_unit()
store:close()
assert(u)
assert(u:get_item("money") == u.number * 100)
end
loadscript("extensions.lua")
tests = {
["alliance"] = test_alliance,
["pure"] = test_pure,
["read_write"] = test_read_write,
["faction"] = test_faction,
["region"] = test_region,
["building"] = test_building,
["unit"] = test_unit,
["message"] = test_message,
["hashtable"] = test_hashtable,
["gmtool"] = test_gmtool,
["leave"] = test_leave,
["events"] = test_events,
["produce"] = test_produce,
["rename"] = test_rename,
["recruit"] = test_recruit,
["recruit2"] = test_recruit2,
["spells"] = test_spells,
["herbalism"] = test_herbalism,
["storage"] = test_storage,
["taxes"] = test_taxes,
["mallorn"] = test_mallorn,
["upkeep"] = test_upkeep,
["id"] = test_id,
["work"] = test_work,
["owners"] = test_owners,
["market"] = test_market
}
mytests = {
-- ["blessed"] = test_blessed -- foiled by peasantgrowth
}
fail = 0
for k, v in pairs(tests) do
local status, err = pcall(v)
if not status then
fail = fail + 1
print("[FAIL] " .. k .. ": " .. err)
else
print("[OK] " .. k)
end
end
-- spells_csv()
if true or fail > 0 then
print(fail .. " tests failed.")
io.stdin:read()
end