github.com/anthonyme00/gomarkdoc@v1.0.0/renderer_test.go (about) 1 package gomarkdoc_test 2 3 import ( 4 "errors" 5 "go/build" 6 "os" 7 "strings" 8 "testing" 9 10 "github.com/anthonyme00/gomarkdoc" 11 "github.com/anthonyme00/gomarkdoc/format/formatcore" 12 "github.com/anthonyme00/gomarkdoc/lang" 13 "github.com/anthonyme00/gomarkdoc/logger" 14 "github.com/matryer/is" 15 ) 16 17 func TestWithTemplateFunc(t *testing.T) { 18 is := is.New(t) 19 20 fn, err := loadFunc("./testData/docs", "Func") 21 is.NoErr(err) 22 23 r, err := gomarkdoc.NewRenderer() 24 is.NoErr(err) 25 26 r2, err := gomarkdoc.NewRenderer( 27 gomarkdoc.WithTemplateFunc("escape", func(text string) string { 28 return formatcore.Escape(strings.ToUpper(text)) 29 }), 30 ) 31 is.NoErr(err) 32 33 f, err := r.Func(fn) 34 is.NoErr(err) 35 36 f2, err := r2.Func(fn) 37 is.NoErr(err) 38 39 is.True(strings.Contains(f, "Func is present in this file.")) 40 is.True(strings.Contains(f2, "FUNC IS PRESENT IN THIS FILE.")) 41 } 42 43 func getBuildPackage(path string) (*build.Package, error) { 44 wd, err := os.Getwd() 45 if err != nil { 46 return nil, err 47 } 48 49 return build.Import(path, wd, build.ImportComment) 50 } 51 52 func loadFunc(dir, name string) (*lang.Func, error) { 53 buildPkg, err := getBuildPackage(dir) 54 if err != nil { 55 return nil, err 56 } 57 58 log := logger.New(logger.ErrorLevel) 59 pkg, err := lang.NewPackageFromBuild(log, buildPkg) 60 if err != nil { 61 return nil, err 62 } 63 64 for _, f := range pkg.Funcs() { 65 if f.Name() == name { 66 return f, nil 67 } 68 } 69 70 for _, t := range pkg.Types() { 71 for _, f := range t.Funcs() { 72 if f.Name() == name { 73 return f, nil 74 } 75 } 76 77 for _, f := range t.Methods() { 78 if f.Name() == name { 79 return f, nil 80 } 81 } 82 } 83 84 return nil, errors.New("func not found") 85 }