package web import ( "embed" "fmt" "testing" "text/template" ) //go:embed ui/templates/*.html var testTemplateFS embed.FS // 与 ui.go 相同的函数名集合(dummy 实现,仅用于语法验证) var testFuncs = template.FuncMap{ "add": func(a, b int) int { return a + b }, "ago": func(v any) string { return "" }, "alarmChannelSource": func(v any) any { return v }, "auditActionLabel": func(v any) any { return v }, "auditField": func(v any) any { return v }, "auditStatusLabel": func(v any) any { return v }, "displayDeviceName": func(v ...any) string { return "" }, "displayDeviceTechnicalName": func(v ...any) any { return "" }, "div": func(a, b int) int { return a / b }, "formatTime": func(v any) any { return v }, "formatTuneValue": func(v, s float64) string { return "" }, "hasString": func(a []string, b string) bool { return false }, "icon": func(name string) string { return "" }, "inputBindingRef": func(v any) any { return v }, "json": func(v any) any { return v }, "loop": func(n int) []int { return nil }, "modelTypeLabel": func(v any) any { return v }, "mul": func(a, b int) int { return a * b }, "outputBindingValue": func(v ...any) any { return "" }, "rawHTML": func(v any) any { return v }, "resourceTypeLabel": func(v any) any { return v }, "ruleLabel": func(v any) any { return v }, "serviceBindingRef": func(v any) any { return v }, "severityClass": func(v any) any { return v }, "severityLabel": func(v any) any { return v }, "shortHash": func(v any) any { return v }, "shortID": func(v any) any { return v }, "slotTypeLabel": func(v any) any { return v }, "statusClass": func(v any) any { return v }, "statusLabel": func(v any) any { return v }, "sub": func(a, b int) int { return a - b }, "taskActionLabel": func(v any) any { return v }, "taskGroupClass": func(v any) any { return v }, "taskGroupLabel": func(v any) any { return v }, "taskStatusClass": func(v any) any { return v }, "taskStatusLabel": func(v any) any { return v }, } func TestTemplateSyntaxAll(t *testing.T) { entries, err := testTemplateFS.ReadDir("ui/templates") if err != nil { t.Fatal(err) } for _, e := range entries { name := "ui/templates/" + e.Name() data, err := testTemplateFS.ReadFile(name) if err != nil { t.Fatalf("读取 %s: %v", name, err) } tmpl := template.New(e.Name()).Funcs(testFuncs) if _, err := tmpl.Parse(string(data)); err != nil { t.Fatalf("模板语法错误 %s: %v", name, err) } } fmt.Printf("全部 %d 个模板语法通过\n", len(entries)) }