BaseInventory::addItem(item1,item2,item3) now has the same behaviour as multiple separate addItem() calls (#4237)

fixes #1412
This commit is contained in:
Jason
2021-06-17 16:05:24 -04:00
committed by GitHub
parent 71a4ea2a95
commit 15e5bdb210
2 changed files with 69 additions and 29 deletions

View File

@ -24,8 +24,10 @@ declare(strict_types=1);
namespace pocketmine\inventory;
use PHPUnit\Framework\TestCase;
use pocketmine\item\Item;
use pocketmine\item\ItemFactory;
use pocketmine\item\ItemIds;
use pocketmine\item\VanillaItems;
class BaseInventoryTest extends TestCase{
@ -47,4 +49,40 @@ class BaseInventoryTest extends TestCase{
self::assertFalse($inv->canAddItem($item1), "Item WITH userdata should not stack with item WITHOUT userdata");
self::assertNotEmpty($inv->addItem($item1));
}
/**
* @return Item[]
*/
private function getTestItems() : array{
return [
VanillaItems::APPLE()->setCount(16),
VanillaItems::APPLE()->setCount(16),
VanillaItems::APPLE()->setCount(16),
VanillaItems::APPLE()->setCount(16)
];
}
public function testAddMultipleItemsInOneCall() : void{
$inventory = new class(1) extends SimpleInventory{
};
$leftover = $inventory->addItem(...$this->getTestItems());
self::assertCount(0, $leftover);
self::assertTrue($inventory->getItem(0)->equalsExact(VanillaItems::APPLE()->setCount(64)));
}
public function testAddMultipleItemsInOneCallWithLeftover() : void{
$inventory = new class(1) extends SimpleInventory{};
$inventory->setItem(0, VanillaItems::APPLE()->setCount(20));
$leftover = $inventory->addItem(...$this->getTestItems());
self::assertCount(2, $leftover); //the leftovers are not currently stacked - if they were given separately, they'll be returned separately
self::assertTrue($inventory->getItem(0)->equalsExact(VanillaItems::APPLE()->setCount(64)));
$leftoverCount = 0;
foreach($leftover as $item){
self::assertTrue($item->equals(VanillaItems::APPLE()));
$leftoverCount += $item->getCount();
}
self::assertSame(20, $leftoverCount);
}
}