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

70 lines
1.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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)
}
}