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}