Files
ngzz-mc/internal/inventory/inventory_test.go

70 lines
1.7 KiB
Go
Raw Normal View History

package inventory
import (
"path/filepath"
"testing"
"mc/internal/item"
)
// loadItemReg 加载物品注册表。
func loadItemReg(t *testing.T) *item.Registry {
t.Helper()
r, err := item.Load(filepath.Join("..", "..", "assets", "config", "items.json"))
if err != nil {
t.Fatalf("加载物品注册表失败: %v", err)
}
return r
}
// TestMerge 验证合并规则(物品与背包.md §3 规则表)。
func TestMerge(t *testing.T) {
reg := loadItemReg(t)
inv := New(reg)
// 放入 30 个木板 → 合并到 34 个
rem := inv.Add(item.Stack{Name: "oak_planks", Count: 30})
if !rem.Empty() {
t.Fatal("30 个木板应全部放入")
}
rem = inv.Add(item.Stack{Name: "oak_planks", Count: 34})
if !rem.Empty() {
t.Fatal("34 个木板应合并入同一槽")
}
// 64 上限:再放 10 应进入新槽(槽 0 已满 64)
rem = inv.Add(item.Stack{Name: "oak_planks", Count: 10})
if !rem.Empty() {
t.Fatalf("剩余期望空,实际 %d", rem.Count)
}
if inv.Slots[1].Name != "oak_planks" || inv.Slots[1].Count != 10 {
t.Fatalf("槽 1 期望 10 个木板,实际 %+v", inv.Slots[1])
}
}
// TestRemove 验证取出物品。
func TestRemove(t *testing.T) {
reg := loadItemReg(t)
inv := New(reg)
inv.Add(item.Stack{Name: "stick", Count: 16})
if !inv.Remove("stick", 5) {
t.Fatal("应能取出 5 个")
}
if inv.Remove("stick", 20) {
t.Fatal("不足 20 个不应成功")
}
if !inv.Remove("stick", 11) {
t.Fatal("应能取出剩余 11 个")
}
}
// TestSelected 验证选中槽。
func TestSelected(t *testing.T) {
reg := loadItemReg(t)
inv := New(reg)
inv.Slots[3] = item.Stack{Name: "torch", Count: 8}
inv.Selected = 3
if s := inv.SelectedStack(); s.Name != "torch" || s.Count != 8 {
t.Fatalf("选中槽异常: %+v", s)
}
}