1
1
package python
2
2
3
3
import (
4
+ "bytes"
5
+ "io/ioutil"
6
+ "os"
4
7
"os/exec"
8
+ "path/filepath"
9
+ "reflect"
5
10
"testing"
6
11
)
7
12
@@ -13,4 +18,94 @@ func TestGoPython(t *testing.T) {
13
18
}
14
19
}
15
20
21
+ type pkg struct {
22
+ path string
23
+ want []byte
24
+ }
25
+
26
+ func testPkg (t * testing.T , table pkg ) {
27
+ workdir , err := ioutil .TempDir ("" , "go-python-" )
28
+ if err != nil {
29
+ t .Fatalf ("[%s]: could not create workdir: %v\n " , table .path , err )
30
+ }
31
+ err = os .MkdirAll (workdir , 0644 )
32
+ if err != nil {
33
+ t .Fatalf ("[%s]: could not create workdir: %v\n " , table .path , err )
34
+ }
35
+ defer os .RemoveAll (workdir )
36
+
37
+ pypath := "." + string (os .PathListSeparator ) + os .Getenv ("PYTHONPATH" )
38
+ os .Setenv ("PYTHONPATH" , pypath )
39
+
40
+ buf := new (bytes.Buffer )
41
+ cmd := exec .Command ("go" , "run" , "main.go" )
42
+ cmd .Stdin = os .Stdin
43
+ cmd .Stdout = buf
44
+ cmd .Stderr = buf
45
+ cmd .Dir = table .path
46
+ err = cmd .Run ()
47
+ if err != nil {
48
+ t .Fatalf (
49
+ "[%s]: error running go-python test: %v\n %v\n " ,
50
+ table .path ,
51
+ err ,
52
+ string (buf .Bytes ()),
53
+ )
54
+ }
55
+
56
+ if ! reflect .DeepEqual (string (buf .Bytes ()), string (table .want )) {
57
+ diffTxt := ""
58
+ diffBin , diffErr := exec .LookPath ("diff" )
59
+ if diffErr == nil {
60
+ wantFile , wantErr := os .Create (filepath .Join (workdir , "want.txt" ))
61
+ if wantErr == nil {
62
+ wantFile .Write (table .want )
63
+ wantFile .Close ()
64
+ }
65
+ gotFile , gotErr := os .Create (filepath .Join (workdir , "got.txt" ))
66
+ if gotErr == nil {
67
+ gotFile .Write (buf .Bytes ())
68
+ gotFile .Close ()
69
+ }
70
+ if gotErr == nil && wantErr == nil {
71
+ cmd = exec .Command (diffBin , "-urN" ,
72
+ wantFile .Name (),
73
+ gotFile .Name (),
74
+ )
75
+ diff , _ := cmd .CombinedOutput ()
76
+ diffTxt = string (diff ) + "\n "
77
+ }
78
+ }
79
+
80
+ t .Fatalf ("[%s]: error running go-python test:\n want:\n %s\n \n got:\n %s\n %s" ,
81
+ table .path ,
82
+ string (table .want ), string (buf .Bytes ()),
83
+ diffTxt ,
84
+ )
85
+ }
86
+
87
+ }
88
+
89
+ func TestKwArgs (t * testing.T ) {
90
+ t .Parallel ()
91
+ testPkg (t , pkg {
92
+ path : "tests/kw-args" ,
93
+ want : []byte (`importing kwargs...
94
+ args=() kwds={}
95
+ args=() kwds={'a': 3}
96
+ ` ),
97
+ })
98
+ }
99
+
100
+ func TestCPickle (t * testing.T ) {
101
+ t .Parallel ()
102
+ testPkg (t , pkg {
103
+ path : "tests/cpickle" ,
104
+ want : []byte (`hello [ foo ]
105
+ cPickle.dumps(foo) = "S'foo'\np1\n."
106
+ cPickle.loads("S'foo'\np1\n.") = "foo"
107
+ ` ),
108
+ })
109
+ }
110
+
16
111
// EOF
0 commit comments