Search Apps Documentation Source Content File Folder Download Copy Actions Download State String Boolean Number Struct Map Slice Pointer Function Closure Reference Nil Package Type Interface Unknown

wordle_test.gno

2.92 Kb Β· 84 lines
 1package home
 2
 3import (
 4	"strings"
 5	"testing"
 6
 7	"gno.land/p/nt/uassert/v0"
 8)
 9
10func TestWords(t *testing.T) {
11	seen := map[string]bool{}
12	for _, w := range words {
13		uassert.True(t, validGuess(w), "bad word: "+w)
14		uassert.False(t, seen[w], "duplicate word: "+w)
15		seen[w] = true
16	}
17	// stride is coprime with the list, so a full cycle hits every word once.
18	got := map[string]bool{}
19	for n := 1; n <= len(words); n++ {
20		got[answer(n)] = true
21	}
22	uassert.Equal(t, len(words), len(got))
23}
24
25func TestScore(t *testing.T) {
26	uassert.Equal(t, "🟩🟩🟩🟩🟩", score("REALM", "REALM"))
27	uassert.Equal(t, "⬛⬛⬛⬛⬛", score("BUNNY", "REALM"))
28	uassert.Equal(t, "🟨🟨🟨🟨🟨", score("EALMR", "REALM"))
29	// One E in the answer: the second E in the guess gets nothing.
30	uassert.Equal(t, "β¬›πŸŸ©πŸŸ¨β¬›β¬›", score("EERIE", "REALM"))
31	uassert.Equal(t, "πŸŸ¨β¬›β¬›β¬›β¬›", score("EXXEX", "REALM"))
32	// The exact match claims the letter before a misplaced copy can.
33	uassert.Equal(t, "β¬›πŸŸ©πŸŸ©β¬›β¬›", score("AAXXX", "BAXYZ"))
34}
35
36func TestWordleFlow(t *testing.T) {
37	setDay(launchDay + 2) // puzzle #3
38	ans := answer(3)
39
40	page := Render("wordle")
41	uassert.True(t, strings.Contains(page, "# Gnordle #3"))
42	uassert.True(t, strings.Contains(page, `<gno-form path="wordle/3">`))
43
44	page = Render("wordle/3?guess=crane")
45	uassert.True(t, strings.Contains(page, score("CRANE", ans)+" CRANE"))
46	uassert.True(t, strings.Contains(page, `<gno-form path="wordle/3/CRANE">`))
47	uassert.True(t, strings.Contains(page, "Guess 2 of 6"))
48
49	page = Render("wordle/3/CRANE?guess=" + ans)
50	uassert.True(t, strings.Contains(page, "**Solved in 2/6.**"))
51	uassert.True(t, strings.Contains(page, "Gnordle #3 2/6"))
52	uassert.False(t, strings.Contains(page, "<gno-form"))
53
54	page = Render("wordle/3?guess=abc")
55	uassert.True(t, strings.Contains(page, "> That guess is not five letters, A to Z."))
56	uassert.True(t, strings.Contains(page, `<gno-form path="wordle/3">`))
57
58	page = Render("wordle/1")
59	uassert.True(t, strings.Contains(page, "[Play today's puzzle]"))
60}
61
62func TestWordleLost(t *testing.T) {
63	setDay(launchDay)
64	ans := answer(1)
65	wrong := "ZZZZZ"
66	if ans == wrong {
67		wrong = "YYYYY"
68	}
69	path := "wordle/1/" + strings.Repeat(wrong+".", 5) + wrong
70	page := Render(path)
71	uassert.True(t, strings.Contains(page, "**The word was "+ans+".**"))
72	uassert.True(t, strings.Contains(page, "Gnordle #1 X/6"))
73}
74
75func TestWordleBadLinks(t *testing.T) {
76	setDay(launchDay)
77	uassert.True(t, strings.Contains(Render("wordle/2"), "is not out yet"))
78	uassert.True(t, strings.Contains(Render("wordle/0"), "no puzzle with that number"))
79	uassert.True(t, strings.Contains(Render("wordle/x"), "no puzzle with that number"))
80	uassert.True(t, strings.Contains(Render("wordle/1/CRA"), "link is broken"))
81	uassert.True(t, strings.Contains(Render("wordle/1/A.B/C"), "link is broken"))
82	tooMany := "wordle/1/" + strings.Repeat("CRANE.", 6) + "CRANE"
83	uassert.True(t, strings.Contains(Render(tooMany), "link is broken"))
84}