test that two different volcano_dead messages are sent for units in different regions.

new test_find_messagetype_ex helper.
This commit is contained in:
Enno Rehling 2016-08-28 10:05:34 +01:00
parent b56c48d95c
commit 9400a05a87
3 changed files with 31 additions and 5 deletions

View File

@ -377,17 +377,30 @@ const char * test_get_messagetype(const message *msg) {
return name;
}
struct message * test_find_messagetype(struct message_list *msgs, const char *name) {
struct message * test_find_messagetype_ex(struct message_list *msgs, const char *name, struct message *prev)
{
struct mlist *ml;
if (!msgs) return 0;
for (ml = msgs->begin; ml; ml = ml->next) {
if (strcmp(name, test_get_messagetype(ml->msg)) == 0) {
return ml->msg;
if (prev) {
if (ml->msg == prev) {
prev = NULL;
}
}
else {
return ml->msg;
}
}
}
return 0;
}
struct message * test_find_messagetype(struct message_list *msgs, const char *name)
{
return test_find_messagetype_ex(msgs, name, NULL);
}
void test_clear_messages(faction *f) {
if (f->msgs) {
free_messagelist(f->msgs->begin);

View File

@ -51,6 +51,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_find_messagetype_ex(struct message_list *msgs, const char *name, struct message *prev);
struct message * test_find_messagetype(struct message_list *msgs, const char *name);
struct message * test_get_last_message(struct message_list *mlist);
void test_clear_messages(struct faction *f);

View File

@ -2,8 +2,10 @@
#include <tests.h>
#include "volcano.h"
#include <kernel/faction.h>
#include <kernel/region.h>
#include <kernel/terrain.h>
#include <kernel/unit.h>
#include <kernel/messages.h>
#include <util/attrib.h>
@ -31,6 +33,8 @@ static void test_volcano_update(CuTest *tc) {
static void test_volcano_outbreak(CuTest *tc) {
region *r, *rn;
unit *u1, *u2;
faction *f;
message *m;
const struct terrain_type *t_volcano, *t_active;
@ -40,18 +44,26 @@ static void test_volcano_outbreak(CuTest *tc) {
t_active = test_create_terrain("activevolcano", LAND_REGION);
r = test_create_region(0, 0, t_active);
rn = test_create_region(1, 0, t_volcano);
f = test_create_faction(0);
u1 = test_create_unit(f, r);
u1->hp = u1->number;
u2 = test_create_unit(f, rn);
u2->hp = u2->number;
volcano_outbreak(r, rn);
CuAssertPtrEquals(tc, (void *)t_active, (void *)r->terrain);
CuAssertIntEquals(tc, 0, rtrees(r, 0));
CuAssertIntEquals(tc, 0, rtrees(r, 1));
CuAssertIntEquals(tc, 0, rtrees(r, 2));
CuAssertPtrNotNull(tc, m = test_find_messagetype(rn->msgs, "volcanooutbreak"));
CuAssertPtrEquals(tc, r, m->parameters[0].v);
CuAssertPtrEquals(tc, rn, m->parameters[1].v);
CuAssertPtrNotNull(tc, a_find(r->attribs, &at_reduceproduction));
CuAssertPtrNotNull(tc, a_find(rn->attribs, &at_reduceproduction));
CuAssertPtrNotNull(tc, m = test_find_messagetype(rn->msgs, "volcanooutbreak"));
CuAssertPtrEquals(tc, r, m->parameters[0].v);
CuAssertPtrEquals(tc, rn, m->parameters[1].v);
CuAssertPtrNotNull(tc, m = test_find_messagetype_ex(f->msgs, "volcano_dead", NULL));
CuAssertPtrNotNull(tc, m = test_find_messagetype_ex(f->msgs, "volcano_dead", m));
test_cleanup();
}