Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
e89d132e
Commit
e89d132e
authored
Feb 18, 2014
by
Zachary Ware
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Issue #20510: Rewrote test_exit in test_sys to match existing comments
and to modernize. Patch by Gareth Rees.
parent
00c32726
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
32 additions
and
53 deletions
+32
-53
Lib/test/test_sys.py
Lib/test/test_sys.py
+28
-53
Misc/NEWS
Misc/NEWS
+4
-0
No files found.
Lib/test/test_sys.py
View file @
e89d132e
import
unittest
,
test
.
support
from
test.script_helper
import
assert_python_ok
,
assert_python_failure
import
sys
,
io
,
os
import
struct
import
subprocess
...
...
@@ -86,74 +87,50 @@ class SysModuleTest(unittest.TestCase):
# Python/pythonrun.c::PyErr_PrintEx() is tricky.
def
test_exit
(
self
):
# call with two arguments
self
.
assertRaises
(
TypeError
,
sys
.
exit
,
42
,
42
)
# call without argument
try
:
sys
.
exit
(
0
)
except
SystemExit
as
exc
:
self
.
assertEqual
(
exc
.
code
,
0
)
except
:
self
.
fail
(
"wrong exception"
)
else
:
self
.
fail
(
"no exception"
)
rc
,
out
,
err
=
assert_python_ok
(
'-c'
,
'import sys; sys.exit()'
)
self
.
assertEqual
(
rc
,
0
)
self
.
assertEqual
(
out
,
b''
)
self
.
assertEqual
(
err
,
b''
)
# call with tuple argument with one entry
# entry will be unpacked
try
:
# call with integer argument
with
self
.
assertRaises
(
SystemExit
)
as
cm
:
sys
.
exit
(
42
)
except
SystemExit
as
exc
:
self
.
assertEqual
(
exc
.
code
,
42
)
except
:
self
.
fail
(
"wrong exception"
)
else
:
self
.
fail
(
"no exception"
)
self
.
assertEqual
(
cm
.
exception
.
code
,
42
)
# call with integer argument
try
:
# call with tuple argument with one entry
# entry will be unpacked
with
self
.
assertRaises
(
SystemExit
)
as
cm
:
sys
.
exit
((
42
,))
except
SystemExit
as
exc
:
self
.
assertEqual
(
exc
.
code
,
42
)
except
:
self
.
fail
(
"wrong exception"
)
else
:
self
.
fail
(
"no exception"
)
self
.
assertEqual
(
cm
.
exception
.
code
,
42
)
# call with string argument
try
:
with
self
.
assertRaises
(
SystemExit
)
as
cm
:
sys
.
exit
(
"exit"
)
except
SystemExit
as
exc
:
self
.
assertEqual
(
exc
.
code
,
"exit"
)
except
:
self
.
fail
(
"wrong exception"
)
else
:
self
.
fail
(
"no exception"
)
self
.
assertEqual
(
cm
.
exception
.
code
,
"exit"
)
# call with tuple argument with two entries
try
:
with
self
.
assertRaises
(
SystemExit
)
as
cm
:
sys
.
exit
((
17
,
23
))
except
SystemExit
as
exc
:
self
.
assertEqual
(
exc
.
code
,
(
17
,
23
))
except
:
self
.
fail
(
"wrong exception"
)
else
:
self
.
fail
(
"no exception"
)
self
.
assertEqual
(
cm
.
exception
.
code
,
(
17
,
23
))
# test that the exit machinery handles SystemExits properly
rc
=
subprocess
.
call
([
sys
.
executable
,
"-c"
,
"raise SystemExit(47)"
])
rc
,
out
,
err
=
assert_python_failure
(
'-c'
,
'raise SystemExit(47)'
)
self
.
assertEqual
(
rc
,
47
)
self
.
assertEqual
(
out
,
b''
)
self
.
assertEqual
(
err
,
b''
)
def
check_exit_message
(
code
,
expected
,
env
=
None
):
process
=
subprocess
.
Popen
([
sys
.
executable
,
"-c"
,
code
],
stderr
=
subprocess
.
PIPE
,
env
=
env
)
stdout
,
stderr
=
process
.
communicate
()
self
.
assertEqual
(
process
.
returncode
,
1
)
self
.
assertTrue
(
stderr
.
startswith
(
expected
),
"%s doesn't start with %s"
%
(
ascii
(
stderr
),
ascii
(
expected
)))
def
check_exit_message
(
code
,
expected
,
**
env_vars
):
rc
,
out
,
err
=
assert_python_failure
(
'-c'
,
code
,
**
env_vars
)
self
.
assertEqual
(
rc
,
1
)
self
.
assertEqual
(
out
,
b''
)
self
.
assertTrue
(
err
.
startswith
(
expected
),
"%s doesn't start with %s"
%
(
ascii
(
err
),
ascii
(
expected
)))
# test that stderr buffer i
f
flushed before the exit message is written
# test that stderr buffer i
s
flushed before the exit message is written
# into stderr
check_exit_message
(
r'import sys; sys.stderr.write("unflushed,"); sys.exit("message")'
,
...
...
@@ -167,11 +144,9 @@ class SysModuleTest(unittest.TestCase):
# test that the unicode message is encoded to the stderr encoding
# instead of the default encoding (utf8)
env
=
os
.
environ
.
copy
()
env
[
'PYTHONIOENCODING'
]
=
'latin-1'
check_exit_message
(
r'import sys; sys.exit("h\xe9")'
,
b"h
\
xe9
"
,
env
=
env
)
b"h
\
xe9
"
,
PYTHONIOENCODING
=
'latin-1'
)
def
test_getdefaultencoding
(
self
):
self
.
assertRaises
(
TypeError
,
sys
.
getdefaultencoding
,
42
)
...
...
Misc/NEWS
View file @
e89d132e
...
...
@@ -110,6 +110,10 @@ IDLE
Tests
-----
-
Issue
#
20510
:
Rewrote
test_exit
in
test_sys
to
match
existing
comments
,
use
modern
unittest
features
,
and
use
helpers
from
test
.
script_helper
instead
of
using
subprocess
directly
.
Patch
by
Gareth
Rees
.
-
Issue
#
20532
:
Tests
which
use
_testcapi
are
now
marked
as
CPython
only
.
-
Issue
#
19920
:
Added
tests
for
TarFile
.
list
().
Based
on
patch
by
Vajrasky
Kok
.
...
...
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