forked from github/server
adding a lot of test coverage
extending the binding generation to more processing functions
This commit is contained in:
parent
8b3d735e8c
commit
dafb2fc2ab
|
@ -26,7 +26,7 @@ function nmr_check(maxnmrs)
|
|||
if nmrs >= maxnmrs then
|
||||
print("Shit. More than " .. maxnmrs .. " factions with 1 NMR (" .. nmrs .. ")")
|
||||
write_summary()
|
||||
write_game("aborted.dat")
|
||||
eressea.write_game("aborted.dat")
|
||||
return -1
|
||||
end
|
||||
print (nmrs .. " Factions with 1 NMR")
|
||||
|
@ -35,10 +35,7 @@ end
|
|||
|
||||
function open_game(turn)
|
||||
file = "" .. get_turn()
|
||||
if read_game(file .. ".dat", "binary")~=0 then
|
||||
return read_game(file, "text")
|
||||
end
|
||||
return 0
|
||||
return eressea.read_game(file .. ".dat")
|
||||
end
|
||||
|
||||
function write_emails(locales)
|
||||
|
|
|
@ -8,7 +8,7 @@ function run_editor()
|
|||
turn = read_turn()
|
||||
set_turn(turn)
|
||||
end
|
||||
read_game(turn .. ".dat")
|
||||
eressea.read_game(turn .. ".dat")
|
||||
gmtool.editor()
|
||||
end
|
||||
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
require "lunit"
|
||||
|
||||
local eressea = eressea
|
||||
local _G = _G
|
||||
|
||||
module("tests.bindings", lunit.testcase)
|
||||
|
||||
function test_eressea()
|
||||
assert_equal("function", _G.type(eressea.free_game))
|
||||
assert_equal("function", _G.type(eressea.read_game))
|
||||
assert_equal("function", _G.type(eressea.write_game))
|
||||
assert_equal("function", _G.type(eressea.read_orders))
|
||||
end
|
||||
|
||||
function test_process()
|
||||
assert_equal("function", _G.type(eressea.process.markets))
|
||||
assert_equal("function", _G.type(eressea.process.produce))
|
||||
assert_equal("function", _G.type(eressea.process.make_temp))
|
||||
assert_equal("function", _G.type(eressea.process.settings))
|
||||
assert_equal("function", _G.type(eressea.process.set_group))
|
||||
assert_equal("function", _G.type(eressea.process.set_origin))
|
||||
assert_equal("function", _G.type(eressea.process.quit))
|
||||
end
|
||||
|
||||
function test_settings()
|
||||
assert_equal("function", _G.type(eressea.settings.set))
|
||||
assert_equal("function", _G.type(eressea.settings.get))
|
||||
end
|
|
@ -912,7 +912,7 @@ function test_parser()
|
|||
file:write("BENENNEN EINHEIT 'Goldene Herde'\n")
|
||||
file:close()
|
||||
|
||||
read_orders(filename)
|
||||
eressea.read_orders(filename)
|
||||
process_orders()
|
||||
assert_equal("Goldene Herde", u.name)
|
||||
end
|
||||
|
@ -975,7 +975,7 @@ function test_bug_1814()
|
|||
file:write("; ARBEITE\n")
|
||||
file:close()
|
||||
|
||||
read_orders(filename)
|
||||
eressea.read_orders(filename)
|
||||
process_orders()
|
||||
init_reports()
|
||||
write_report(f)
|
||||
|
@ -996,7 +996,7 @@ function test_bug_1679()
|
|||
file:write("ARBEITEN\n")
|
||||
file:close()
|
||||
|
||||
read_orders(filename)
|
||||
eressea.read_orders(filename)
|
||||
process_orders()
|
||||
init_reports()
|
||||
write_report(f)
|
||||
|
@ -1103,7 +1103,7 @@ function test_bug_1875_use_normal()
|
|||
local r = region.create(0, 0, "plain")
|
||||
r:set_resource("peasant", 0)
|
||||
|
||||
settings.set("rules.economy.food", "0") -- food is not free
|
||||
eressea.settings.set("rules.economy.food", "0") -- food is not free
|
||||
|
||||
local f = faction.create("noreply@eressea.de", "demon", "de")
|
||||
local u = unit.create(f, r, 1)
|
||||
|
@ -1126,7 +1126,7 @@ function test_bug_1875_use_help()
|
|||
local r = region.create(0, 0, "plain")
|
||||
r:set_resource("peasant", 0)
|
||||
|
||||
settings.set("rules.economy.food", "0") -- food is not free
|
||||
eressea.settings.set("rules.economy.food", "0") -- food is not free
|
||||
|
||||
local f = faction.create("noreply@eressea.de", "demon", "de")
|
||||
local u = unit.create(f, r, 1)
|
||||
|
@ -1153,7 +1153,7 @@ function test_bug_1875_use_own_first()
|
|||
local r = region.create(0, 0, "plain")
|
||||
r:set_resource("peasant", 0)
|
||||
|
||||
settings.set("rules.economy.food", "0") -- food is not free
|
||||
eressea.settings.set("rules.economy.food", "0") -- food is not free
|
||||
|
||||
local f = faction.create("noreply@eressea.de", "demon", "de")
|
||||
local u = unit.create(f, r, 1)
|
||||
|
|
|
@ -33,3 +33,75 @@ function test_give()
|
|||
assert_not_equal(5, u:get_item("money"))
|
||||
assert_not_equal(5, u2:get_item("money"))
|
||||
end
|
||||
|
||||
function test_make_temp()
|
||||
u:add_order("MACHE TEMP 123 'Herpderp'")
|
||||
u:add_order("// this comment will be copied")
|
||||
u:add_order("ENDE")
|
||||
eressea.process.make_temp()
|
||||
|
||||
for x in f.units do
|
||||
if x.name == 'Herpderp' then u=x end
|
||||
end
|
||||
assert_equal('Herpderp', u.name)
|
||||
assert_equal(0, u.number)
|
||||
local c = 0
|
||||
for o in u.orders do
|
||||
assert_equal('// this comment will be copied', o)
|
||||
c = c + 1
|
||||
end
|
||||
assert_equal(1, c)
|
||||
end
|
||||
|
||||
function test_give_temp()
|
||||
u.number = 2
|
||||
u:add_order("GIB TEMP 123 1 PERSON")
|
||||
u:add_order("MACHE TEMP 123 'Herpderp'")
|
||||
u:add_order("ENDE")
|
||||
_G.process_orders()
|
||||
assert_equal(1, u.number)
|
||||
|
||||
for x in f.units do
|
||||
if x.name == 'Herpderp' then u=x end
|
||||
end
|
||||
assert_equal('Herpderp', u.name)
|
||||
assert_equal(1, u.number)
|
||||
end
|
||||
|
||||
function test_process_settings()
|
||||
f.options = 0
|
||||
u:add_order("EMAIL herp@derp.com")
|
||||
u:add_order("BANNER 'Herpderp'")
|
||||
u:add_order("PASSWORT 'HerpDerp'")
|
||||
u:add_order("OPTION AUSWERTUNG")
|
||||
eressea.process.settings()
|
||||
assert_equal("herp@derp.com", f.email)
|
||||
assert_equal("Herpderp", f.info)
|
||||
assert_equal("HerpDerp", f.password)
|
||||
assert_equal(1, f.options)
|
||||
end
|
||||
|
||||
function test_process_group()
|
||||
u:add_order("GRUPPE herp")
|
||||
eressea.process.set_group()
|
||||
assert_equal('herp', u.group)
|
||||
end
|
||||
|
||||
function test_process_origin()
|
||||
u:add_order("URSPRUNG 1 2")
|
||||
eressea.process.set_origin()
|
||||
x, y = u.faction:get_origin()
|
||||
assert_equal(1, x)
|
||||
assert_equal(2, y)
|
||||
end
|
||||
|
||||
function test_process_quit()
|
||||
fno = f.id
|
||||
u:add_order("STIRB '" .. u.faction.password .. "'")
|
||||
assert_not_equal(nil, _G.get_faction(fno))
|
||||
eressea.process.quit()
|
||||
eressea.write_game('test.dat')
|
||||
eressea.free_game()
|
||||
eressea.read_game('test.dat')
|
||||
assert_equal(nil, _G.get_faction(fno))
|
||||
end
|
||||
|
|
|
@ -15,5 +15,10 @@ int eressea_read_game(const char * filename) {
|
|||
}
|
||||
|
||||
int eressea_write_game(const char * filename) {
|
||||
remove_empty_factions();
|
||||
return writegame(filename, IO_BINARY);
|
||||
}
|
||||
|
||||
int eressea_read_orders(const char * filename) {
|
||||
return readorders(filename);
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ extern "C" {
|
|||
void eressea_free_game(void);
|
||||
int eressea_read_game(const char * filename);
|
||||
int eressea_write_game(const char * filename);
|
||||
int eressea_read_orders(const char * filename);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -2,8 +2,11 @@
|
|||
|
||||
#include <platform.h>
|
||||
#include <kernel/types.h>
|
||||
#include <kernel/order.h>
|
||||
#include <kernel/region.h>
|
||||
#include <kernel/unit.h>
|
||||
#include <gamecode/economy.h>
|
||||
#include <gamecode/laws.h>
|
||||
#include <gamecode/market.h>
|
||||
|
||||
void process_produce(void) {
|
||||
|
@ -16,3 +19,61 @@ void process_produce(void) {
|
|||
void process_markets(void) {
|
||||
do_markets();
|
||||
}
|
||||
|
||||
void process_make_temp(void) {
|
||||
new_units();
|
||||
}
|
||||
|
||||
void process_settings(void) {
|
||||
region * r;
|
||||
for (r=regions; r; r=r->next) {
|
||||
unit * u;
|
||||
for (u=r->units; u; u=u->next) {
|
||||
order * ord;
|
||||
for (ord=u->orders; ord; ord=ord->next) {
|
||||
keyword_t kwd = get_keyword(ord);
|
||||
if (kwd==K_BANNER) {
|
||||
banner_cmd(u, ord);
|
||||
}
|
||||
else if (kwd==K_EMAIL) {
|
||||
email_cmd(u, ord);
|
||||
}
|
||||
else if (kwd==K_SEND) {
|
||||
send_cmd(u, ord);
|
||||
}
|
||||
else if (kwd==K_PASSWORD) {
|
||||
password_cmd(u, ord);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void process_cmd(keyword_t kwd, int (*callback)(unit *, order *))
|
||||
{
|
||||
region * r;
|
||||
for (r=regions; r; r=r->next) {
|
||||
unit * u;
|
||||
for (u=r->units; u; u=u->next) {
|
||||
order * ord;
|
||||
for (ord=u->orders; ord; ord=ord->next) {
|
||||
if (kwd == get_keyword(ord)) {
|
||||
callback(u, ord);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void process_group(void) {
|
||||
process_cmd(K_GROUP, group_cmd);
|
||||
}
|
||||
|
||||
void process_origin(void) {
|
||||
process_cmd(K_URSPRUNG, origin_cmd);
|
||||
}
|
||||
|
||||
void process_quit(void) {
|
||||
process_cmd(K_QUIT, quit_cmd);
|
||||
quit();
|
||||
}
|
||||
|
|
|
@ -6,6 +6,11 @@ extern "C" {
|
|||
|
||||
void process_produce(void);
|
||||
void process_markets(void);
|
||||
void process_make_temp(void);
|
||||
void process_settings(void);
|
||||
void process_group(void);
|
||||
void process_origin(void);
|
||||
void process_quit(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -28,6 +28,7 @@ without prior permission by the authors of Eressea.
|
|||
#include <kernel/building.h>
|
||||
#include <kernel/config.h>
|
||||
#include <kernel/faction.h>
|
||||
#include <kernel/group.h>
|
||||
#include <kernel/item.h>
|
||||
#include <kernel/magic.h>
|
||||
#include <kernel/message.h>
|
||||
|
@ -141,6 +142,25 @@ int tolua_unitlist_next(lua_State * L)
|
|||
return 0; /* no more values to return */
|
||||
}
|
||||
|
||||
static int tolua_unit_get_group(lua_State * L)
|
||||
{
|
||||
unit *u = (unit *) tolua_tousertype(L, 1, 0);
|
||||
group *g = get_group(u);
|
||||
if (g) {
|
||||
tolua_pushstring(L, g->name);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
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));
|
||||
tolua_pushnumber(L, result);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int tolua_unit_get_name(lua_State * L)
|
||||
{
|
||||
unit *self = (unit *) tolua_tousertype(L, 1, 0);
|
||||
|
@ -936,9 +956,9 @@ void tolua_unit_open(lua_State * L)
|
|||
tolua_unit_set_name);
|
||||
tolua_variable(L, TOLUA_CAST "faction", &tolua_unit_get_faction,
|
||||
tolua_unit_set_faction);
|
||||
tolua_variable(L, TOLUA_CAST "id", &tolua_unit_get_id, tolua_unit_set_id);
|
||||
tolua_variable(L, TOLUA_CAST "info", &tolua_unit_get_info,
|
||||
tolua_unit_set_info);
|
||||
tolua_variable(L, TOLUA_CAST "id", tolua_unit_get_id, tolua_unit_set_id);
|
||||
tolua_variable(L, TOLUA_CAST "group", tolua_unit_get_group, tolua_unit_set_group);
|
||||
tolua_variable(L, TOLUA_CAST "info", tolua_unit_get_info, tolua_unit_set_info);
|
||||
tolua_variable(L, TOLUA_CAST "hp", &tolua_unit_get_hp, tolua_unit_set_hp);
|
||||
tolua_variable(L, TOLUA_CAST "status", &tolua_unit_get_status,
|
||||
tolua_unit_set_status);
|
||||
|
|
|
@ -540,12 +540,6 @@ static int tolua_write_summary(lua_State * L)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int tolua_free_game(lua_State * L)
|
||||
{
|
||||
free_gamedata();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int tolua_write_map(lua_State * L)
|
||||
{
|
||||
const char *filename = tolua_tostring(L, 1, 0);
|
||||
|
@ -555,31 +549,6 @@ static int tolua_write_map(lua_State * L)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int tolua_write_game(lua_State * L)
|
||||
{
|
||||
const char *filename = tolua_tostring(L, 1, 0);
|
||||
const char *mode = tolua_tostring(L, 2, 0);
|
||||
int result, m = IO_BINARY;
|
||||
if (mode && strcmp(mode, "text") == 0)
|
||||
m = IO_TEXT;
|
||||
remove_empty_factions();
|
||||
result = writegame(filename, m);
|
||||
tolua_pushnumber(L, (lua_Number) result);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int tolua_read_game(lua_State * L)
|
||||
{
|
||||
const char *filename = tolua_tostring(L, 1, 0);
|
||||
const char *mode = tolua_tostring(L, 2, 0);
|
||||
int rv, m = IO_BINARY;
|
||||
if (mode && strcmp(mode, "text") == 0)
|
||||
m = IO_TEXT;
|
||||
rv = readgame(filename, m, false);
|
||||
tolua_pushnumber(L, (lua_Number) rv);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int tolua_read_turn(lua_State * L)
|
||||
{
|
||||
int cturn = current_turn();
|
||||
|
@ -1208,9 +1177,6 @@ int tolua_bindings_open(lua_State * L)
|
|||
tolua_function(L, TOLUA_CAST "factions", tolua_get_factions);
|
||||
tolua_function(L, TOLUA_CAST "regions", tolua_get_regions);
|
||||
tolua_function(L, TOLUA_CAST "read_turn", tolua_read_turn);
|
||||
tolua_function(L, TOLUA_CAST "read_game", tolua_read_game);
|
||||
tolua_function(L, TOLUA_CAST "write_game", tolua_write_game);
|
||||
tolua_function(L, TOLUA_CAST "free_game", tolua_free_game);
|
||||
tolua_function(L, TOLUA_CAST "write_map", &tolua_write_map);
|
||||
tolua_function(L, TOLUA_CAST "read_orders", tolua_read_orders);
|
||||
tolua_function(L, TOLUA_CAST "process_orders", tolua_process_orders);
|
||||
|
|
|
@ -4,4 +4,5 @@ module eressea {
|
|||
void eressea_free_game @ free_game(void);
|
||||
int eressea_read_game @ read_game(const char * filename);
|
||||
int eressea_write_game @ write_game(const char * filename);
|
||||
int eressea_read_orders @ read_orders(const char * filename);
|
||||
}
|
||||
|
|
|
@ -4,5 +4,10 @@ module eressea {
|
|||
module process {
|
||||
void process_markets @ markets(void);
|
||||
void process_produce @ produce(void);
|
||||
void process_make_temp @ make_temp(void);
|
||||
void process_settings @ settings(void);
|
||||
void process_group @ set_group(void);
|
||||
void process_origin @ set_origin(void);
|
||||
void process_quit @ quit(void);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1117,7 +1117,7 @@ static boolean EnhancedQuit(void)
|
|||
return value;
|
||||
}
|
||||
|
||||
static int quit_cmd(unit * u, struct order *ord)
|
||||
int quit_cmd(unit * u, struct order *ord)
|
||||
{
|
||||
faction *f = u->faction;
|
||||
const char *passwd;
|
||||
|
@ -1159,7 +1159,7 @@ static int quit_cmd(unit * u, struct order *ord)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void quit(void)
|
||||
void quit(void)
|
||||
{
|
||||
faction **fptr = &factions;
|
||||
while (*fptr) {
|
||||
|
@ -2107,7 +2107,7 @@ static int mail_cmd(unit * u, struct order *ord)
|
|||
|
||||
/* ------------------------------------------------------------- */
|
||||
|
||||
static int banner_cmd(unit * u, struct order *ord)
|
||||
int banner_cmd(unit * u, struct order *ord)
|
||||
{
|
||||
init_tokens(ord);
|
||||
skip_token();
|
||||
|
@ -2120,7 +2120,7 @@ static int banner_cmd(unit * u, struct order *ord)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int email_cmd(unit * u, struct order *ord)
|
||||
int email_cmd(unit * u, struct order *ord)
|
||||
{
|
||||
const char *s;
|
||||
|
||||
|
@ -2142,7 +2142,7 @@ static int email_cmd(unit * u, struct order *ord)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int password_cmd(unit * u, struct order *ord)
|
||||
int password_cmd(unit * u, struct order *ord)
|
||||
{
|
||||
char pwbuf[32];
|
||||
int i;
|
||||
|
@ -2182,7 +2182,7 @@ static int password_cmd(unit * u, struct order *ord)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int send_cmd(unit * u, struct order *ord)
|
||||
int send_cmd(unit * u, struct order *ord)
|
||||
{
|
||||
const char *s;
|
||||
int option;
|
||||
|
@ -2516,7 +2516,7 @@ static int promotion_cmd(unit * u, struct order *ord)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int group_cmd(unit * u, struct order *ord)
|
||||
int group_cmd(unit * u, struct order *ord)
|
||||
{
|
||||
const char *s;
|
||||
|
||||
|
@ -2528,7 +2528,7 @@ static int group_cmd(unit * u, struct order *ord)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int origin_cmd(unit * u, struct order *ord)
|
||||
int origin_cmd(unit * u, struct order *ord)
|
||||
{
|
||||
short px, py;
|
||||
|
||||
|
@ -3291,7 +3291,7 @@ int checkunitnumber(const faction * f, int add)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void new_units(void)
|
||||
void new_units(void)
|
||||
{
|
||||
region *r;
|
||||
unit *u, *u2;
|
||||
|
@ -4154,7 +4154,7 @@ void init_processor(void)
|
|||
|
||||
p += 10;
|
||||
add_proc_unit(p, &setdefaults, "Default-Befehle");
|
||||
add_proc_order(p, K_BANNER, &banner_cmd, 0, NULL);
|
||||
add_proc_order(p, K_BANNER, banner_cmd, 0, NULL);
|
||||
add_proc_order(p, K_EMAIL, &email_cmd, 0, NULL);
|
||||
add_proc_order(p, K_PASSWORD, &password_cmd, 0, NULL);
|
||||
add_proc_order(p, K_SEND, &send_cmd, 0, NULL);
|
||||
|
|
|
@ -45,6 +45,16 @@ extern "C" {
|
|||
extern int dropouts[2];
|
||||
extern int *age;
|
||||
|
||||
extern void new_units(void);
|
||||
extern void quit(void);
|
||||
extern int password_cmd(struct unit *u, struct order *ord);
|
||||
extern int banner_cmd(struct unit *u, struct order *ord);
|
||||
extern int email_cmd(struct unit *u, struct order *ord);
|
||||
extern int send_cmd(struct unit *u, struct order *ord);
|
||||
extern int origin_cmd(struct unit *u, struct order *ord);
|
||||
extern int group_cmd(struct unit *u, struct order *ord);
|
||||
extern int quit_cmd(struct unit *u, struct order *ord);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -136,6 +136,17 @@ void free_group(group * g)
|
|||
free(g);
|
||||
}
|
||||
|
||||
group * get_group(const struct unit *u)
|
||||
{
|
||||
if (fval(u, UFL_GROUP)) {
|
||||
attrib * a = a_find(u->attribs, &at_group);
|
||||
if (a) {
|
||||
return (group *) a->data.v;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void set_group(struct unit *u, struct group *g)
|
||||
{
|
||||
attrib *a = NULL;
|
||||
|
|
|
@ -40,6 +40,7 @@ extern "C" {
|
|||
extern struct attrib_type at_group; /* attribute for units assigned to a group */
|
||||
extern boolean 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);
|
||||
|
||||
extern void write_groups(struct storage *F, struct group *g);
|
||||
|
|
Loading…
Reference in New Issue