Initial commit of Descrybe v2 without local scratch artifacts.
Drop one-shot tmp/axe scripts and agent i18n scratch so the Gitea tree is deployable.
This commit is contained in:
@@ -0,0 +1,115 @@
|
||||
package company
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestNormalizeLanguage(t *testing.T) {
|
||||
if got := NormalizeLanguage(" EN "); got != "en" {
|
||||
t.Fatalf("NormalizeLanguage: got %q", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseLanguage_AllowedPopular(t *testing.T) {
|
||||
for _, code := range []string{"en", "es", "fr", "de", "it", "pt", "nl", "pl", "ja"} {
|
||||
got, err := ParseLanguage(code, false)
|
||||
if err != nil || got != code {
|
||||
t.Fatalf("ParseLanguage(%q): got=%q err=%v", code, got, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseLanguage_RejectsUnknown(t *testing.T) {
|
||||
if _, err := ParseLanguage("xx", false); err == nil {
|
||||
t.Fatal("expected error for unknown language")
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseLanguage_EmptyDefault(t *testing.T) {
|
||||
got, err := ParseLanguage("", true)
|
||||
if err != nil || got != DefaultLanguage {
|
||||
t.Fatalf("empty default: got=%q err=%v", got, err)
|
||||
}
|
||||
if _, err := ParseLanguage("", false); err == nil {
|
||||
t.Fatal("expected error for empty without default")
|
||||
}
|
||||
}
|
||||
|
||||
func TestIsAllowedLanguage(t *testing.T) {
|
||||
if !IsAllowedLanguage("JA") {
|
||||
t.Fatal("ja should be allowed")
|
||||
}
|
||||
if IsAllowedLanguage("zh") {
|
||||
t.Fatal("zh not in allowlist yet")
|
||||
}
|
||||
}
|
||||
|
||||
func TestLanguageLabel(t *testing.T) {
|
||||
if got := LanguageLabel("fr"); got != "French" {
|
||||
t.Fatalf("fr: got %q", got)
|
||||
}
|
||||
if got := LanguageLabel(""); got != "English" {
|
||||
t.Fatalf("empty: got %q", got)
|
||||
}
|
||||
if got := LanguageLabel("xx"); got != "English" {
|
||||
t.Fatalf("unknown: got %q", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestContentLanguagesSyncWithWebAllowlist(t *testing.T) {
|
||||
root := findRepoRoot(t)
|
||||
tsPath := filepath.Join(root, "apps", "web", "src", "lib", "content-languages.ts")
|
||||
raw, err := os.ReadFile(tsPath)
|
||||
if err != nil {
|
||||
t.Fatalf("read %s: %v", tsPath, err)
|
||||
}
|
||||
webCodes := parseTSContentLanguageValues(string(raw))
|
||||
if len(webCodes) == 0 {
|
||||
t.Fatal("no value: \"xx\" entries parsed from content-languages.ts")
|
||||
}
|
||||
if len(webCodes) != len(ContentLanguages) {
|
||||
t.Fatalf("length mismatch: web=%d go=%d\nweb=%v\ngo=%v", len(webCodes), len(ContentLanguages), webCodes, ContentLanguages)
|
||||
}
|
||||
for i, code := range ContentLanguages {
|
||||
if webCodes[i] != code {
|
||||
t.Fatalf("index %d: web=%q go=%q (keep content-languages.ts in sync with ContentLanguages)", i, webCodes[i], code)
|
||||
}
|
||||
if _, err := ParseLanguage(code, false); err != nil {
|
||||
t.Fatalf("ParseLanguage(%q): %v", code, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func findRepoRoot(t *testing.T) string {
|
||||
t.Helper()
|
||||
dir, err := os.Getwd()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
for i := 0; i < 10; i++ {
|
||||
candidate := filepath.Join(dir, "apps", "web", "src", "lib", "content-languages.ts")
|
||||
if _, err := os.Stat(candidate); err == nil {
|
||||
return dir
|
||||
}
|
||||
parent := filepath.Dir(dir)
|
||||
if parent == dir {
|
||||
break
|
||||
}
|
||||
dir = parent
|
||||
}
|
||||
t.Fatal("monorepo root not found (expected apps/web/src/lib/content-languages.ts)")
|
||||
return ""
|
||||
}
|
||||
|
||||
func parseTSContentLanguageValues(src string) []string {
|
||||
re := regexp.MustCompile(`value:\s*"([a-z]{2})"`)
|
||||
matches := re.FindAllStringSubmatch(src, -1)
|
||||
out := make([]string, 0, len(matches))
|
||||
for _, m := range matches {
|
||||
out = append(out, m[1])
|
||||
}
|
||||
return out
|
||||
}
|
||||
Reference in New Issue
Block a user