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  }