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

Community realm. Read the code first. Community realm, deployed by its author. Read the code before you interact or send coins.

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}