Browse Source

Inventory tests (#1153)

* Set up inventory tests; add scroll usage tests
* Add calculation and placement tests for gold
* Item removal tests
pull/1156/head
Łukasz Łapiński 5 years ago committed by GitHub
parent
commit
0f778fbb34
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 137
      SourceT/inv_test.cpp

137
SourceT/inv_test.cpp

@ -12,6 +12,16 @@ void set_up_scroll(dvl::ItemStruct &item, dvl::spell_id spell)
item._iSpell = spell;
}
/* Clear the inventory of dvl::myplr. */
void clear_inventory()
{
for (int i = 0; i < NUM_INV_GRID_ELEM; i++) {
memset(&dvl::plr[dvl::myplr].InvList[i], 0, sizeof(dvl::ItemStruct));
dvl::plr[dvl::myplr].InvGrid[i] = 0;
}
dvl::plr[dvl::myplr]._pNumInv = 0;
}
// Test that the scroll is used in the inventory in correct conditions
TEST(Inv, UseScroll_from_inventory)
{
@ -82,3 +92,130 @@ TEST(Inv, UseScroll_from_belt_invalid_conditions)
dvl::plr[dvl::myplr].SpdList[2]._itype = dvl::ITYPE_NONE;
EXPECT_FALSE(dvl::UseScroll());
}
// Test gold calculation
TEST(Inv, CalculateGold)
{
dvl::plr[dvl::myplr]._pNumInv = 10;
// Set up two slots of gold both in the belt and inventory
dvl::plr[dvl::myplr].SpdList[1]._itype = dvl::ITYPE_GOLD;
dvl::plr[dvl::myplr].SpdList[5]._itype = dvl::ITYPE_GOLD;
dvl::plr[dvl::myplr].InvList[2]._itype = dvl::ITYPE_GOLD;
dvl::plr[dvl::myplr].InvList[3]._itype = dvl::ITYPE_GOLD;
// Set the gold amount to arbitrary values
dvl::plr[dvl::myplr].SpdList[1]._ivalue = 100;
dvl::plr[dvl::myplr].SpdList[5]._ivalue = 200;
dvl::plr[dvl::myplr].InvList[2]._ivalue = 3;
dvl::plr[dvl::myplr].InvList[3]._ivalue = 30;
EXPECT_EQ(dvl::CalculateGold(dvl::myplr), 333);
}
// Test automatic gold placing
TEST(Inv, GoldAutoPlace)
{
// Empty the inventory
clear_inventory();
// Put gold into the inventory:
// | 1000 | ... | ...
dvl::plr[dvl::myplr].InvList[0]._itype = dvl::ITYPE_GOLD;
dvl::plr[dvl::myplr].InvList[0]._ivalue = 1000;
dvl::plr[dvl::myplr]._pNumInv = 1;
// Put (max gold - 100) gold, which is 4900, into the player's hand
dvl::plr[dvl::myplr].HoldItem._itype = dvl::ITYPE_GOLD;
dvl::plr[dvl::myplr].HoldItem._ivalue = GOLD_MAX_LIMIT - 100;
dvl::GoldAutoPlace(dvl::myplr);
// We expect the inventory:
// | 5000 | 900 | ...
EXPECT_EQ(dvl::plr[dvl::myplr].InvList[0]._ivalue, GOLD_MAX_LIMIT);
EXPECT_EQ(dvl::plr[dvl::myplr].InvList[1]._ivalue, 900);
}
// Test removing an item from inventory with no other items.
TEST(Inv, RemoveInvItem)
{
clear_inventory();
// Put a two-slot misc item into the inventory:
// | (item) | (item) | ... | ...
dvl::plr[dvl::myplr]._pNumInv = 1;
dvl::plr[dvl::myplr].InvGrid[0] = 1;
dvl::plr[dvl::myplr].InvGrid[1] = 1;
dvl::plr[dvl::myplr].InvList[0]._itype = dvl::ITYPE_MISC;
dvl::RemoveInvItem(dvl::myplr, 0);
EXPECT_EQ(dvl::plr[dvl::myplr].InvGrid[0], 0);
EXPECT_EQ(dvl::plr[dvl::myplr].InvGrid[1], 0);
EXPECT_EQ(dvl::plr[dvl::myplr]._pNumInv, 0);
}
// Test removing an item from inventory with other items in it.
TEST(Inv, RemoveInvItem_other_item)
{
clear_inventory();
// Put a two-slot misc item and a ring into the inventory:
// | (item) | (item) | (ring) | ...
dvl::plr[dvl::myplr]._pNumInv = 2;
dvl::plr[dvl::myplr].InvGrid[0] = 1;
dvl::plr[dvl::myplr].InvGrid[1] = 1;
dvl::plr[dvl::myplr].InvList[0]._itype = dvl::ITYPE_MISC;
dvl::plr[dvl::myplr].InvGrid[2] = 2;
dvl::plr[dvl::myplr].InvList[1]._itype = dvl::ITYPE_RING;
dvl::RemoveInvItem(dvl::myplr, 0);
EXPECT_EQ(dvl::plr[dvl::myplr].InvGrid[0], 0);
EXPECT_EQ(dvl::plr[dvl::myplr].InvGrid[1], 0);
EXPECT_EQ(dvl::plr[dvl::myplr].InvGrid[2], 1);
EXPECT_EQ(dvl::plr[dvl::myplr].InvList[0]._itype, dvl::ITYPE_RING);
EXPECT_EQ(dvl::plr[dvl::myplr]._pNumInv, 1);
}
// Test removing an item from the belt
TEST(Inv, RemoveSpdBarItem)
{
// Clear the belt
for (int i = 0; i < MAXBELTITEMS; i++) {
dvl::plr[dvl::myplr].SpdList[i]._itype = dvl::ITYPE_NONE;
}
// Put an item in the belt: | x | x | item | x | x | x | x | x |
dvl::plr[dvl::myplr].SpdList[3]._itype = dvl::ITYPE_MISC;
dvl::RemoveSpdBarItem(dvl::myplr, 3);
EXPECT_EQ(dvl::plr[dvl::myplr].SpdList[3]._itype, dvl::ITYPE_NONE);
}
// Test removing a scroll from the inventory
TEST(Inv, RemoveScroll_inventory)
{
clear_inventory();
// Put a firebolt scroll into the inventory
dvl::plr[dvl::myplr]._pNumInv = 1;
dvl::plr[dvl::myplr]._pRSpell = static_cast<dvl::spell_id>(dvl::SPL_FIREBOLT);
dvl::plr[dvl::myplr].InvList[0]._itype = dvl::ITYPE_MISC;
dvl::plr[dvl::myplr].InvList[0]._iMiscId = dvl::IMISC_SCROLL;
dvl::plr[dvl::myplr].InvList[0]._iSpell = dvl::SPL_FIREBOLT;
dvl::RemoveScroll(dvl::myplr);
EXPECT_EQ(dvl::plr[dvl::myplr].InvGrid[0], 0);
EXPECT_EQ(dvl::plr[dvl::myplr]._pNumInv, 0);
}
// Test removing a scroll from the belt
TEST(Inv, RemoveScroll_belt)
{
// Clear the belt
for (int i = 0; i < MAXBELTITEMS; i++) {
dvl::plr[dvl::myplr].SpdList[i]._itype = dvl::ITYPE_NONE;
}
// Put a firebolt scroll into the belt
dvl::plr[dvl::myplr]._pSpell = static_cast<dvl::spell_id>(dvl::SPL_FIREBOLT);
dvl::plr[dvl::myplr].SpdList[3]._itype = dvl::ITYPE_MISC;
dvl::plr[dvl::myplr].SpdList[3]._iMiscId = dvl::IMISC_SCROLL;
dvl::plr[dvl::myplr].SpdList[3]._iSpell = dvl::SPL_FIREBOLT;
dvl::RemoveScroll(dvl::myplr);
EXPECT_EQ(dvl::plr[dvl::myplr].SpdList[3]._itype, dvl::ITYPE_NONE);
}

Loading…
Cancel
Save