test: extend coverage of testSlotAction
This commit is contained in:
1 parent
c444ff3a6a
commit
f8142fe7b0
1 file changed
+157
@@ -311,3 +311,160 @@ VF_TEST(aNumberKeyRespectsTheTargetSlotsFilter) {
|
||||
int hotbar = session.menu.layout().hotbarFirst;
|
||||
int fuel = session.menu.slotsWithRole(MenuSlot::Role::FuelInput)[0];
|
||||
|
||||
session.menu.slot(hotbar).cell.stack = makeStack(ItemId::Stone, 4);
|
||||
CHECK(!session.hotbar(fuel, 0).applied);
|
||||
CHECK_EQ(session.menu.stackAt(hotbar).count, 4);
|
||||
|
||||
session.menu.slot(hotbar + 1).cell.stack = makeStack(ItemId::Planks, 4);
|
||||
CHECK(session.hotbar(fuel, 1).applied);
|
||||
CHECK_EQ(session.menu.stackAt(fuel).count, 4);
|
||||
}
|
||||
|
||||
VF_TEST(aNumberKeyOnTheResultSlotCraftsIntoAnEmptyHotbarSlot) {
|
||||
Session session(MenuKind::CraftingTable);
|
||||
CraftingView grid = session.menu.crafting();
|
||||
grid.input(0, 0) = makeStack(ItemId::Wood, 3);
|
||||
grid.refresh();
|
||||
|
||||
int hotbar = session.menu.layout().hotbarFirst;
|
||||
SlotActionResult crafted = session.hotbar(session.menu.layout().resultSlot, 0);
|
||||
CHECK(crafted.applied);
|
||||
CHECK(crafted.craftedResult);
|
||||
CHECK_EQ(session.menu.stackAt(hotbar).count, 4);
|
||||
CHECK(session.menu.stackAt(hotbar).item == ItemId::Planks);
|
||||
CHECK_EQ(grid.input(0, 0).count, 2);
|
||||
|
||||
// The second attempt finds the hotbar slot occupied and refuses.
|
||||
CHECK(!session.hotbar(session.menu.layout().resultSlot, 0).applied);
|
||||
CHECK_EQ(grid.input(0, 0).count, 2);
|
||||
}
|
||||
|
||||
VF_TEST(theMiddleClickOnlyClonesInCreativeMode) {
|
||||
Session survival(MenuKind::Chest);
|
||||
survival.menu.slot(0).cell.stack = makeStack(ItemId::Stone, 3);
|
||||
SlotActionResult nothing = survival.click(ClickKind::Middle, 0);
|
||||
CHECK(!nothing.applied);
|
||||
CHECK_EQ(nothing.created, 0);
|
||||
CHECK(survival.cursor.empty());
|
||||
|
||||
Session creative(MenuKind::Chest);
|
||||
creative.menu.setCreativeMode(true);
|
||||
creative.menu.slot(0).cell.stack = makeStack(ItemId::Stone, 3);
|
||||
SlotActionResult cloned = creative.click(ClickKind::Middle, 0);
|
||||
CHECK(cloned.applied);
|
||||
CHECK_EQ(cloned.created, 64);
|
||||
CHECK_EQ(creative.cursor.held.count, 64);
|
||||
CHECK_EQ(creative.menu.stackAt(0).count, 3);
|
||||
|
||||
// A full cursor blocks the clone.
|
||||
CHECK(!creative.click(ClickKind::Middle, 0).applied);
|
||||
}
|
||||
|
||||
VF_TEST(aDoubleClickGathersEveryMatchingStackOntoTheCursor) {
|
||||
Session session(MenuKind::Chest);
|
||||
session.menu.slot(0).cell.stack = makeStack(ItemId::Sand, 10);
|
||||
session.menu.slot(1).cell.stack = makeStack(ItemId::Sand, 64);
|
||||
session.menu.slot(2).cell.stack = makeStack(ItemId::Sand, 5);
|
||||
session.menu.slot(3).cell.stack = makeStack(ItemId::Stone, 20);
|
||||
|
||||
session.click(ClickKind::Left, 0);
|
||||
CHECK_EQ(session.cursor.held.count, 10);
|
||||
|
||||
SlotActionResult gathered = session.click(ClickKind::Double, 0);
|
||||
CHECK(gathered.applied);
|
||||
CHECK_EQ(session.cursor.held.count, 64);
|
||||
// The partial stack goes first, the full one only tops up the rest.
|
||||
CHECK(session.menu.stackAt(2).empty());
|
||||
CHECK_EQ(session.menu.stackAt(1).count, 15);
|
||||
CHECK_EQ(session.menu.stackAt(3).count, 20);
|
||||
|
||||
CHECK(!session.click(ClickKind::Double, 0).applied);
|
||||
}
|
||||
|
||||
VF_TEST(aDoubleClickWithAnEmptyCursorDoesNothing) {
|
||||
Session session(MenuKind::Chest);
|
||||
session.menu.slot(0).cell.stack = makeStack(ItemId::Sand, 10);
|
||||
CHECK(!session.click(ClickKind::Double, 0).applied);
|
||||
CHECK_EQ(session.menu.stackAt(0).count, 10);
|
||||
}
|
||||
|
||||
VF_TEST(aDoubleClickNeverPullsOutOfAResultSlot) {
|
||||
Session session(MenuKind::CraftingTable);
|
||||
CraftingView grid = session.menu.crafting();
|
||||
grid.input(0, 0) = makeStack(ItemId::Wood, 1);
|
||||
grid.refresh();
|
||||
|
||||
int hotbar = session.menu.layout().hotbarFirst;
|
||||
session.menu.slot(hotbar).cell.stack = makeStack(ItemId::Planks, 2);
|
||||
session.click(ClickKind::Left, hotbar);
|
||||
CHECK_EQ(session.cursor.held.count, 2);
|
||||
|
||||
session.click(ClickKind::Double, hotbar);
|
||||
CHECK_EQ(session.cursor.held.count, 2);
|
||||
CHECK_EQ(session.menu.stackAt(session.menu.layout().resultSlot).count, 4);
|
||||
}
|
||||
|
||||
VF_TEST(aLeftDragSplitsEvenlyAndKeepsTheRemainderOnTheCursor) {
|
||||
Session session(MenuKind::Chest);
|
||||
session.menu.slot(0).cell.stack = makeStack(ItemId::Stone, 10);
|
||||
session.click(ClickKind::Left, 0);
|
||||
|
||||
CHECK(session.click(ClickKind::DragLeftStart, 1).applied);
|
||||
CHECK(session.click(ClickKind::DragLeftAdd, 2).applied);
|
||||
CHECK(session.click(ClickKind::DragLeftAdd, 3).applied);
|
||||
CHECK(!session.click(ClickKind::DragLeftAdd, 3).applied);
|
||||
|
||||
SlotActionResult released = session.click(ClickKind::DragLeftEnd, -1);
|
||||
CHECK(released.applied);
|
||||
CHECK_EQ(released.moved, 9);
|
||||
CHECK_EQ(session.menu.stackAt(1).count, 3);
|
||||
CHECK_EQ(session.menu.stackAt(2).count, 3);
|
||||
CHECK_EQ(session.menu.stackAt(3).count, 3);
|
||||
CHECK_EQ(session.cursor.held.count, 1);
|
||||
CHECK(!session.drag.active);
|
||||
}
|
||||
|
||||
VF_TEST(aRightDragLeavesExactlyOneItemPerPaintedSlot) {
|
||||
Session session(MenuKind::Chest);
|
||||
session.menu.slot(0).cell.stack = makeStack(ItemId::Apple, 8);
|
||||
session.click(ClickKind::Left, 0);
|
||||
|
||||
session.click(ClickKind::DragRightStart, 1);
|
||||
session.click(ClickKind::DragRightAdd, 2);
|
||||
session.click(ClickKind::DragRightAdd, 3);
|
||||
SlotActionResult released = session.click(ClickKind::DragRightEnd, -1);
|
||||
|
||||
CHECK(released.applied);
|
||||
CHECK_EQ(released.moved, 3);
|
||||
CHECK_EQ(session.menu.stackAt(1).count, 1);
|
||||
CHECK_EQ(session.menu.stackAt(2).count, 1);
|
||||
CHECK_EQ(session.menu.stackAt(3).count, 1);
|
||||
CHECK_EQ(session.cursor.held.count, 5);
|
||||
}
|
||||
|
||||
VF_TEST(aDragSkipsSlotsThatWouldRefuseTheStackAnyway) {
|
||||
Session session(MenuKind::Furnace);
|
||||
int hotbar = session.menu.layout().hotbarFirst;
|
||||
int fuel = session.menu.slotsWithRole(MenuSlot::Role::FuelInput)[0];
|
||||
int input = session.menu.slotsWithRole(MenuSlot::Role::SmeltInput)[0];
|
||||
|
||||
session.menu.slot(hotbar).cell.stack = makeStack(ItemId::Stone, 6);
|
||||
session.click(ClickKind::Left, hotbar);
|
||||
|
||||
session.click(ClickKind::DragLeftStart, hotbar + 1);
|
||||
CHECK(!session.click(ClickKind::DragLeftAdd, fuel).applied);
|
||||
CHECK(!session.click(ClickKind::DragLeftAdd, input).applied);
|
||||
CHECK(session.click(ClickKind::DragLeftAdd, hotbar + 2).applied);
|
||||
session.click(ClickKind::DragLeftEnd, -1);
|
||||
|
||||
CHECK_EQ(session.menu.stackAt(hotbar + 1).count, 3);
|
||||
CHECK_EQ(session.menu.stackAt(hotbar + 2).count, 3);
|
||||
CHECK(session.menu.stackAt(fuel).empty());
|
||||
CHECK(session.cursor.empty());
|
||||
}
|
||||
|
||||
VF_TEST(anAbandonedDragGivesEverythingBackToTheCursor) {
|
||||
Session session(MenuKind::Chest);
|
||||
session.menu.slot(0).cell.stack = makeStack(ItemId::Stone, 12);
|
||||
session.click(ClickKind::Left, 0);
|
||||
|
||||
Reference in new issue
Block a user