| // Copyright 2023 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| package analyzerutil_test | |
| import ( | |
| "testing" | |
| "golang.org/x/tools/internal/analysis/analyzerutil" | |
| ) | |
| func TestExtractDoc(t *testing.T) { | |
| const multi = `// Copyright | |
| //+build tag | |
| // Package foo | |
| // | |
| // # Irrelevant heading | |
| // | |
| // This is irrelevant doc. | |
| // | |
| // # Analyzer nocolon | |
| // | |
| // This one has the wrong form for this line. | |
| // | |
| // # Analyzer food | |
| // | |
| // food: reports dining opportunities | |
| // | |
| // This is the doc for analyzer 'food'. | |
| // | |
| // # Analyzer foo | |
| // | |
| // foo: reports diagnostics | |
| // | |
| // This is the doc for analyzer 'foo'. | |
| // | |
| // # Analyzer bar | |
| // | |
| // bar: reports drinking opportunities | |
| // | |
| // This is the doc for analyzer 'bar'. | |
| package blah | |
| var x = syntax error | |
| ` | |
| for _, test := range []struct { | |
| content, name string | |
| want string // doc or "error: %w" string | |
| }{ | |
| {"", "foo", | |
| "error: empty Go source file"}, | |
| {"//foo", "foo", | |
| "error: not a Go source file"}, | |
| {"//foo\npackage foo", "foo", | |
| "error: package doc comment contains no 'Analyzer foo' heading"}, | |
| {multi, "foo", | |
| "reports diagnostics\n\nThis is the doc for analyzer 'foo'."}, | |
| {multi, "bar", | |
| "reports drinking opportunities\n\nThis is the doc for analyzer 'bar'."}, | |
| {multi, "food", | |
| "reports dining opportunities\n\nThis is the doc for analyzer 'food'."}, | |
| {multi, "nope", | |
| "error: package doc comment contains no 'Analyzer nope' heading"}, | |
| {multi, "nocolon", | |
| "error: 'Analyzer nocolon' heading not followed by 'nocolon: summary...' line"}, | |
| } { | |
| got, err := analyzerutil.ExtractDoc(test.content, test.name) | |
| if err != nil { | |
| got = "error: " + err.Error() | |
| } | |
| if test.want != got { | |
| t.Errorf("ExtractDoc(%q) returned <<%s>>, want <<%s>>, given input <<%s>>", | |
| test.name, got, test.want, test.content) | |
| } | |
| } | |
| } |