cmd/screentest,internal/screentest: add ints function, release notes tests

This CL is preparation for converting release notes to Markdown.
We want to use the screentest tool to help us minimize changes.

- internal/screentest: add a template function to generate a sequence
  of integers

- cmd/screentest/testdata: add relnotes.txt, which has a test for
  every release note.

Change-Id: Ibeb2419637bc73d93b88d4c378f5396967d3d70f
Reviewed-on: https://go-review.googlesource.com/c/website/+/539496
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Jonathan Amsterdam <jba@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
diff --git a/cmd/screentest/testdata/relnotes.txt b/cmd/screentest/testdata/relnotes.txt
new file mode 100644
index 0000000..7c2177e
--- /dev/null
+++ b/cmd/screentest/testdata/relnotes.txt
@@ -0,0 +1,13 @@
+windowsize 1536x960
+compare https://go.dev http://localhost:6060/go.dev
+
+
+test rl0
+pathname /doc/go1
+capture fullscreen
+
+{{range ints 1 22}}
+  test rl{{.}}
+  pathname /doc/go1.{{.}}
+  capture fullscreen
+{{end}}
diff --git a/internal/screentest/screentest.go b/internal/screentest/screentest.go
index 4c917d6..ecbb4e8 100644
--- a/internal/screentest/screentest.go
+++ b/internal/screentest/screentest.go
@@ -416,7 +416,16 @@
 
 // readTests parses the testcases from a text file.
 func readTests(file string, vars map[string]string) ([]*testcase, error) {
-	tmpl, err := template.ParseFiles(file)
+	tmpl := template.New(filepath.Base(file)).Funcs(template.FuncMap{
+		"ints": func(start, end int) []int {
+			var out []int
+			for i := start; i < end; i++ {
+				out = append(out, i)
+			}
+			return out
+		},
+	})
+	_, err := tmpl.ParseFiles(file)
 	if err != nil {
 		return nil, fmt.Errorf("template.ParseFiles(%q): %w", file, err)
 	}