github.com/huner2/gomarkdoc@v0.3.6/lang/package_test.go (about)

     1  package lang_test
     2  
     3  import (
     4  	"go/build"
     5  	"os"
     6  	"path/filepath"
     7  	"strings"
     8  	"testing"
     9  
    10  	"github.com/matryer/is"
    11  	"github.com/huner2/gomarkdoc/lang"
    12  	"github.com/huner2/gomarkdoc/logger"
    13  )
    14  
    15  func TestPackage_Consts(t *testing.T) {
    16  	is := is.New(t)
    17  
    18  	pkg, err := loadPackage("../testData/lang/function")
    19  	is.NoErr(err)
    20  
    21  	consts := pkg.Consts()
    22  	is.Equal(len(consts), 1)
    23  
    24  	decl, err := consts[0].Decl()
    25  	is.NoErr(err)
    26  	is.Equal(decl, `const (
    27      ConstA = "string"
    28      ConstB = true
    29  )`)
    30  }
    31  
    32  func TestPackage_Vars(t *testing.T) {
    33  	is := is.New(t)
    34  
    35  	pkg, err := loadPackage("../testData/lang/function")
    36  	is.NoErr(err)
    37  
    38  	vars := pkg.Vars()
    39  	is.Equal(len(vars), 1)
    40  
    41  	decl, err := vars[0].Decl()
    42  	is.NoErr(err)
    43  	is.Equal(decl, `var Variable = 5`)
    44  }
    45  
    46  func TestPackage_dotImport(t *testing.T) {
    47  	is := is.New(t)
    48  
    49  	err := os.Chdir("../testData/lang/function")
    50  	is.NoErr(err)
    51  
    52  	defer func() {
    53  		_ = os.Chdir("../../../lang")
    54  	}()
    55  
    56  	pkg, err := loadPackage(".")
    57  	is.NoErr(err)
    58  
    59  	is.Equal(pkg.Import(), `import "github.com/huner2/gomarkdoc/testData/lang/function"`)
    60  }
    61  
    62  func TestPackage_strings(t *testing.T) {
    63  	is := is.New(t)
    64  
    65  	buildPkg, err := getBuildPackage("strings")
    66  	is.NoErr(err)
    67  
    68  	log := logger.New(logger.ErrorLevel)
    69  	pkg, err := lang.NewPackageFromBuild(log, buildPkg)
    70  	is.NoErr(err)
    71  
    72  	is.Equal(pkg.Level(), 1) // level should be root
    73  	is.True(strings.HasSuffix(pkg.Dir(), filepath.FromSlash("/strings")))
    74  	is.Equal(pkg.Dirname(), "strings")
    75  	is.Equal(pkg.Name(), "strings")
    76  	is.Equal(pkg.Import(), `import "strings"`)
    77  	is.Equal(pkg.Summary(), "Package strings implements simple functions to manipulate UTF-8 encoded strings.")
    78  	is.Equal(len(pkg.Consts()), 0)   // strings should have no constants
    79  	is.Equal(len(pkg.Vars()), 0)     // strings should have no vars
    80  	is.True(len(pkg.Funcs()) > 0)    // strings should have top-level functions
    81  	is.True(len(pkg.Types()) > 0)    // strings should have top-level types
    82  	is.Equal(len(pkg.Examples()), 0) // strings should have no top-level examples
    83  }
    84  
    85  func TestPackage_textScanner(t *testing.T) {
    86  	is := is.New(t)
    87  
    88  	buildPkg, err := getBuildPackage("text/scanner")
    89  	is.NoErr(err)
    90  
    91  	log := logger.New(logger.ErrorLevel)
    92  	pkg, err := lang.NewPackageFromBuild(log, buildPkg)
    93  	is.NoErr(err)
    94  
    95  	is.Equal(pkg.Level(), 1) // level should be root
    96  	is.True(strings.HasSuffix(pkg.Dir(), filepath.FromSlash("/text/scanner")))
    97  	is.Equal(pkg.Dirname(), "scanner")
    98  	is.Equal(pkg.Name(), "scanner")
    99  	is.Equal(pkg.Import(), `import "text/scanner"`)
   100  	is.Equal(pkg.Summary(), "Package scanner provides a scanner and tokenizer for UTF-8-encoded text.")
   101  	is.True(len(pkg.Consts()) > 0)   // text/scanner should have constants
   102  	is.Equal(len(pkg.Vars()), 0)     // text/scanner should have no vars
   103  	is.True(len(pkg.Funcs()) > 0)    // text/scanner should have top-level functions
   104  	is.True(len(pkg.Types()) > 0)    // text/scanner should have top-level types
   105  	is.True(len(pkg.Examples()) > 0) // text/scanner should have top-level examples
   106  }
   107  
   108  func TestPackage_ioIoutil(t *testing.T) {
   109  	is := is.New(t)
   110  
   111  	buildPkg, err := getBuildPackage("io/ioutil")
   112  	is.NoErr(err)
   113  
   114  	log := logger.New(logger.ErrorLevel)
   115  	pkg, err := lang.NewPackageFromBuild(log, buildPkg)
   116  	is.NoErr(err)
   117  
   118  	is.Equal(pkg.Level(), 1) // level should be root
   119  	is.True(strings.HasSuffix(pkg.Dir(), filepath.FromSlash("/io/ioutil")))
   120  	is.Equal(pkg.Dirname(), "ioutil")
   121  	is.Equal(pkg.Name(), "ioutil")
   122  	is.Equal(pkg.Import(), `import "io/ioutil"`)
   123  	is.Equal(pkg.Summary(), "Package ioutil implements some I/O utility functions.")
   124  	is.Equal(len(pkg.Consts()), 0)   // io/ioutil should have no constants
   125  	is.True(len(pkg.Vars()) > 0)     // io/ioutil should have vars
   126  	is.True(len(pkg.Funcs()) > 0)    // io/ioutil should have top-level functions
   127  	is.Equal(len(pkg.Types()), 0)    // io/ioutil should have no top-level types
   128  	is.Equal(len(pkg.Examples()), 0) // io/ioutil should have no top-level examples
   129  }
   130  
   131  func TestPackage_encoding(t *testing.T) {
   132  	is := is.New(t)
   133  
   134  	buildPkg, err := getBuildPackage("encoding")
   135  	is.NoErr(err)
   136  
   137  	log := logger.New(logger.ErrorLevel)
   138  	pkg, err := lang.NewPackageFromBuild(log, buildPkg)
   139  	is.NoErr(err)
   140  
   141  	is.Equal(pkg.Level(), 1) // level should be root
   142  	is.True(strings.HasSuffix(pkg.Dir(), filepath.FromSlash("/encoding")))
   143  	is.Equal(pkg.Dirname(), "encoding")
   144  	is.Equal(pkg.Name(), "encoding")
   145  	is.Equal(pkg.Import(), `import "encoding"`)
   146  	is.Equal(pkg.Summary(), "Package encoding defines interfaces shared by other packages that convert data to and from byte-level and textual representations.")
   147  	is.Equal(len(pkg.Consts()), 0)   // encoding should have no constants
   148  	is.Equal(len(pkg.Vars()), 0)     // encoding should have no vars
   149  	is.Equal(len(pkg.Funcs()), 0)    // encoding should have no top-level functions
   150  	is.True(len(pkg.Types()) > 0)    // encoding should have top-level types
   151  	is.Equal(len(pkg.Examples()), 0) // encoding should have no top-level examples
   152  }
   153  
   154  func getBuildPackage(path string) (*build.Package, error) {
   155  	wd, err := os.Getwd()
   156  	if err != nil {
   157  		return nil, err
   158  	}
   159  
   160  	return build.Import(path, wd, build.ImportComment)
   161  }
   162  
   163  func loadPackage(dir string) (*lang.Package, error) {
   164  	buildPkg, err := getBuildPackage(dir)
   165  	if err != nil {
   166  		return nil, err
   167  	}
   168  
   169  	log := logger.New(logger.ErrorLevel)
   170  	pkg, err := lang.NewPackageFromBuild(log, buildPkg)
   171  	if err != nil {
   172  		return nil, err
   173  	}
   174  
   175  	return pkg, nil
   176  }