Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Labels
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
nexedi
cython
Commits
83940073
Commit
83940073
authored
Dec 09, 2010
by
Mark Florisson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Drop Python 2.5 support + unicode UCS4 builds support + add more tests
parent
01fb1ac9
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
117 additions
and
0 deletions
+117
-0
Cython/Debugger/Tests/test_libpython_in_gdb.py
Cython/Debugger/Tests/test_libpython_in_gdb.py
+117
-0
No files found.
Cython/Debugger/Tests/test_libpython_in_gdb.py
0 → 100644
View file @
83940073
# -*- coding: UTF-8 -*-
"""
Test libpython.py. This is already partly tested by test_libcython_in_gdb and
Lib/test/test_gdb.py in the Python source. These tests are run in gdb and
called from test_libcython_in_gdb.main()
"""
import
os
import
sys
import
gdb
from
Cython.Debugger
import
libcython
from
Cython.Debugger
import
libpython
import
test_libcython_in_gdb
from
test_libcython_in_gdb
import
_debug
,
inferior_python_version
class
TestPrettyPrinters
(
test_libcython_in_gdb
.
DebugTestCase
):
"""
Test whether types of Python objects are correctly inferred and that
the right libpython.PySomeTypeObjectPtr classes are instantiated.
Also test whether values are appropriately formatted (don't be too
laborious as Lib/test/test_gdb.py already covers this extensively).
Don't take care of decreffing newly allocated objects as a new
interpreter is started for every test anyway.
"""
def
setUp
(
self
):
super
(
TestPrettyPrinters
,
self
).
setUp
()
self
.
break_and_run
(
'b = c = d = 0'
)
def
get_pyobject
(
self
,
code
):
value
=
gdb
.
parse_and_eval
(
code
)
assert
libpython
.
pointervalue
(
value
)
!=
0
return
value
def
pyobject_fromcode
(
self
,
code
,
gdbvar
=
None
):
if
gdbvar
is
not
None
:
d
=
{
'varname'
:
gdbvar
,
'code'
:
code
}
gdb
.
execute
(
'set $%(varname)s = %(code)s'
%
d
)
code
=
'$'
+
gdbvar
return
libpython
.
PyObjectPtr
.
from_pyobject_ptr
(
self
.
get_pyobject
(
code
))
def
get_repr
(
self
,
pyobject
):
return
pyobject
.
get_truncated_repr
(
libpython
.
MAX_OUTPUT_LEN
)
def
alloc_bytestring
(
self
,
string
,
gdbvar
=
None
):
if
inferior_python_version
<
(
3
,
0
):
funcname
=
'PyString_FromString'
else
:
funcname
=
'PyBytes_FromString'
assert
'"'
not
in
string
# ensure double quotes
code
=
'(PyObject *) %s("%s")'
%
(
funcname
,
string
)
return
self
.
pyobject_fromcode
(
code
,
gdbvar
=
gdbvar
)
def
alloc_unicodestring
(
self
,
string
,
gdbvar
=
None
):
self
.
alloc_bytestring
(
string
.
encode
(
'UTF-8'
),
gdbvar
=
'_temp'
)
postfix
=
libpython
.
get_inferior_unicode_postfix
()
funcname
=
'PyUnicode%s_FromEncodedObject'
%
(
postfix
,)
return
self
.
pyobject_fromcode
(
'(PyObject *) %s($_temp, "UTF-8", "strict")'
%
funcname
,
gdbvar
=
gdbvar
)
def
test_bytestring
(
self
):
bytestring
=
self
.
alloc_bytestring
(
"spam"
)
if
inferior_python_version
<
(
3
,
0
):
bytestring_class
=
libpython
.
PyStringObjectPtr
expected
=
repr
(
"spam"
)
else
:
bytestring_class
=
libpython
.
PyBytesObjectPtr
expected
=
"b'spam'"
self
.
assertEqual
(
type
(
bytestring
),
bytestring_class
)
self
.
assertEqual
(
self
.
get_repr
(
bytestring
),
expected
)
def
test_unicode
(
self
):
unicode_string
=
self
.
alloc_unicodestring
(
u"spam ἄλφα"
)
expected
=
"'spam ἄλφα'"
if
inferior_python_version
<
(
3
,
0
):
expected
=
'u'
+
expected
self
.
assertEqual
(
type
(
unicode_string
),
libpython
.
PyUnicodeObjectPtr
)
self
.
assertEqual
(
self
.
get_repr
(
unicode_string
),
expected
)
def
test_int
(
self
):
if
inferior_python_version
<
(
3
,
0
):
intval
=
self
.
pyobject_fromcode
(
'PyInt_FromLong(100)'
)
self
.
assertEqual
(
type
(
intval
),
libpython
.
PyIntObjectPtr
)
self
.
assertEqual
(
self
.
get_repr
(
intval
),
'100'
)
def
test_long
(
self
):
longval
=
self
.
pyobject_fromcode
(
'PyLong_FromLong(200)'
,
gdbvar
=
'longval'
)
assert
gdb
.
parse_and_eval
(
'$longval->ob_type == &PyLong_Type'
)
self
.
assertEqual
(
type
(
longval
),
libpython
.
PyLongObjectPtr
)
self
.
assertEqual
(
self
.
get_repr
(
longval
),
'200'
)
def
test_frame_type
(
self
):
frame
=
self
.
pyobject_fromcode
(
'PyEval_GetFrame()'
)
self
.
assertEqual
(
type
(
frame
),
libpython
.
PyFrameObjectPtr
)
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment