Files
ngzz-mc/internal/cjkfont/cjkfont_test.go

53 lines
1.2 KiB
Go

package cjkfont
import (
"image/color"
"os"
"path/filepath"
"testing"
)
// msyhCandidates 微软雅黑常见路径。
var msyhCandidates = []string{
filepath.Join(os.Getenv("WINDIR"), "Fonts", "msyh.ttc"),
filepath.Join(os.Getenv("WINDIR"), "Fonts", "msyh.ttf"),
"/usr/share/fonts/truetype/wqy/wqy-microhei.ttc",
}
// TestLoadDraw 加载系统 CJK 字体并渲染中文(无字体时跳过)。
func TestLoadDraw(t *testing.T) {
path := ""
for _, p := range msyhCandidates {
if _, err := os.Stat(p); err == nil {
path = p
break
}
}
if path == "" {
t.Skip("本机无 CJK 字体,跳过")
}
r, err := Load(path, 16)
if err != nil {
t.Fatalf("加载字体失败: %v", err)
}
img := r.Draw("年糕历险记", color.RGBA{255, 255, 255, 255})
b := img.Bounds()
if b.Dx() < 16 || b.Dy() < 8 {
t.Fatalf("渲染尺寸异常: %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("渲染结果全透明")
}
if w := r.Width("年糕历险记"); w < 16 {
t.Fatalf("宽度异常: %d", w)
}
}