Fixed broken chat reading.
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
package webserver
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func readStaticFile(t *testing.T, name string) string {
|
||||
t.Helper()
|
||||
data, err := os.ReadFile(filepath.Join("..", "static", name))
|
||||
if err != nil {
|
||||
t.Fatalf("read %s: %v", name, err)
|
||||
}
|
||||
return string(data)
|
||||
}
|
||||
|
||||
func requireContains(t *testing.T, text, want, context string) {
|
||||
t.Helper()
|
||||
if !strings.Contains(text, want) {
|
||||
t.Fatalf("%s missing %q", context, want)
|
||||
}
|
||||
}
|
||||
|
||||
func requireFunctionContains(t *testing.T, source, functionName, want string) {
|
||||
t.Helper()
|
||||
start := strings.Index(source, "function "+functionName+"(")
|
||||
if start < 0 {
|
||||
t.Fatalf("missing function %s", functionName)
|
||||
}
|
||||
next := strings.Index(source[start+1:], "\nfunction ")
|
||||
end := len(source)
|
||||
if next >= 0 {
|
||||
end = start + 1 + next
|
||||
}
|
||||
body := source[start:end]
|
||||
if !strings.Contains(body, want) {
|
||||
t.Fatalf("function %s missing %q", functionName, want)
|
||||
}
|
||||
}
|
||||
|
||||
func TestStaticLiveRegionAnnouncementsStayWired(t *testing.T) {
|
||||
html := readStaticFile(t, "skald.html")
|
||||
js := readStaticFile(t, "skald.js")
|
||||
|
||||
requireContains(t, html, `id="chat-announcements"`, "chat live region")
|
||||
requireContains(t, html, `role="status"`, "chat live region")
|
||||
requireContains(t, html, `aria-live="polite"`, "chat live region")
|
||||
requireContains(t, html, `id="urgent-announcements"`, "urgent live region")
|
||||
requireContains(t, html, `role="alert"`, "urgent live region")
|
||||
requireContains(t, html, `aria-live="assertive"`, "urgent live region")
|
||||
|
||||
requireFunctionContains(t, js, "announceChat", "chat-announcements")
|
||||
requireFunctionContains(t, js, "announceUrgent", "urgent-announcements")
|
||||
requireFunctionContains(t, js, "announceLiveRegion", "state.queue.push")
|
||||
requireFunctionContains(t, js, "announceLiveRegion", "flushLiveRegion")
|
||||
requireFunctionContains(t, js, "flushLiveRegion", "appendChild")
|
||||
requireFunctionContains(t, js, "addToChatbox", "announceChat")
|
||||
requireFunctionContains(t, js, "setUserStatus", "announceUrgent(`${username}: hand raised`)")
|
||||
requireFunctionContains(t, js, "setUserStatus", "announceUrgent(`${username}: hand lowered`)")
|
||||
}
|
||||
Reference in New Issue
Block a user