forked from github/server
add a message to the unit that gets kicked, with tests
This commit is contained in:
parent
f52e00d574
commit
4f2d9260d1
|
@ -1,5 +1,23 @@
|
|||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<messages>
|
||||
<message name="force_leave_ship" section="events">
|
||||
<type>
|
||||
<arg name="unit" type="unit"/>
|
||||
<arg name="owner" type="unit"/>
|
||||
<arg name="ship" type="ship"/>
|
||||
</type>
|
||||
<text locale="de">$unit($owner) bittet $unit($unit), $ship($ship) zu verlassen.</text>
|
||||
<text locale="en">$unit($owner) asks $unit($unit) to leave $ship($ship).</text>
|
||||
</message>
|
||||
<message name="force_leave_building" section="events">
|
||||
<type>
|
||||
<arg name="unit" type="unit"/>
|
||||
<arg name="owner" type="unit"/>
|
||||
<arg name="building" type="building"/>
|
||||
</type>
|
||||
<text locale="de">$unit($owner) bittet $unit($unit), $building($building) zu verlassen.</text>
|
||||
<text locale="en">$unit($owner) asks $unit($unit) to leave $building($building).</text>
|
||||
</message>
|
||||
<message name="alp_destroyed" section="events">
|
||||
<type>
|
||||
<arg name="region" type="region"/>
|
||||
|
|
|
@ -4277,14 +4277,20 @@ void force_leave(region *r) {
|
|||
unit *u;
|
||||
for (u = r->units; u; u = u->next) {
|
||||
unit *uo = NULL;
|
||||
message *msg = NULL;
|
||||
if (u->building) {
|
||||
uo = building_owner(u->building);
|
||||
msg = msg_message("force_leave_building", "unit owner building", u, uo, u->building);
|
||||
}
|
||||
if (u->ship && r->land) {
|
||||
uo = ship_owner(u->ship);
|
||||
msg = msg_message("force_leave_ship", "unit owner ship", u, uo, u->ship);
|
||||
}
|
||||
if (uo && !help_enter(uo, u)) {
|
||||
leave(u, false);
|
||||
if (msg) {
|
||||
ADDMSG(&u->faction->msgs, msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
|
||||
#include <util/base36.h>
|
||||
#include <util/language.h>
|
||||
#include <util/message.h>
|
||||
|
||||
#include <CuTest.h>
|
||||
#include <tests.h>
|
||||
|
@ -231,6 +232,7 @@ static void test_force_leave_buildings(CuTest *tc) {
|
|||
region *r;
|
||||
unit *u1, *u2, *u3;
|
||||
building * b;
|
||||
message *msg;
|
||||
test_cleanup();
|
||||
r = test_create_region(0, 0, test_create_terrain("plain", LAND_REGION));
|
||||
u1 = test_create_unit(test_create_faction(NULL), r);
|
||||
|
@ -245,6 +247,8 @@ static void test_force_leave_buildings(CuTest *tc) {
|
|||
CuAssertPtrEquals_Msg(tc, "owner should not be forecd to leave", b, u1->building);
|
||||
CuAssertPtrEquals_Msg(tc, "same faction should not be forced to leave", b, u2->building);
|
||||
CuAssertPtrEquals_Msg(tc, "non-allies should be forced to leave", NULL, u3->building);
|
||||
msg = test_get_last_message(u3->faction->msgs);
|
||||
CuAssertStrEquals(tc, "force_leave_building", test_get_messagetype(msg));
|
||||
|
||||
u_set_building(u3, b);
|
||||
al = ally_add(&u1->faction->allies, u3->faction);
|
||||
|
@ -258,6 +262,7 @@ static void test_force_leave_ships(CuTest *tc) {
|
|||
region *r;
|
||||
unit *u1, *u2;
|
||||
ship *sh;
|
||||
message *msg;
|
||||
test_cleanup();
|
||||
r = test_create_region(0, 0, test_create_terrain("plain", LAND_REGION));
|
||||
u1 = test_create_unit(test_create_faction(NULL), r);
|
||||
|
@ -268,6 +273,8 @@ static void test_force_leave_ships(CuTest *tc) {
|
|||
ship_set_owner(u1);
|
||||
force_leave(r);
|
||||
CuAssertPtrEquals_Msg(tc, "non-allies should be forced to leave", NULL, u2->ship);
|
||||
msg = test_get_last_message(u2->faction->msgs);
|
||||
CuAssertStrEquals(tc, "force_leave_ship", test_get_messagetype(msg));
|
||||
test_cleanup();
|
||||
}
|
||||
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
#include <kernel/spell.h>
|
||||
#include <kernel/spellbook.h>
|
||||
#include <kernel/terrain.h>
|
||||
#include <kernel/messages.h>
|
||||
#include <util/functions.h>
|
||||
#include <util/language.h>
|
||||
#include <util/message.h>
|
||||
|
@ -193,6 +194,14 @@ void test_create_world(void)
|
|||
test_create_shiptype("boat");
|
||||
}
|
||||
|
||||
message * test_get_last_message(message_list *msgs) {
|
||||
struct mlist *iter = msgs->begin;
|
||||
while (iter->next) {
|
||||
iter = iter->next;
|
||||
}
|
||||
return iter->msg;
|
||||
}
|
||||
|
||||
const char * test_get_messagetype(const message *msg) {
|
||||
const char * name = msg->type->name;
|
||||
if (strcmp(name, "missing_message") == 0) {
|
||||
|
|
|
@ -14,6 +14,7 @@ extern "C" {
|
|||
struct building;
|
||||
struct ship;
|
||||
struct message;
|
||||
struct message_list;
|
||||
struct item_type;
|
||||
struct building_type;
|
||||
struct ship_type;
|
||||
|
@ -37,6 +38,7 @@ extern "C" {
|
|||
int RunAllTests(void);
|
||||
void test_translate_param(const struct locale *lang, param_t param, const char *text);
|
||||
const char * test_get_messagetype(const struct message *msg);
|
||||
struct message * test_get_last_message(struct message_list *mlist);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue