Skip to content

Commit 9a0361b

Browse files
committed
tests: update status for go tests
1 parent 5d42a59 commit 9a0361b

5 files changed

Lines changed: 60 additions & 42 deletions

File tree

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ __pycache__
6969
rust-analyzer-x86_64-unknown-linux-gnu
7070

7171
testdata/test
72+
testdata/repos
7273
testdata/jsons
7374

7475
src/lang/testdata
@@ -77,4 +78,4 @@ src/lang/testdata
7778
tools
7879
abcoder
7980

80-
!testdata/asts/*.json
81+
!testdata/asts/*.json

lang/golang/parser/pkg_test.go

Lines changed: 21 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,23 @@ package parser
1616

1717
import (
1818
"encoding/json"
19-
"fmt"
2019
"go/ast"
2120
"go/parser"
2221
"go/token"
2322
"os"
24-
"path/filepath"
2523
"testing"
2624

25+
"github.com/cloudwego/abcoder/lang/testutils"
2726
. "github.com/cloudwego/abcoder/lang/uniast"
2827
)
2928

29+
const localSessURL = "github.com/cloudwego/localsession"
30+
3031
func Test_goParser_ParseRepo(t *testing.T) {
3132
type fields struct {
3233
modName string
3334
homePageDir string
35+
id Identity
3436
}
3537
tests := []struct {
3638
name string
@@ -39,40 +41,31 @@ func Test_goParser_ParseRepo(t *testing.T) {
3941
{
4042
name: "test",
4143
fields: fields{
42-
modName: "github.com/cloudwego/localsession",
43-
homePageDir: "../../../tmp/localsession",
44+
modName: localSessURL,
45+
homePageDir: "localsession",
46+
id: NewIdentity(localSessURL, localSessURL+"/backup", "RecoverCtxOnDemands"),
4447
},
4548
},
4649
}
4750
for _, tt := range tests {
4851
t.Run(tt.name, func(t *testing.T) {
49-
abs, _ := filepath.Abs(tt.fields.homePageDir)
50-
println(abs)
51-
p := newGoParser(tt.fields.modName, tt.fields.homePageDir, Options{
52+
repoDir, err := testutils.GitCloneFast(tt.fields.modName, tt.fields.homePageDir, "main")
53+
if err != nil {
54+
t.Fatalf("failed to clone repo %s", err)
55+
}
56+
p := newGoParser(tt.fields.modName, repoDir, Options{
5257
ReferCodeDepth: 1,
5358
NeedTest: true,
5459
})
5560
r, err := p.ParseRepo()
5661
if err != nil {
57-
t.Fatal(err)
62+
t.Fatalf("failed to parse repo %s", err)
5863
}
5964
r.BuildGraph()
60-
// spew.Dump(p)
61-
pj, err := json.MarshalIndent(r, "", " ")
65+
_, err = p.getNode(tt.fields.id)
6266
if err != nil {
63-
t.Fatal(err)
67+
t.Fatalf("failed to get node %s", err)
6468
}
65-
_ = pj
66-
_ = os.WriteFile("ast.json", pj, 0644)
67-
n, err := p.getNode(NewIdentity("github.com/cloudwego/localsession", "github.com/cloudwego/localsession/backup", "RecoverCtxOnDemands"))
68-
if err != nil {
69-
t.Fatal(err)
70-
}
71-
jf, err := json.MarshalIndent(n, "", " ")
72-
if err != nil {
73-
t.Fatalf("json.Marshal() error = %v", err)
74-
}
75-
os.WriteFile("node.json", jf, 0644)
7669
})
7770
}
7871
}
@@ -93,7 +86,7 @@ func Test_goParser_ParseDirs(t *testing.T) {
9386
{
9487
name: "test",
9588
args: args{
96-
homePageDir: "../../../testdata/golang",
89+
homePageDir: testutils.FirstTest("go"),
9790
modName: "a.b/c",
9891
pkg: "a.b/c/cmd",
9992
opts: Options{
@@ -137,7 +130,6 @@ type Struct struct {
137130
t.Fatal(err)
138131
}
139132
ast.Inspect(node, func(n ast.Node) bool {
140-
fmt.Printf("%#v\n", n)
141133
if sel, ok := n.(*ast.SelectorExpr); ok {
142134
println("selector:", string(GetRawContent(fset, []byte(src), sel, false)))
143135
}
@@ -157,6 +149,10 @@ func Test_goParser_ParseNode(t *testing.T) {
157149
pkgPath string
158150
name string
159151
}
152+
localSessionDir, err := testutils.GitCloneFast(localSessURL, "localsession", "main")
153+
if err != nil {
154+
t.Fatalf("failed to clone repo %s", err)
155+
}
160156
tests := []struct {
161157
name string
162158
fields fields
@@ -167,7 +163,7 @@ func Test_goParser_ParseNode(t *testing.T) {
167163
name: "test",
168164
fields: fields{
169165
modName: "github.com/cloudwego/localsession",
170-
homePageDir: "../../../tmp/localsession",
166+
homePageDir: localSessionDir,
171167
},
172168
args: args{
173169
pkgPath: "github.com/modern-go/gls",

lang/golang/writer/write_test.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,13 @@ import (
2222
"reflect"
2323
"testing"
2424

25+
"github.com/cloudwego/abcoder/lang/testutils"
2526
"github.com/cloudwego/abcoder/lang/uniast"
2627
)
2728

2829
func TestWriter_WriteRepo(t *testing.T) {
29-
repo, err := uniast.LoadRepo("../../../../tmp_compress/localsession.json")
30+
astFile := testutils.GetTestAstFile("localsession")
31+
repo, err := uniast.LoadRepo(astFile)
3032
if err != nil {
3133
t.Fatal(err)
3234
}
@@ -46,17 +48,18 @@ func TestWriter_WriteRepo(t *testing.T) {
4648
name: "test",
4749
fields: fields{
4850
Options: Options{
49-
CompilerPath: "1.18",
51+
CompilerPath: "true", // DO NOT RUN go mod tidy
5052
},
5153
},
5254
args: args{repo: repo},
5355
wantErr: false,
5456
},
5557
}
58+
tmproot := testutils.MakeTmpTestdir(true)
5659
for _, tt := range tests {
5760
t.Run(tt.name, func(t *testing.T) {
5861
w := NewWriter(tt.fields.Options)
59-
if err := w.WriteRepo(tt.args.repo, "../../../../tmp/localsession2"); (err != nil) != tt.wantErr {
62+
if err := w.WriteRepo(tt.args.repo, tmproot); (err != nil) != tt.wantErr {
6063
t.Errorf("Writer.WriteRepo() error = %v, wantErr %v", err, tt.wantErr)
6164
}
6265
})

lang/patch/lib_test.go

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@
1717
package patch
1818

1919
import (
20-
"os"
21-
"os/exec"
2220
"testing"
2321

2422
"github.com/cloudwego/abcoder/lang/testutils"
@@ -36,22 +34,18 @@ func TestPatcher(t *testing.T) {
3634
}
3735

3836
// Load repo from git
39-
tmproot := testutils.MakeTmpTestdir(true)
4037
repoURL := "github.com/cloudwego/localsession"
41-
repoDir := tmproot + "/localsession"
42-
t.Logf("Cloning repo %s to %s...", repoURL, repoDir)
43-
cmd := exec.Command("git", "clone", "--depth", "1", "--branch", "main", "https://"+repoURL, repoDir)
44-
cmd.Stdout = os.Stdout
45-
cmd.Stderr = os.Stderr
46-
if err := cmd.Run(); err != nil {
47-
t.Fatalf("git clone failed: %v", err)
38+
repoDir, err := testutils.GitCloneFast(repoURL, "localsession", "main")
39+
if err != nil {
40+
t.Fatalf("failed to clone repo: %v", err)
4841
}
4942

5043
// Create patcher with options
44+
tmpRoot := testutils.MakeTmpTestdir(true)
5145
patcher := NewPatcher(repo, Options{
52-
RepoDir: repoDir,
53-
OutDir: tmproot + "/localsession2",
54-
DefaultLanuage: uniast.Golang,
46+
RepoDir: repoDir,
47+
OutDir: tmpRoot + "/localsession2",
48+
DefaultLanguage: uniast.Golang,
5549
})
5650

5751
// Create a test patch

lang/testutils/testutils.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"fmt"
1919
"log"
2020
"os"
21+
"os/exec"
2122
"path/filepath"
2223
"runtime"
2324
"sort"
@@ -69,6 +70,29 @@ func MakeTmpTestdir(reset bool) string {
6970
return tmpDir
7071
}
7172

73+
func GitCloneFast(repoURL, dir, branch string) (string, error) {
74+
rootDir := GetTestDataRoot()
75+
repoDir := filepath.Join(rootDir, "repos", dir)
76+
if _, err := os.Stat(repoDir); !os.IsNotExist(err) {
77+
cmd := exec.Command("git", "-C", repoDir, "status")
78+
if err := cmd.Run(); err == nil {
79+
return repoDir, nil
80+
} else {
81+
return "", fmt.Errorf("bad existing repo %s: %w", repoDir, err)
82+
}
83+
}
84+
if err := os.MkdirAll(repoDir, 0755); err != nil {
85+
return "", fmt.Errorf("failed to create repo directory: %w", err)
86+
}
87+
cmd := exec.Command("git", "clone", "--depth", "1", "--branch", branch, "https://"+repoURL, repoDir)
88+
cmd.Stdout = os.Stdout
89+
cmd.Stderr = os.Stderr
90+
if err := cmd.Run(); err != nil {
91+
return "", fmt.Errorf("git clone failed: %w", err)
92+
}
93+
return repoDir, nil
94+
}
95+
7296
func GetTestAstFile(name string) string {
7397
rootDir := GetTestDataRoot()
7498
astFile := filepath.Join(rootDir, "asts", name+".json")

0 commit comments

Comments
 (0)