forked from github/server
119 lines
3.5 KiB
Lua
119 lines
3.5 KiB
Lua
require "lunit"
|
|
|
|
module("tests.eressea.study", package.seeall, lunit.testcase)
|
|
|
|
function setup()
|
|
conf = [[{
|
|
"races" : { "human" : {} },
|
|
"terrains" : { "plain" : { "flags" : [ "land" ] } },
|
|
"keywords" : { "de" : { "study": "LERNEN", "teach": "LEHREN" } },
|
|
"skills" : { "de": {
|
|
"tactics" : "Taktik",
|
|
"alchemy" : "Alchemie",
|
|
"crossbow" : "Armbrust"
|
|
} },
|
|
"spells" : { "fireball" : { "syntax" : "u+" } }
|
|
}]]
|
|
eressea.game.reset()
|
|
eressea.config.reset();
|
|
eressea.settings.set('rules.magic.playerschools', '')
|
|
eressea.settings.set("rules.food.flags", "4")
|
|
eressea.settings.set('study.random_progress', '0')
|
|
eressea.config.parse(conf)
|
|
end
|
|
|
|
function test_study()
|
|
local r = region.create(0, 0, "plain")
|
|
local f = faction.create("human", "test@example.com", "de")
|
|
local u = unit.create(f, r, 1)
|
|
u:add_order("LERNEN Armbrust")
|
|
process_orders()
|
|
assert_equal(1, u:get_skill("crossbow"))
|
|
end
|
|
|
|
function test_study_expensive()
|
|
local r = region.create(0, 0, "plain")
|
|
local f = faction.create("human", "test@example.com", "de")
|
|
local u = unit.create(f, r, 1)
|
|
eressea.settings.set("skills.cost.alchemy", "50")
|
|
eressea.settings.set("rules.encounters", "0")
|
|
u:add_order("LERNEN Alchemie")
|
|
u:add_item("money", 50)
|
|
process_orders()
|
|
assert_equal(1, u:get_skill("alchemy"))
|
|
assert_equal(0, u:get_item("money"))
|
|
end
|
|
|
|
function test_unit_spells()
|
|
local r = region.create(0, 0, "plain")
|
|
local f = faction.create("human", "test@example.com", "de")
|
|
local u = unit.create(f, r, 1)
|
|
u.magic = "gray"
|
|
u:set_skill("magic", 1)
|
|
u:add_spell("toast")
|
|
assert_equal(nil, u.spells)
|
|
u:add_spell("fireball", 2)
|
|
local sp = u.spells()
|
|
assert_equal("fireball", sp.name)
|
|
assert_equal(2, sp.level)
|
|
end
|
|
|
|
local function make_teacher(student, f, skill)
|
|
f = f or student.faction
|
|
local u = unit.create(f, student.region, 1)
|
|
u:clear_orders()
|
|
u:add_order("LEHRE " .. itoa36(student.id))
|
|
u:set_skill(skill or "crossbow", 10)
|
|
return u
|
|
end
|
|
|
|
local function make_student(f, r, num, skill)
|
|
local u = unit.create(f, r, num or 1)
|
|
u:clear_orders()
|
|
u:add_order("LERNE " .. (skill or "Armbrust"))
|
|
return u
|
|
end
|
|
|
|
function test_study_no_teacher()
|
|
local r = region.create(0, 0, "plain")
|
|
local f = faction.create("human", "test@example.com", "de")
|
|
local u1 = make_student(f, r, 1)
|
|
u1:set_skill("crossbow", 1)
|
|
process_orders()
|
|
assert_equal(1, u1:get_skill("crossbow"))
|
|
end
|
|
|
|
function test_study_with_teacher()
|
|
local r = region.create(0, 0, "plain")
|
|
local f = faction.create("human", "test@example.com", "de")
|
|
local u1 = make_student(f, r, 1)
|
|
|
|
make_teacher(u1)
|
|
u1:set_skill("crossbow", 1)
|
|
process_orders()
|
|
assert_equal(2, u1:get_skill("crossbow"))
|
|
end
|
|
|
|
function test_study_too_many_students()
|
|
local r = region.create(0, 0, "plain")
|
|
local f = faction.create("human", "test@example.com", "de")
|
|
local u1 = make_student(f, r, 20, "Taktik")
|
|
u1.name = "Student"
|
|
u1:add_item("money", 201*u1.number)
|
|
make_teacher(u1, f, "tactics")
|
|
process_orders()
|
|
assert_equal(u1.number, u1:get_item("money"))
|
|
end
|
|
|
|
function test_study_multiple_teachers()
|
|
local r = region.create(0, 0, "plain")
|
|
local f = faction.create("human", "test@example.com", "de")
|
|
local u1 = make_student(f, r, 20, "Taktik")
|
|
u1.name = "Student"
|
|
u1:add_item("money", 201*u1.number)
|
|
make_teacher(u1, f, "tactics")
|
|
make_teacher(u1, f, "tactics")
|
|
process_orders()
|
|
assert_equal(u1.number, u1:get_item("money"))
|
|
end
|