67 lines
1.6 KiB
Go
67 lines
1.6 KiB
Go
|
|
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())
|
|||
|
|
}
|
|||
|
|
}
|