TestFromTestdata: fncall

This commit is contained in:
xushiwei
2024-04-20 23:15:10 +08:00
parent cb148c1a3e
commit 24690ad6b2
4 changed files with 151 additions and 17 deletions

View File

@@ -22,7 +22,10 @@ import (
"go/parser"
"go/token"
"go/types"
"log"
"os"
"path"
"strings"
"testing"
llssa "github.com/goplus/llgo/ssa"
@@ -30,14 +33,55 @@ import (
"golang.org/x/tools/go/ssa/ssautil"
)
func testCompile(t *testing.T, src, expected string) {
func TestFromTestdata(t *testing.T) {
testFromDir(t, "", "./_testdata")
}
func testFromDir(t *testing.T, sel, relDir string) {
dir, err := os.Getwd()
if err != nil {
t.Fatal("Getwd failed:", err)
}
dir = path.Join(dir, relDir)
fis, err := os.ReadDir(dir)
if err != nil {
t.Fatal("ReadDir failed:", err)
}
for _, fi := range fis {
name := fi.Name()
if !fi.IsDir() || strings.HasPrefix(name, "_") {
continue
}
t.Run(name, func(t *testing.T) {
testFrom(t, dir+"/"+name, sel)
})
}
}
func testFrom(t *testing.T, pkgDir, sel string) {
if sel != "" && !strings.Contains(pkgDir, sel) {
return
}
log.Println("Parsing", pkgDir)
in := pkgDir + "/in.go"
out := pkgDir + "/out.ll"
expected, err := os.ReadFile(out)
if err != nil {
t.Fatal("ReadFile failed:", err)
}
testCompileEx(t, nil, in, string(expected))
}
func testCompileEx(t *testing.T, src any, fname, expected string) {
t.Helper()
fset := token.NewFileSet()
f, err := parser.ParseFile(fset, "foo.go", src, parser.ParseComments)
f, err := parser.ParseFile(fset, fname, src, parser.ParseComments)
if err != nil {
t.Fatal("ParseFile failed:", err)
}
files := []*ast.File{f}
pkg := types.NewPackage("foo", "foo")
name := f.Name.Name
pkg := types.NewPackage(name, name)
foo, _, err := ssautil.BuildPackage(
&types.Config{Importer: importer.Default()}, fset, pkg, files, ssa.SanityCheckFunctions)
if err != nil {
@@ -59,6 +103,11 @@ func testCompile(t *testing.T, src, expected string) {
}
}
func testCompile(t *testing.T, src, expected string) {
t.Helper()
testCompileEx(t, src, "foo.go", expected)
}
func TestVar(t *testing.T) {
testCompile(t, `package foo