github.com/AndrienkoAleksandr/go@v0.0.19/src/go/doc/comment_test.go (about) 1 // Copyright 2022 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 doc 6 7 import ( 8 "bytes" 9 "go/parser" 10 "go/token" 11 "internal/diff" 12 "testing" 13 ) 14 15 func TestComment(t *testing.T) { 16 fset := token.NewFileSet() 17 pkgs, err := parser.ParseDir(fset, "testdata/pkgdoc", nil, parser.ParseComments) 18 if err != nil { 19 t.Fatal(err) 20 } 21 if pkgs["pkgdoc"] == nil { 22 t.Fatal("missing package pkgdoc") 23 } 24 pkg := New(pkgs["pkgdoc"], "testdata/pkgdoc", 0) 25 26 var ( 27 input = "[T] and [U] are types, and [T.M] is a method, but [V] is a broken link. [rand.Int] and [crand.Reader] are things. [G.M1] and [G.M2] are generic methods.\n" 28 wantHTML = `<p><a href="#T">T</a> and <a href="#U">U</a> are types, and <a href="#T.M">T.M</a> is a method, but [V] is a broken link. <a href="/math/rand#Int">rand.Int</a> and <a href="/crypto/rand#Reader">crand.Reader</a> are things. <a href="#G.M1">G.M1</a> and <a href="#G.M2">G.M2</a> are generic methods.` + "\n" 29 wantOldHTML = "<p>[T] and [U] are <i>types</i>, and [T.M] is a method, but [V] is a broken link. [rand.Int] and [crand.Reader] are things. [G.M1] and [G.M2] are generic methods.\n" 30 wantMarkdown = "[T](#T) and [U](#U) are types, and [T.M](#T.M) is a method, but \\[V] is a broken link. [rand.Int](/math/rand#Int) and [crand.Reader](/crypto/rand#Reader) are things. [G.M1](#G.M1) and [G.M2](#G.M2) are generic methods.\n" 31 wantText = "T and U are types, and T.M is a method, but [V] is a broken link. rand.Int and\ncrand.Reader are things. G.M1 and G.M2 are generic methods.\n" 32 wantOldText = "[T] and [U] are types, and [T.M] is a method, but [V] is a broken link.\n[rand.Int] and [crand.Reader] are things. [G.M1] and [G.M2] are generic methods.\n" 33 wantSynopsis = "T and U are types, and T.M is a method, but [V] is a broken link." 34 wantOldSynopsis = "[T] and [U] are types, and [T.M] is a method, but [V] is a broken link." 35 ) 36 37 if b := pkg.HTML(input); string(b) != wantHTML { 38 t.Errorf("%s", diff.Diff("pkg.HTML", b, "want", []byte(wantHTML))) 39 } 40 if b := pkg.Markdown(input); string(b) != wantMarkdown { 41 t.Errorf("%s", diff.Diff("pkg.Markdown", b, "want", []byte(wantMarkdown))) 42 } 43 if b := pkg.Text(input); string(b) != wantText { 44 t.Errorf("%s", diff.Diff("pkg.Text", b, "want", []byte(wantText))) 45 } 46 if b := pkg.Synopsis(input); b != wantSynopsis { 47 t.Errorf("%s", diff.Diff("pkg.Synopsis", []byte(b), "want", []byte(wantText))) 48 } 49 50 var buf bytes.Buffer 51 52 buf.Reset() 53 ToHTML(&buf, input, map[string]string{"types": ""}) 54 if b := buf.Bytes(); string(b) != wantOldHTML { 55 t.Errorf("%s", diff.Diff("ToHTML", b, "want", []byte(wantOldHTML))) 56 } 57 58 buf.Reset() 59 ToText(&buf, input, "", "\t", 80) 60 if b := buf.Bytes(); string(b) != wantOldText { 61 t.Errorf("%s", diff.Diff("ToText", b, "want", []byte(wantOldText))) 62 } 63 64 if b := Synopsis(input); b != wantOldSynopsis { 65 t.Errorf("%s", diff.Diff("Synopsis", []byte(b), "want", []byte(wantOldText))) 66 } 67 }