github.com/johnnyeven/libtools@v0.0.0-20191126065708-61829c1adf46/codegen/loaderx/testify.go (about)

     1  package loaderx
     2  
     3  import (
     4  	"fmt"
     5  	"go/parser"
     6  	"os"
     7  	"path/filepath"
     8  	"strings"
     9  
    10  	"github.com/google/uuid"
    11  	"golang.org/x/tools/go/loader"
    12  
    13  	"github.com/johnnyeven/libtools/codegen"
    14  )
    15  
    16  func replaceTagPlaceholder(s string) string {
    17  	return strings.Replace(s, "^^", "`", -1)
    18  }
    19  
    20  func NewTestProgram(content string) (pkgImportPath string, program *loader.Program) {
    21  	ldr := loader.Config{
    22  		ParserMode: parser.ParseComments,
    23  	}
    24  
    25  	cwd, _ := os.Getwd()
    26  	filename := fmt.Sprintf("%s/%s/main.go", cwd, uuid.New().String())
    27  	defer codegen.CreateTempFile(filename, replaceTagPlaceholder(content))()
    28  
    29  	pkgImportPath = codegen.GetPackageImportPath(filepath.Dir(filename))
    30  	ldr.Import(pkgImportPath)
    31  
    32  	p, err := ldr.Load()
    33  	if err != nil {
    34  		panic(err)
    35  	}
    36  
    37  	return pkgImportPath, p
    38  }