Skip to content
This repository was archived by the owner on Aug 10, 2022. It is now read-only.

Commit 9207ba0

Browse files
remicalixtehush-hush
authored andcommitted
Unit tests (#11)
Add unit test
1 parent aa98a0f commit 9207ba0

27 files changed

+1183
-32
lines changed

bytes_test.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,11 @@ func TestBytesConcat(t *testing.T) {
5454

5555
bytes1 := PyBytes_FromString(s1)
5656

57-
bytes2 := PyBytes_FromString(s2)
57+
array := PyByteArray_FromStringAndSize(s2)
58+
defer array.DecRef()
59+
60+
bytes2 := PyBytes_FromObject(array)
5861
assert.NotNil(t, bytes2)
59-
defer bytes2.DecRef()
6062

6163
bytes1 = PyBytes_Concat(bytes1, bytes2)
6264
assert.NotNil(t, bytes1)

complex_test.go

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import (
1414
)
1515

1616
func TestComplex(t *testing.T) {
17+
Py_Initialize()
18+
1719
real := 2.
1820
imaginary := 5.
1921

errors_test.go

+255
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,255 @@
1+
package python3
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/assert"
7+
)
8+
9+
func TestErrorSetString(t *testing.T) {
10+
Py_Initialize()
11+
12+
PyErr_SetString(PyExc_BaseException, "test message")
13+
14+
assert.NotNil(t, PyErr_Occurred())
15+
PyErr_Clear()
16+
assert.Nil(t, PyErr_Occurred())
17+
}
18+
19+
func TestErrorSetObject(t *testing.T) {
20+
Py_Initialize()
21+
22+
message := PyUnicode_FromString("test message")
23+
defer message.DecRef()
24+
25+
PyErr_SetObject(PyExc_BaseException, message)
26+
27+
assert.NotNil(t, PyErr_Occurred())
28+
PyErr_Print()
29+
assert.Nil(t, PyErr_Occurred())
30+
}
31+
32+
func TestErrorSetNone(t *testing.T) {
33+
Py_Initialize()
34+
35+
message := PyUnicode_FromString("test message")
36+
defer message.DecRef()
37+
38+
PyErr_SetNone(PyExc_BaseException)
39+
40+
assert.NotNil(t, PyErr_Occurred())
41+
PyErr_Print()
42+
assert.Nil(t, PyErr_Occurred())
43+
}
44+
45+
func TestErrorSetObjectEx(t *testing.T) {
46+
Py_Initialize()
47+
48+
message := PyUnicode_FromString("test message")
49+
defer message.DecRef()
50+
51+
PyErr_SetObject(PyExc_BaseException, message)
52+
53+
assert.NotNil(t, PyErr_Occurred())
54+
PyErr_PrintEx(false)
55+
assert.Nil(t, PyErr_Occurred())
56+
}
57+
58+
func TestErrorWriteUnraisable(t *testing.T) {
59+
Py_Initialize()
60+
61+
message := PyUnicode_FromString("unraisable exception")
62+
defer message.DecRef()
63+
64+
PyErr_WriteUnraisable(message)
65+
66+
assert.Nil(t, PyErr_Occurred())
67+
}
68+
69+
func TestErrorBadArgument(t *testing.T) {
70+
Py_Initialize()
71+
72+
PyErr_BadArgument()
73+
74+
assert.NotNil(t, PyErr_Occurred())
75+
76+
PyErr_Clear()
77+
78+
assert.Nil(t, PyErr_Occurred())
79+
}
80+
81+
func TestErrorNoMemory(t *testing.T) {
82+
Py_Initialize()
83+
84+
PyErr_NoMemory()
85+
86+
assert.NotNil(t, PyErr_Occurred())
87+
PyErr_Clear()
88+
assert.Nil(t, PyErr_Occurred())
89+
}
90+
91+
func TestErrorBadInternalCall(t *testing.T) {
92+
Py_Initialize()
93+
94+
PyErr_BadInternalCall()
95+
96+
assert.NotNil(t, PyErr_Occurred())
97+
PyErr_Clear()
98+
assert.Nil(t, PyErr_Occurred())
99+
}
100+
101+
func TestErrorImportError(t *testing.T) {
102+
Py_Initialize()
103+
104+
message := PyUnicode_FromString("test message")
105+
defer message.DecRef()
106+
107+
PyErr_SetImportError(message, nil, nil)
108+
109+
assert.NotNil(t, PyErr_Occurred())
110+
PyErr_Clear()
111+
assert.Nil(t, PyErr_Occurred())
112+
}
113+
114+
func TestErrorImportErrorSubclass(t *testing.T) {
115+
Py_Initialize()
116+
117+
message := PyUnicode_FromString("test message")
118+
defer message.DecRef()
119+
120+
PyErr_SetImportErrorSubclass(message, nil, nil, Dict)
121+
122+
assert.NotNil(t, PyErr_Occurred())
123+
PyErr_Clear()
124+
assert.Nil(t, PyErr_Occurred())
125+
}
126+
127+
func TestErrorSyntax(t *testing.T) {
128+
Py_Initialize()
129+
130+
PyErr_SetNone(PyExc_SyntaxError)
131+
132+
filename := "test.py"
133+
PyErr_SyntaxLocation(filename, 0)
134+
135+
assert.NotNil(t, PyErr_Occurred())
136+
PyErr_Clear()
137+
assert.Nil(t, PyErr_Occurred())
138+
}
139+
140+
func TestErrorSyntaxEx(t *testing.T) {
141+
Py_Initialize()
142+
143+
PyErr_SetNone(PyExc_SyntaxError)
144+
145+
filename := "test.py"
146+
PyErr_SyntaxLocationEx(filename, 0, 0)
147+
148+
assert.NotNil(t, PyErr_Occurred())
149+
PyErr_Clear()
150+
assert.Nil(t, PyErr_Occurred())
151+
}
152+
153+
func TestErrorSyntaxLocation(t *testing.T) {
154+
Py_Initialize()
155+
156+
PyErr_SetNone(PyExc_SyntaxError)
157+
158+
filename := PyUnicode_FromString("test.py")
159+
defer filename.DecRef()
160+
161+
PyErr_SyntaxLocationObject(filename, 0, 0)
162+
163+
assert.NotNil(t, PyErr_Occurred())
164+
PyErr_Clear()
165+
assert.Nil(t, PyErr_Occurred())
166+
}
167+
168+
func TestErrorExceptionMatches(t *testing.T) {
169+
Py_Initialize()
170+
171+
PyErr_SetNone(PyExc_BufferError)
172+
173+
assert.True(t, PyErr_ExceptionMatches(PyExc_BufferError))
174+
175+
assert.NotNil(t, PyErr_Occurred())
176+
PyErr_Clear()
177+
assert.Nil(t, PyErr_Occurred())
178+
}
179+
180+
func TestErrorGivenExceptionMatches(t *testing.T) {
181+
Py_Initialize()
182+
183+
assert.True(t, PyErr_GivenExceptionMatches(PyExc_BufferError, PyExc_BufferError))
184+
}
185+
186+
func TestErrorFetchRestore(t *testing.T) {
187+
Py_Initialize()
188+
189+
PyErr_SetNone(PyExc_BufferError)
190+
191+
exc, value, traceback := PyErr_Fetch()
192+
assert.Nil(t, PyErr_Occurred())
193+
194+
assert.True(t, PyErr_GivenExceptionMatches(exc, PyExc_BufferError))
195+
assert.Nil(t, value)
196+
assert.Nil(t, traceback)
197+
198+
PyErr_Restore(exc, value, traceback)
199+
200+
assert.NotNil(t, PyErr_Occurred())
201+
PyErr_Clear()
202+
assert.Nil(t, PyErr_Occurred())
203+
}
204+
205+
func TestErrorNormalizeExceptionRestore(t *testing.T) {
206+
Py_Initialize()
207+
208+
PyErr_SetNone(PyExc_BufferError)
209+
210+
exc, value, traceback := PyErr_Fetch()
211+
exc, value, traceback = PyErr_NormalizeException(exc, value, traceback)
212+
assert.Nil(t, PyErr_Occurred())
213+
214+
assert.True(t, PyErr_GivenExceptionMatches(exc, PyExc_BufferError))
215+
assert.Equal(t, 1, value.IsInstance(exc))
216+
assert.Nil(t, traceback)
217+
218+
PyErr_Restore(exc, value, traceback)
219+
220+
assert.NotNil(t, PyErr_Occurred())
221+
PyErr_Clear()
222+
assert.Nil(t, PyErr_Occurred())
223+
}
224+
225+
func TestErrorGetSetExcInfo(t *testing.T) {
226+
Py_Initialize()
227+
228+
PyErr_SetNone(PyExc_BufferError)
229+
230+
exc, value, traceback := PyErr_GetExcInfo()
231+
232+
assert.True(t, PyErr_GivenExceptionMatches(exc, Py_None), PyUnicode_AsUTF8(exc.Repr()))
233+
assert.Nil(t, value)
234+
assert.Nil(t, traceback)
235+
236+
PyErr_SetExcInfo(exc, value, traceback)
237+
238+
PyErr_Clear()
239+
assert.Nil(t, PyErr_Occurred())
240+
}
241+
242+
func TestErrorInterrupt(t *testing.T) {
243+
Py_Initialize()
244+
245+
PyErr_SetInterrupt()
246+
247+
assert.Equal(t, -1, PyErr_CheckSignals())
248+
249+
exc := PyErr_Occurred()
250+
assert.True(t, PyErr_GivenExceptionMatches(exc, PyExc_TypeError))
251+
252+
assert.NotNil(t, PyErr_Occurred())
253+
PyErr_Clear()
254+
assert.Nil(t, PyErr_Occurred())
255+
}

exceptions.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,8 @@ func PyException_GetTraceback(ex *PyObject) *PyObject {
101101
}
102102

103103
//PyException_SetTraceback : https://docs.python.org/3/c-api/exceptions.html#c.PyException_SetTraceback
104-
func PyException_SetTraceback(ex, tb *PyObject) {
105-
C.PyException_SetTraceback(toc(ex), toc(tb))
104+
func PyException_SetTraceback(ex, tb *PyObject) int {
105+
return int(C.PyException_SetTraceback(toc(ex), toc(tb)))
106106
}
107107

108108
//PyException_GetContext : https://docs.python.org/3/c-api/exceptions.html#c.PyException_GetContext

exceptions_test.go

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package python3
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/assert"
7+
)
8+
9+
func TestExceptionNew(t *testing.T) {
10+
Py_Initialize()
11+
12+
exc := PyErr_NewException("test_module.TestException", nil, nil)
13+
assert.NotNil(t, exc)
14+
defer exc.DecRef()
15+
}
16+
17+
func TestExceptionNewDoc(t *testing.T) {
18+
Py_Initialize()
19+
20+
exc := PyErr_NewExceptionWithDoc("test_module.TestException", "docstring", nil, nil)
21+
assert.NotNil(t, exc)
22+
defer exc.DecRef()
23+
}
24+
25+
func TestExceptionContext(t *testing.T) {
26+
Py_Initialize()
27+
28+
exc := PyErr_NewException("test_module.TestException", nil, nil)
29+
assert.NotNil(t, exc)
30+
defer exc.DecRef()
31+
32+
PyException_SetContext(exc, PyExc_BrokenPipeError)
33+
34+
assert.Equal(t, PyExc_BrokenPipeError, PyException_GetContext(exc))
35+
}

float_test.go

+8
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,12 @@ func TestPyFloatMinMax(t *testing.T) {
4949
assert.Equal(t, math.MaxFloat64, PyFloat_GetMax())
5050

5151
assert.Equal(t, 2.2250738585072014e-308, PyFloat_GetMin())
52+
53+
PyFloat_ClearFreeList()
54+
}
55+
56+
func TestPyFloatInfo(t *testing.T) {
57+
Py_Initialize()
58+
59+
assert.NotNil(t, PyFloat_GetInfo())
5260
}

high_level_layer_test.go

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package python3
2+
3+
import (
4+
"io/ioutil"
5+
"testing"
6+
7+
"github.com/stretchr/testify/assert"
8+
)
9+
10+
func TestRunFile(t *testing.T) {
11+
Py_Initialize()
12+
13+
pyErr, err := PyRun_AnyFile("tests/test.py")
14+
assert.Zero(t, pyErr)
15+
assert.Nil(t, err)
16+
17+
stdout := PySys_GetObject("stdout")
18+
19+
result := stdout.CallMethodArgs("getvalue")
20+
defer result.DecRef()
21+
22+
assert.Equal(t, "hello world\n", PyUnicode_AsUTF8(result))
23+
}
24+
25+
func TestRunString(t *testing.T) {
26+
Py_Initialize()
27+
28+
pythonCode, err := ioutil.ReadFile("tests/test.py")
29+
assert.Nil(t, err)
30+
31+
assert.Zero(t, PyRun_SimpleString(string(pythonCode)))
32+
33+
stdout := PySys_GetObject("stdout")
34+
35+
result := stdout.CallMethodArgs("getvalue")
36+
defer result.DecRef()
37+
38+
assert.Equal(t, "hello world\n", PyUnicode_AsUTF8(result))
39+
}
40+
41+
func TestPyMain(t *testing.T) {
42+
Py_Initialize()
43+
44+
pyErr, err := Py_Main([]string{"tests/test.py"})
45+
assert.Zero(t, pyErr)
46+
assert.Nil(t, err)
47+
}

0 commit comments

Comments
 (0)