fix_fam_spells happy case test (is familiar)

This commit is contained in:
Enno Rehling 2019-05-19 15:14:01 +02:00
parent cab3f4309f
commit 670aa56d4e
4 changed files with 57 additions and 6 deletions

View File

@ -1659,7 +1659,7 @@ int read_game(gamedata *data)
fix_familiars(fix_fam_triggers); fix_familiars(fix_fam_triggers);
} }
if (data->version < FAMILIAR_FIXSPELLBOOK_VERSION) { if (data->version < FAMILIAR_FIXSPELLBOOK_VERSION) {
fix_familiars(fix_fam_mage); fix_familiars(fix_fam_spells);
} }
log_debug("Done loading turn %d.", turn); log_debug("Done loading turn %d.", turn);

View File

@ -2251,9 +2251,20 @@ static int copy_spell_cb(spellbook_entry *sbe, void *udata) {
} }
/** /**
* Entferne Magie-Attribut von Migranten, die keine Vertrauten sind.
*
* Einmalige Reparatur von Vertrauten (Bug 2585).
*/
void fix_fam_migrant(unit *u) {
}
/**
* Einheiten, die Vertraute sind, bekommen ihre fehlenden Zauber.
*
* Einmalige Reparatur von Vertrauten (Bugs 2451, 2517). * Einmalige Reparatur von Vertrauten (Bugs 2451, 2517).
*/ */
void fix_fam_mage(unit *u) { void fix_fam_spells(unit *u) {
sc_mage *dmage; sc_mage *dmage;
unit *du = unit_create(0); unit *du = unit_create(0);
@ -2286,7 +2297,6 @@ void fix_fam_mage(unit *u) {
void create_newfamiliar(unit * mage, unit * fam) void create_newfamiliar(unit * mage, unit * fam)
{ {
create_mage(fam, M_GRAY); create_mage(fam, M_GRAY);
set_familiar(mage, fam); set_familiar(mage, fam);
equip_familiar(fam); equip_familiar(fam);

View File

@ -330,7 +330,8 @@ extern "C" {
void create_newfamiliar(struct unit *mage, struct unit *familiar); void create_newfamiliar(struct unit *mage, struct unit *familiar);
void create_newclone(struct unit *mage, struct unit *familiar); void create_newclone(struct unit *mage, struct unit *familiar);
void fix_fam_mage(struct unit *u); void fix_fam_spells(struct unit *u);
void fix_fam_migrant(struct unit *u);
const char *spell_info(const struct spell *sp, const char *spell_info(const struct spell *sp,
const struct locale *lang); const struct locale *lang);

View File

@ -473,7 +473,6 @@ static void test_regenerate_aura(CuTest *tc) {
unit *u; unit *u;
test_setup(); test_setup();
test_teardown();
u = test_create_unit(test_create_faction(NULL), test_create_plain(0, 0)); u = test_create_unit(test_create_faction(NULL), test_create_plain(0, 0));
create_mage(u, M_GWYRRD); create_mage(u, M_GWYRRD);
CuAssertIntEquals(tc, 0, get_spellpoints(u)); CuAssertIntEquals(tc, 0, get_spellpoints(u));
@ -487,6 +486,7 @@ static void test_regenerate_aura(CuTest *tc) {
CuAssertIntEquals(tc, 1, max_spellpoints(u, NULL)); CuAssertIntEquals(tc, 1, max_spellpoints(u, NULL));
regenerate_aura(); regenerate_aura();
CuAssertIntEquals(tc, 1, get_spellpoints(u)); CuAssertIntEquals(tc, 1, get_spellpoints(u));
test_teardown();
} }
/** /**
@ -500,14 +500,53 @@ static void test_regenerate_aura_migrants(CuTest *tc) {
race *rc; race *rc;
test_setup(); test_setup();
test_teardown();
rc = test_create_race("demon"); rc = test_create_race("demon");
rc->maxaura = 100; rc->maxaura = 100;
rc->flags |= RCF_FAMILIAR;
u = test_create_unit(test_create_faction(NULL), test_create_plain(0, 0)); u = test_create_unit(test_create_faction(NULL), test_create_plain(0, 0));
u_setrace(u, rc); u_setrace(u, rc);
CuAssertIntEquals(tc, 0, get_spellpoints(u)); CuAssertIntEquals(tc, 0, get_spellpoints(u));
regenerate_aura(); regenerate_aura();
CuAssertIntEquals(tc, 0, get_spellpoints(u)); CuAssertIntEquals(tc, 0, get_spellpoints(u));
test_teardown();
}
static bool equip_spell(unit *u, const char *eqname, int mask) {
spell * sp = find_spell("test");
unit_add_spell(u, sp, 1);
return true;
}
static void test_fix_fam_spells(CuTest *tc) {
unit *u, *mage;
race *rc;
spell * sp;
test_setup();
sp = create_spell("test");
rc = test_create_race("demon");
rc->maxaura = 100;
rc->flags |= RCF_FAMILIAR;
/* u is a familiar, and gets equipped: */
mage = test_create_unit(test_create_faction(NULL), test_create_plain(0, 0));
u = test_create_unit(test_create_faction(NULL), test_create_plain(0, 0));
u_setrace(u, rc);
/* reproduce the bug, create a broken familiar: */
callbacks.equip_unit = NULL;
create_newfamiliar(mage, u);
set_level(u, SK_MAGIC, 1);
CuAssertPtrEquals(tc, NULL, unit_get_spellbook(u));
CuAssertTrue(tc, !u_hasspell(u, sp));
callbacks.equip_unit = equip_spell;
fix_fam_spells(u);
CuAssertPtrNotNull(tc, unit_get_spellbook(u));
CuAssertTrue(tc, u_hasspell(u, sp));
/* u is a migrant, and does not get equipped: */
test_teardown();
} }
static void test_illusioncastle(CuTest *tc) static void test_illusioncastle(CuTest *tc)
@ -662,5 +701,6 @@ CuSuite *get_magic_suite(void)
SUITE_ADD_TEST(suite, test_illusioncastle); SUITE_ADD_TEST(suite, test_illusioncastle);
SUITE_ADD_TEST(suite, test_regenerate_aura); SUITE_ADD_TEST(suite, test_regenerate_aura);
SUITE_ADD_TEST(suite, test_regenerate_aura_migrants); SUITE_ADD_TEST(suite, test_regenerate_aura_migrants);
SUITE_ADD_TEST(suite, test_fix_fam_spells);
return suite; return suite;
} }