golang.org/x/tools@v0.21.1-0.20240520172518-788d39e776b1/internal/analysisinternal/extractdoc_test.go (about)

     1  // Copyright 2023 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package analysisinternal_test
     6  
     7  import (
     8  	"testing"
     9  
    10  	"golang.org/x/tools/internal/analysisinternal"
    11  )
    12  
    13  func TestExtractDoc(t *testing.T) {
    14  	const multi = `// Copyright
    15  
    16  //+build tag
    17  
    18  // Package foo
    19  //
    20  // # Irrelevant heading
    21  //
    22  // This is irrelevant doc.
    23  //
    24  // # Analyzer nocolon
    25  //
    26  // This one has the wrong form for this line.
    27  //
    28  // # Analyzer food
    29  //
    30  // food: reports dining opportunities
    31  //
    32  // This is the doc for analyzer 'food'.
    33  //
    34  // # Analyzer foo
    35  //
    36  // foo: reports diagnostics
    37  //
    38  // This is the doc for analyzer 'foo'.
    39  //
    40  // # Analyzer bar
    41  //
    42  // bar: reports drinking opportunities
    43  //
    44  // This is the doc for analyzer 'bar'.
    45  package blah
    46  
    47  var x = syntax error
    48  `
    49  
    50  	for _, test := range []struct {
    51  		content, name string
    52  		want          string // doc or "error: %w" string
    53  	}{
    54  		{"", "foo",
    55  			"error: empty Go source file"},
    56  		{"//foo", "foo",
    57  			"error: not a Go source file"},
    58  		{"//foo\npackage foo", "foo",
    59  			"error: package doc comment contains no 'Analyzer foo' heading"},
    60  		{multi, "foo",
    61  			"reports diagnostics\n\nThis is the doc for analyzer 'foo'."},
    62  		{multi, "bar",
    63  			"reports drinking opportunities\n\nThis is the doc for analyzer 'bar'."},
    64  		{multi, "food",
    65  			"reports dining opportunities\n\nThis is the doc for analyzer 'food'."},
    66  		{multi, "nope",
    67  			"error: package doc comment contains no 'Analyzer nope' heading"},
    68  		{multi, "nocolon",
    69  			"error: 'Analyzer nocolon' heading not followed by 'nocolon: summary...' line"},
    70  	} {
    71  		got, err := analysisinternal.ExtractDoc(test.content, test.name)
    72  		if err != nil {
    73  			got = "error: " + err.Error()
    74  		}
    75  		if test.want != got {
    76  			t.Errorf("ExtractDoc(%q) returned <<%s>>, want <<%s>>, given input <<%s>>",
    77  				test.name, got, test.want, test.content)
    78  		}
    79  	}
    80  }