Some checks failed
Docs Deploy / build_and_deploy (push) Has been cancelled
Generate Docs / cli (push) Has been cancelled
Generate Config Doc / cli (push) Has been cancelled
Go formatting / go-formatting (push) Has been cancelled
Check links / markdown-link-check (push) Has been cancelled
Integration / pre-test (push) Has been cancelled
Integration / test on (push) Has been cancelled
Integration / status (push) Has been cancelled
Lint / Lint Go code (push) Has been cancelled
Test / test (ubuntu-latest) (push) Has been cancelled
105 lines
2.2 KiB
Go
105 lines
2.2 KiB
Go
package xast_test
|
|
|
|
import (
|
|
"go/ast"
|
|
"go/parser"
|
|
"go/token"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"git.cw.tr/mukan-network/mukan-ignite/ignite/pkg/errors"
|
|
"git.cw.tr/mukan-network/mukan-ignite/ignite/pkg/xast"
|
|
)
|
|
|
|
func TestInspect(t *testing.T) {
|
|
fset := token.NewFileSet()
|
|
n, err := parser.ParseFile(fset, "testdata/inspect/test.go", nil, 0)
|
|
require.NoError(t, err)
|
|
var calls int
|
|
tests := []struct {
|
|
name string
|
|
f func(n ast.Node) error
|
|
expectedError string
|
|
expectedCalls int
|
|
}{
|
|
{
|
|
name: "random error",
|
|
f: func(ast.Node) error {
|
|
return errors.New("oups")
|
|
},
|
|
expectedError: "oups",
|
|
},
|
|
{
|
|
name: "stop error",
|
|
f: func(ast.Node) error {
|
|
calls++
|
|
return xast.ErrStop
|
|
},
|
|
expectedCalls: 1,
|
|
},
|
|
{
|
|
name: "no error",
|
|
f: func(ast.Node) error {
|
|
calls++
|
|
return nil
|
|
},
|
|
expectedCalls: 20,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
calls = 0
|
|
err = xast.Inspect(n, tt.f)
|
|
|
|
if tt.expectedError != "" {
|
|
require.EqualError(t, err, tt.expectedError)
|
|
return
|
|
}
|
|
require.NoError(t, err)
|
|
require.Equal(t, tt.expectedCalls, calls)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestParseDir(t *testing.T) {
|
|
pkg, fileSet, err := xast.ParseDir("testdata/parseDir")
|
|
|
|
require.NoError(t, err)
|
|
require.NotNil(t, fileSet)
|
|
require.Equal(t, "file", pkg.Name)
|
|
}
|
|
|
|
func TestParseFile(t *testing.T) {
|
|
dir := t.TempDir()
|
|
|
|
t.Run("parse valid file", func(t *testing.T) {
|
|
filePath := filepath.Join(dir, "valid.go")
|
|
content := `package sample
|
|
|
|
func hello() {}
|
|
`
|
|
require.NoError(t, os.WriteFile(filePath, []byte(content), 0o644))
|
|
|
|
file, fileSet, err := xast.ParseFile(filePath)
|
|
require.NoError(t, err)
|
|
require.NotNil(t, fileSet)
|
|
require.Equal(t, "sample", file.Name.Name)
|
|
require.Len(t, file.Decls, 1)
|
|
})
|
|
|
|
t.Run("invalid file path", func(t *testing.T) {
|
|
_, _, err := xast.ParseFile(filepath.Join(dir, "missing.go"))
|
|
require.Error(t, err)
|
|
})
|
|
|
|
t.Run("invalid go file", func(t *testing.T) {
|
|
filePath := filepath.Join(dir, "invalid.go")
|
|
require.NoError(t, os.WriteFile(filePath, []byte("package sample\nfunc"), 0o644))
|
|
|
|
_, _, err := xast.ParseFile(filePath)
|
|
require.Error(t, err)
|
|
})
|
|
}
|