package savestatus
import (
"bytes"
"html/template"
"os/exec"
"strings"
"testing"
)
func render(t *testing.T, data Data) string {
t.Helper()
view, err := template.New("test").Parse(Template())
if err != nil {
t.Fatal(err)
}
var b bytes.Buffer
if err := view.ExecuteTemplate(&b, "estilo-save-status", data); err != nil {
t.Fatal(err)
}
return b.String()
}
func TestRenderStatesAndSilentUnknown(t *testing.T) {
for _, tc := range []struct{ state, want string }{
{"saved", "gespeichert"}, {"saving", "guardando"},
{"retrying", "再試行"}, {"failed", "فشل"},
{"idle", ""}, {"unsupported", ""},
} {
t.Run(tc.state, func(t *testing.T) {
got := render(t, Data{State: tc.state, Saved: "gespeichert", Saving: "guardando", Retrying: "再試行", Failed: "فشل"})
if !strings.HasSuffix(got, ">"+tc.want+"") {
t.Fatalf("wrong initial text: %s", got)
}
for _, attr := range []string{`role="status"`, `aria-live="polite"`, `aria-atomic="true"`, `estilo-save-status="inline"`} {
if !strings.Contains(got, attr) {
t.Errorf("missing %s in %s", attr, got)
}
}
if strings.Contains(got, "aria-hidden") || strings.Contains(got, " hidden") || strings.Contains(got, "aria-label") {
t.Errorf("silent or unnamed region changed semantics: %s", got)
}
if tc.want == "" && !strings.Contains(got, `data-state="idle"`) {
t.Errorf("unknown state was not normalized: %s", got)
}
})
}
got := render(t, Data{State: "failed", Placement: "floating"})
if !strings.HasSuffix(got, ">") || !strings.Contains(got, `estilo-save-status="floating"`) {
t.Fatalf("missing state text must stay empty: %s", got)
}
}
func TestLabelsAndStatusTextAreEscaped(t *testing.T) {
unsafe := `">&`
got := render(t, Data{State: "failed", Failed: unsafe, Label: unsafe, Placement: unsafe})
if strings.Contains(got, "