From 5a5b04fab6c561f5071cd58dc1dc3c0619e70457 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=B7=E7=94=B5=E8=8A=BD=E8=A1=A3?= Date: Mon, 5 Oct 2026 13:59:52 -0400 Subject: [PATCH] docs_test: docs and gallery pages must match one-to-one, no fixed count --- docs_test.go | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/docs_test.go b/docs_test.go index ac48b43..cc19843 100644 --- a/docs_test.go +++ b/docs_test.go @@ -11,6 +11,7 @@ import ( var ( docsGoBlock = regexp.MustCompile("(?s)```go\n(.*?)```") docsSpace = regexp.MustCompile(`\s+`) + docsPageID = regexp.MustCompile(`ID: "(\d{3})"`) ) // TestDocSnippetsAreCompiledExamples keeps every doc's first Go block inside a compiled Example. @@ -32,8 +33,33 @@ func TestDocSnippetsAreCompiledExamples(t *testing.T) { if err != nil { t.Fatal(err) } - if len(docs) != 100 { - t.Fatalf("%d component docs, want 100", len(docs)) + pages, err := filepath.Glob("examples/gallery/pages_*.go") + if err != nil { + t.Fatal(err) + } + ids := map[string]bool{} + for _, f := range pages { + b, err := os.ReadFile(f) + if err != nil { + t.Fatal(err) + } + for _, m := range docsPageID.FindAllSubmatch(b, -1) { + ids[string(m[1])] = true + } + } + documented := map[string]bool{} + for _, d := range docs { + documented[filepath.Base(d)[:3]] = true + } + for id := range ids { + if !documented[id] { + t.Errorf("gallery page %s has no doc", id) + } + } + for id := range documented { + if !ids[id] { + t.Errorf("doc %s has no gallery page", id) + } } for _, d := range docs { b, err := os.ReadFile(d)