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 }