package textr import ( "image/color" "path/filepath" "testing" "mc/internal/assets" "mc/internal/font" ) // newTestDrawer 从真实素材包构建字体图集与绘制器。 func newTestDrawer(t *testing.T) *Drawer { t.Helper() m := assets.New() if err := m.Load(filepath.Join("..", "..", "assets"), filepath.Join("..", "..", "resourcepacks")); err != nil { t.Fatalf("加载内容包失败: %v", err) } at, err := font.Build(m, "default") if err != nil { t.Fatalf("构建字体失败: %v", err) } return New(at) } // TestWidth 文本宽度 = 字符数 × 8。 func TestWidth(t *testing.T) { d := newTestDrawer(t) if w := d.Width("AB"); w != 16 { t.Fatalf("宽度期望 16,实际 %d", w) } if w := d.Width(""); w != 0 { t.Fatalf("空串宽度期望 0,实际 %d", w) } } // TestDraw 渲染 'A' 得到 8×8 且含非透明像素。 func TestDraw(t *testing.T) { d := newTestDrawer(t) img := d.Draw("A", color.RGBA{255, 255, 255, 255}, false) b := img.Bounds() if b.Dx() != 8 || b.Dy() != 8 { t.Fatalf("图像尺寸期望 8×8,实际 %dx%d", b.Dx(), b.Dy()) } opaque := 0 for y := b.Min.Y; y < b.Max.Y; y++ { for x := b.Min.X; x < b.Max.X; x++ { if _, _, _, a := img.At(x, y).RGBA(); a > 0 { opaque++ } } } if opaque == 0 { t.Fatal("渲染结果全透明") } } // TestDrawShadow 阴影模式:图像加 1px 且含黑色像素。 func TestDrawShadow(t *testing.T) { d := newTestDrawer(t) img := d.Draw("A", color.RGBA{255, 255, 255, 255}, true) b := img.Bounds() if b.Dx() != 9 || b.Dy() != 9 { t.Fatalf("阴影图像尺寸期望 9×9,实际 %dx%d", b.Dx(), b.Dy()) } }