package d2player import ( "testing" "github.com/stretchr/testify/assert" ) type TestItem struct { width int height int inventorySlotX int inventorySlotY int } func (t *TestItem) InventoryGridSize() (int, int) { return t.width, t.height } func (t *TestItem) GetItemCode() string { return "" } func (t *TestItem) InventoryGridSlot() (int, int) { return t.inventorySlotX, t.inventorySlotY } func (t *TestItem) SetInventoryGridSlot(x int, y int) { t.inventorySlotX, t.inventorySlotY = x, y } func NewTestItem(width int, height int) *TestItem { return &TestItem{width: width, height: height} } func TestItemGrid_Add_Basic(t *testing.T) { grid := NewItemGrid(2, 2, 0, 0) tl := NewTestItem(1, 1) tr := NewTestItem(1, 1) bl := NewTestItem(1, 1) br := NewTestItem(1, 1) added, err := grid.Add(tl, tr, bl, br) assert.Equal(t, 4, added) assert.NoError(t, err) assert.Equal(t, tl, grid.GetSlot(0, 0)) assert.Equal(t, tr, grid.GetSlot(1, 0)) assert.Equal(t, bl, grid.GetSlot(0, 1)) assert.Equal(t, br, grid.GetSlot(1, 1)) } func TestItemGrid_Add_OverflowBasic(t *testing.T) { grid := NewItemGrid(2, 2, 0, 0) tl := NewTestItem(1, 1) tr := NewTestItem(1, 1) bl := NewTestItem(1, 1) br := NewTestItem(1, 1) o := NewTestItem(1, 1) added, err := grid.Add(tl, tr, bl, br, o) assert.Equal(t, 4, added) assert.Error(t, err) assert.Equal(t, tl, grid.GetSlot(0, 0)) assert.Equal(t, tr, grid.GetSlot(1, 0)) assert.Equal(t, bl, grid.GetSlot(0, 1)) assert.Equal(t, br, grid.GetSlot(1, 1)) } func TestItemGrid_Add_LargeItem(t *testing.T) { grid := NewItemGrid(3, 3, 0, 0) tl := NewTestItem(1, 1) o := NewTestItem(2, 2) added, err := grid.Add(tl, o) assert.Equal(t, 2, added) assert.NoError(t, err) assert.Equal(t, tl, grid.GetSlot(0, 0)) assert.Equal(t, o, grid.GetSlot(1, 0)) assert.Equal(t, o, grid.GetSlot(2, 0)) assert.Nil(t, grid.GetSlot(0, 1)) assert.Equal(t, o, grid.GetSlot(1, 1)) assert.Equal(t, o, grid.GetSlot(2, 1)) assert.Nil(t, grid.GetSlot(0, 2)) assert.Nil(t, grid.GetSlot(1, 2)) assert.Nil(t, grid.GetSlot(2, 2)) } func TestItemGrid_Add_OverflowLargeItem(t *testing.T) { grid := NewItemGrid(2, 2, 0, 0) tl := NewTestItem(1, 1) o := NewTestItem(2, 2) added, err := grid.Add(tl, o) assert.Equal(t, 1, added) assert.Error(t, err) assert.Equal(t, tl, grid.GetSlot(0, 0)) assert.Nil(t, grid.GetSlot(1, 0)) assert.Nil(t, grid.GetSlot(0, 1)) assert.Nil(t, grid.GetSlot(1, 1)) }