2026-08-15 22:49:27 +08:00
|
|
|
|
package font
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
|
"path/filepath"
|
|
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
|
|
|
|
"mc/internal/assets"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
// TestBuild 验证从真实素材包构建字体图集(UI还原.md §4)。
|
|
|
|
|
|
func TestBuild(t *testing.T) {
|
|
|
|
|
|
m := assets.New()
|
|
|
|
|
|
packDir := filepath.Join("..", "..", "resourcepacks")
|
|
|
|
|
|
if err := m.Load(filepath.Join("..", "..", "assets"), packDir); err != nil {
|
|
|
|
|
|
t.Fatalf("加载内容包失败: %v", err)
|
|
|
|
|
|
}
|
|
|
|
|
|
at, err := Build(m, "default")
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
t.Fatalf("构建字体失败: %v", err)
|
|
|
|
|
|
}
|
|
|
|
|
|
for _, ch := range []rune{'A', 'a', '0', '!'} {
|
|
|
|
|
|
g, ok := at.Glyphs[ch]
|
|
|
|
|
|
if !ok {
|
|
|
|
|
|
t.Fatalf("缺少字形 %q", ch)
|
|
|
|
|
|
}
|
|
|
|
|
|
if g.W != 8 {
|
|
|
|
|
|
t.Fatalf("字形 %q 宽度期望 8,实际 %d", ch, g.W)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2026-08-15 23:00:55 +08:00
|
|
|
|
// 主位图:宽 128(16 列 × 8px),高为 8 的整数倍(原版 ascii.png 为 128×536)
|
2026-08-15 22:49:27 +08:00
|
|
|
|
if at.Image == nil {
|
|
|
|
|
|
t.Fatal("主位图为空")
|
|
|
|
|
|
}
|
2026-08-15 23:00:55 +08:00
|
|
|
|
if b := at.Image.Bounds(); b.Dx() != 128 || b.Dy()%8 != 0 || b.Dy() < 128 {
|
|
|
|
|
|
t.Fatalf("ascii 位图尺寸异常: %dx%d", b.Dx(), b.Dy())
|
2026-08-15 22:49:27 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|