github.com/anthonyme00/gomarkdoc@v1.0.0/lang/value_test.go (about)

     1  package lang_test
     2  
     3  import (
     4  	"errors"
     5  	"strings"
     6  	"testing"
     7  
     8  	"github.com/anthonyme00/gomarkdoc/lang"
     9  	"github.com/anthonyme00/gomarkdoc/logger"
    10  	"github.com/matryer/is"
    11  )
    12  
    13  func TestValue_Level(t *testing.T) {
    14  	is := is.New(t)
    15  
    16  	val, err := loadValue("../testData/lang/function", "Variable")
    17  	is.NoErr(err)
    18  
    19  	is.Equal(val.Level(), 2)
    20  }
    21  
    22  func TestValue_Summary(t *testing.T) {
    23  	is := is.New(t)
    24  
    25  	val, err := loadValue("../testData/lang/function", "Variable")
    26  	is.NoErr(err)
    27  
    28  	is.Equal(val.Summary(), "Variable is a package-level variable.")
    29  }
    30  
    31  func TestValue_Decl(t *testing.T) {
    32  	is := is.New(t)
    33  
    34  	val, err := loadValue("../testData/lang/function", "Variable")
    35  	is.NoErr(err)
    36  
    37  	decl, err := val.Decl()
    38  	is.NoErr(err)
    39  
    40  	is.Equal(decl, "var Variable = 5")
    41  }
    42  
    43  func TestValue_Location(t *testing.T) {
    44  	is := is.New(t)
    45  
    46  	val, err := loadValue("../testData/lang/function", "Variable")
    47  	is.NoErr(err)
    48  
    49  	loc := val.Location()
    50  	is.Equal(loc.Start.Line, 4)
    51  	is.Equal(loc.Start.Col, 1)
    52  	is.Equal(loc.End.Line, 4)
    53  	is.Equal(loc.End.Col, 17)
    54  	is.True(strings.HasSuffix(loc.Filepath, "value.go"))
    55  }
    56  
    57  func loadValue(dir, name string) (*lang.Value, error) {
    58  	buildPkg, err := getBuildPackage(dir)
    59  	if err != nil {
    60  		return nil, err
    61  	}
    62  
    63  	log := logger.New(logger.ErrorLevel)
    64  	pkg, err := lang.NewPackageFromBuild(log, buildPkg)
    65  	if err != nil {
    66  		return nil, err
    67  	}
    68  
    69  	for _, v := range pkg.Vars() {
    70  		d, err := v.Decl()
    71  		if err == nil && strings.Contains(d, name) {
    72  			return v, nil
    73  		}
    74  	}
    75  
    76  	for _, v := range pkg.Consts() {
    77  		d, err := v.Decl()
    78  		if err == nil && strings.Contains(d, name) {
    79  			return v, nil
    80  		}
    81  	}
    82  
    83  	return nil, errors.New("value not found")
    84  }