* Remove PRINT_ITEM(_TO), PRINT_NEWLINE(_TO) opcodes.

* Fix some docstrings and one Print -> print.
* Fix test_{class,code,descrtut,dis,extcall,parser,popen,pkg,subprocess,syntax,traceback}.
  These were the ones that generated code with a print statement.
  In most remaining failing tests there's an issue with the soft space.
This commit is contained in:
Georg Brandl 2007-02-09 21:28:07 +00:00
parent 08c47ba0df
commit 88fc6646d1
31 changed files with 159 additions and 553 deletions

View file

@ -30,8 +30,6 @@ exec_tests = [
"v = 1",
# AugAssign
"v += 1",
# Print
"print >>f, 1, ",
# For
"for v in v:pass",
# While
@ -157,7 +155,6 @@ exec_results = [
('Module', [('Delete', (1, 0), [('Name', (1, 4), 'v', ('Del',))])]),
('Module', [('Assign', (1, 0), [('Name', (1, 0), 'v', ('Store',))], ('Num', (1, 4), 1))]),
('Module', [('AugAssign', (1, 0), ('Name', (1, 0), 'v', ('Store',)), ('Add',), ('Num', (1, 5), 1))]),
('Module', [('Print', (1, 0), ('Name', (1, 8), 'f', ('Load',)), [('Num', (1, 11), 1)], False)]),
('Module', [('For', (1, 0), ('Name', (1, 4), 'v', ('Store',)), ('Name', (1, 9), 'v', ('Load',)), [('Pass', (1, 11))], [])]),
('Module', [('While', (1, 0), ('Name', (1, 6), 'v', ('Load',)), [('Pass', (1, 8))], [])]),
('Module', [('If', (1, 0), ('Name', (1, 3), 'v', ('Load',)), [('Pass', (1, 5))], [])]),

View file

@ -127,7 +127,7 @@ class AllTests:
method_template = """\
def __%(method)s__(self, *args):
print "__%(method)s__:", args
print("__%(method)s__:", args)
"""
d = {}

View file

@ -58,7 +58,7 @@ consts: ('None',)
name: attrs
argcount: 1
kwonlyargcount: 0
names: ('attr1', 'attr2', 'attr3')
names: ('print', 'attr1', 'attr2', 'attr3')
varnames: ('obj',)
cellvars: ()
freevars: ()

View file

@ -36,28 +36,28 @@ test_1 = """
Here's the new type at work:
>>> print(defaultdict) # show our type
>>> print(defaultdict) # show our type
<class 'test.test_descrtut.defaultdict'>
>>> print(type(defaultdict)) # its metatype
>>> print(type(defaultdict)) # its metatype
<type 'type'>
>>> a = defaultdict(default=0.0) # create an instance
>>> print(a) # show the instance
>>> print(a) # show the instance
{}
>>> print(type(a)) # show its type
>>> print(type(a)) # show its type
<class 'test.test_descrtut.defaultdict'>
>>> print(a.__class__) # show its class
>>> print(a.__class__) # show its class
<class 'test.test_descrtut.defaultdict'>
>>> print(type(a) is a.__class__) # its type is its class
>>> print(type(a) is a.__class__) # its type is its class
True
>>> a[1] = 3.25 # modify the instance
>>> print(a) # show the new value
>>> print(a) # show the new value
{1: 3.25}
>>> print(a[1]) # show the new item
>>> print(a[1]) # show the new item
3.25
>>> print(a[0]) # a non-existant item
>>> print(a[0]) # a non-existant item
0.0
>>> a.merge({1:100, 2:200}) # use a dict method
>>> print(sortdict(a)) # show the result
>>> print(sortdict(a)) # show the result
{1: 3.25, 2: 200}
>>>
@ -67,10 +67,11 @@ statement or the built-in function eval():
>>> print(sorted(a.keys()))
[1, 2]
>>> exec("x = 3; print x", a)
>>> a['print'] = print # need the print function here
>>> exec("x = 3; print(x)", a)
3
>>> print(sorted(a.keys(), key=lambda x: (str(type(x)), x)))
[1, 2, '__builtins__', 'x']
[1, 2, '__builtins__', 'print', 'x']
>>> print(a['x'])
3
>>>

View file

@ -12,12 +12,13 @@ def _f(a):
return 1
dis_f = """\
%-4d 0 LOAD_FAST 0 (a)
3 PRINT_ITEM
4 PRINT_NEWLINE
%-4d 0 LOAD_GLOBAL 0 (print)
3 LOAD_FAST 0 (a)
6 CALL_FUNCTION 1
9 POP_TOP
%-4d 5 LOAD_CONST 1 (1)
8 RETURN_VALUE
%-4d 10 LOAD_CONST 1 (1)
13 RETURN_VALUE
"""%(_f.func_code.co_firstlineno + 1,
_f.func_code.co_firstlineno + 2)

View file

@ -260,8 +260,8 @@ for args in ['', 'a', 'ab']:
lambda x: '%s="%s"' % (x, x), defargs)
if vararg: arglist.append('*' + vararg)
if kwarg: arglist.append('**' + kwarg)
decl = (('def %s(%s): print "ok %s", a, b, d, e, v, ' +
'type(k) is type ("") and k or sortdict(k)')
decl = (('def %s(%s): print("ok %s", a, b, d, e, v, ' +
'type(k) is type ("") and k or sortdict(k))')
% (name, ', '.join(arglist), name))
exec(decl)
func = eval(name)

View file

@ -85,14 +85,6 @@ class RoundtripLegalSyntaxTestCase(unittest.TestCase):
self.check_expr("(x for x in range(10))")
self.check_expr("foo(x for x in range(10))")
def test_print(self):
self.check_suite("print")
self.check_suite("print 1")
self.check_suite("print 1,")
self.check_suite("print >>fp")
self.check_suite("print >>fp, 1")
self.check_suite("print >>fp, 1,")
def test_simple_expression(self):
# expr_stmt
self.check_suite("a")
@ -359,29 +351,6 @@ class IllegalSyntaxTestCase(unittest.TestCase):
(0, ''))))
self.check_bad_tree(tree, "def f():\n return 1\n yield 1")
def test_print_chevron_comma(self):
# Illegal input: print >>fp,
tree = \
(257,
(264,
(265,
(266,
(268,
(1, 'print'),
(35, '>>'),
(290,
(291,
(292,
(293,
(295,
(296,
(297,
(298, (299, (300, (301, (302, (303, (1, 'fp')))))))))))))),
(12, ','))),
(4, ''))),
(0, ''))
self.check_bad_tree(tree, "print >>fp,")
def test_a_comma_comma_c(self):
# Illegal input: a,,c
tree = \

View file

@ -81,122 +81,122 @@ tests = [
("t2", [
("t2", None),
("t2 __init__"+os.extsep+"py", "'doc for t2'; print __name__, 'loading'"),
("t2 __init__"+os.extsep+"py", "'doc for t2'; print(__name__, 'loading')"),
("t2 sub", None),
("t2 sub __init__"+os.extsep+"py", ""),
("t2 sub subsub", None),
("t2 sub subsub __init__"+os.extsep+"py", "print __name__, 'loading'; spam = 1"),
("t2 sub subsub __init__"+os.extsep+"py", "print(__name__, 'loading'); spam = 1"),
],
"""
import t2
print t2.__doc__
print(t2.__doc__)
import t2.sub
import t2.sub.subsub
print t2.__name__, t2.sub.__name__, t2.sub.subsub.__name__
print(t2.__name__, t2.sub.__name__, t2.sub.subsub.__name__)
import t2
from t2 import *
print dir()
print(dir())
from t2 import sub
from t2.sub import subsub
from t2.sub.subsub import spam
print sub.__name__, subsub.__name__
print sub.subsub.__name__
print dir()
print(sub.__name__, subsub.__name__)
print(sub.subsub.__name__)
print(dir())
import t2.sub
import t2.sub.subsub
print t2.__name__, t2.sub.__name__, t2.sub.subsub.__name__
print(t2.__name__, t2.sub.__name__, t2.sub.subsub.__name__)
from t2 import *
print dir()
print(dir())
"""),
("t3", [
("t3", None),
("t3 __init__"+os.extsep+"py", "print __name__, 'loading'"),
("t3 __init__"+os.extsep+"py", "print(__name__, 'loading')"),
("t3 sub", None),
("t3 sub __init__"+os.extsep+"py", ""),
("t3 sub subsub", None),
("t3 sub subsub __init__"+os.extsep+"py", "print __name__, 'loading'; spam = 1"),
("t3 sub subsub __init__"+os.extsep+"py", "print(__name__, 'loading'); spam = 1"),
],
"""
import t3.sub.subsub
print t3.__name__, t3.sub.__name__, t3.sub.subsub.__name__
print(t3.__name__, t3.sub.__name__, t3.sub.subsub.__name__)
reload(t3)
reload(t3.sub)
reload(t3.sub.subsub)
"""),
("t4", [
("t4"+os.extsep+"py", "print 'THIS SHOULD NOT BE PRINTED (t4"+os.extsep+"py)'"),
("t4"+os.extsep+"py", "print('THIS SHOULD NOT BE PRINTED (t4"+os.extsep+"py)')"),
("t4", None),
("t4 __init__"+os.extsep+"py", "print __name__, 'loading'"),
("t4 sub"+os.extsep+"py", "print 'THIS SHOULD NOT BE PRINTED (sub"+os.extsep+"py)'"),
("t4 __init__"+os.extsep+"py", "print(__name__, 'loading')"),
("t4 sub"+os.extsep+"py", "print('THIS SHOULD NOT BE PRINTED (sub"+os.extsep+"py)')"),
("t4 sub", None),
("t4 sub __init__"+os.extsep+"py", ""),
("t4 sub subsub"+os.extsep+"py", "print 'THIS SHOULD NOT BE PRINTED (subsub"+os.extsep+"py)'"),
("t4 sub subsub"+os.extsep+"py", "print('THIS SHOULD NOT BE PRINTED (subsub"+os.extsep+"py)')"),
("t4 sub subsub", None),
("t4 sub subsub __init__"+os.extsep+"py", "print __name__, 'loading'; spam = 1"),
("t4 sub subsub __init__"+os.extsep+"py", "print(__name__, 'loading'); spam = 1"),
],
"""
from t4.sub.subsub import *
print "t4.sub.subsub.spam =", spam
print("t4.sub.subsub.spam =", spam)
"""),
("t5", [
("t5", None),
("t5 __init__"+os.extsep+"py", "import t5.foo"),
("t5 string"+os.extsep+"py", "print __name__, 'loading'; spam = 1"),
("t5 string"+os.extsep+"py", "print(__name__, 'loading'); spam = 1"),
("t5 foo"+os.extsep+"py",
"print __name__, 'loading'; from . import string; print string.spam"),
"print(__name__, 'loading'); from . import string; print(string.spam)"),
],
"""
import t5
from t5 import *
print dir()
print(dir())
import t5
print fixdir(dir(t5))
print fixdir(dir(t5.foo))
print fixdir(dir(t5.string))
print(fixdir(dir(t5)))
print(fixdir(dir(t5.foo)))
print(fixdir(dir(t5.string)))
"""),
("t6", [
("t6", None),
("t6 __init__"+os.extsep+"py", "__all__ = ['spam', 'ham', 'eggs']"),
("t6 spam"+os.extsep+"py", "print __name__, 'loading'"),
("t6 ham"+os.extsep+"py", "print __name__, 'loading'"),
("t6 eggs"+os.extsep+"py", "print __name__, 'loading'"),
("t6 spam"+os.extsep+"py", "print(__name__, 'loading')"),
("t6 ham"+os.extsep+"py", "print(__name__, 'loading')"),
("t6 eggs"+os.extsep+"py", "print(__name__, 'loading')"),
],
"""
import t6
print fixdir(dir(t6))
print(fixdir(dir(t6)))
from t6 import *
print fixdir(dir(t6))
print dir()
print(fixdir(dir(t6)))
print(dir())
"""),
("t7", [
("t7"+os.extsep+"py", "print 'Importing t7"+os.extsep+"py'"),
("t7"+os.extsep+"py", "print('Importing t7"+os.extsep+"py')"),
("t7", None),
("t7 __init__"+os.extsep+"py", "print __name__, 'loading'"),
("t7 sub"+os.extsep+"py", "print 'THIS SHOULD NOT BE PRINTED (sub"+os.extsep+"py)'"),
("t7 __init__"+os.extsep+"py", "print(__name__, 'loading')"),
("t7 sub"+os.extsep+"py", "print('THIS SHOULD NOT BE PRINTED (sub"+os.extsep+"py)')"),
("t7 sub", None),
("t7 sub __init__"+os.extsep+"py", ""),
("t7 sub subsub"+os.extsep+"py", "print 'THIS SHOULD NOT BE PRINTED (subsub"+os.extsep+"py)'"),
("t7 sub subsub"+os.extsep+"py", "print('THIS SHOULD NOT BE PRINTED (subsub"+os.extsep+"py)')"),
("t7 sub subsub", None),
("t7 sub subsub __init__"+os.extsep+"py", "print __name__, 'loading'; spam = 1"),
("t7 sub subsub __init__"+os.extsep+"py", "print(__name__, 'loading'); spam = 1"),
],
"""
t7, sub, subsub = None, None, None
import t7 as tas
print fixdir(dir(tas))
print(fixdir(dir(tas)))
verify(not t7)
from t7 import sub as subpar
print fixdir(dir(subpar))
print(fixdir(dir(subpar)))
verify(not t7 and not sub)
from t7.sub import subsub as subsubsub
print fixdir(dir(subsubsub))
print(fixdir(dir(subsubsub)))
verify(not t7 and not sub and not subsub)
from t7.sub.subsub import spam as ham
print "t7.sub.subsub.spam =", ham
print("t7.sub.subsub.spam =", ham)
verify(not t7 and not sub and not subsub)
"""),

View file

@ -19,7 +19,7 @@ if ' ' in python:
class PopenTest(unittest.TestCase):
def _do_test_commandline(self, cmdline, expected):
cmd = '%s -c "import sys;print sys.argv" %s' % (python, cmdline)
cmd = '%s -c "import sys; print(sys.argv)" %s' % (python, cmdline)
data = os.popen(cmd).read()
got = eval(data)[1:] # strip off argv[0]
self.assertEqual(got, expected)

View file

@ -84,7 +84,7 @@ class ProcessTestCase(unittest.TestCase):
def test_stdin_none(self):
# .stdin is None when not redirected
p = subprocess.Popen([sys.executable, "-c", 'print "banana"'],
p = subprocess.Popen([sys.executable, "-c", 'print("banana")'],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
p.wait()
self.assertEqual(p.stdin, None)
@ -92,16 +92,16 @@ class ProcessTestCase(unittest.TestCase):
def test_stdout_none(self):
# .stdout is None when not redirected
p = subprocess.Popen([sys.executable, "-c",
'print " this bit of output is from a '
'print(" this bit of output is from a '
'test of stdout in a different '
'process ..."'],
'process ...")'],
stdin=subprocess.PIPE, stderr=subprocess.PIPE)
p.wait()
self.assertEqual(p.stdout, None)
def test_stderr_none(self):
# .stderr is None when not redirected
p = subprocess.Popen([sys.executable, "-c", 'print "banana"'],
p = subprocess.Popen([sys.executable, "-c", 'print("banana")'],
stdin=subprocess.PIPE, stdout=subprocess.PIPE)
p.wait()
self.assertEqual(p.stderr, None)

View file

@ -423,7 +423,7 @@ class SyntaxTestCase(unittest.TestCase):
source = re.sub('(?m)^ *:', '', """\
:def foo(x):
: def bar():
: print x
: print(x)
: del x
:""")
self._check_error(source, "nested scope")

View file

@ -43,9 +43,9 @@ regenerate the original program text from the tokens.
There are some standard formatting practices that are easy to get right.
>>> roundtrip("if x == 1:\\n"
... " print x\\n")
... " print(x)\\n")
if x == 1:
print x
print(x)
Some people use different formatting conventions, which makes
untokenize a little trickier. Note that this test involves trailing
@ -53,29 +53,29 @@ whitespace after the colon. Note that we use hex escapes to make the
two trailing blanks apparent in the expected output.
>>> roundtrip("if x == 1 : \\n"
... " print x\\n")
... " print(x)\\n")
if x == 1 :\x20\x20
print x
print(x)
Comments need to go in the right place.
>>> roundtrip("if x == 1:\\n"
... " # A comment by itself.\\n"
... " print x # Comment here, too.\\n"
... " print(x) # Comment here, too.\\n"
... " # Another comment.\\n"
... "after_if = True\\n")
if x == 1:
# A comment by itself.
print x # Comment here, too.
print(x) # Comment here, too.
# Another comment.
after_if = True
>>> roundtrip("if (x # The comments need to go in the right place\\n"
... " == 1):\\n"
... " print 'x == 1'\\n")
... " print('x == 1')\\n")
if (x # The comments need to go in the right place
== 1):
print 'x == 1'
print('x == 1')
"""
@ -130,9 +130,9 @@ def decistmt(s):
"""Substitute Decimals for floats in a string of statements.
>>> from decimal import Decimal
>>> s = 'print +21.3e-5*-.1234/81.7'
>>> s = 'print(+21.3e-5*-.1234/81.7)'
>>> decistmt(s)
"print +Decimal ('21.3e-5')*-Decimal ('.1234')/Decimal ('81.7')"
"print (+Decimal ('21.3e-5')*-Decimal ('.1234')/Decimal ('81.7'))"
The format of the exponent is inherited from the platform C library.
Known cases are "e-007" (Windows) and "e-07" (not Windows). Since

View file

@ -25,7 +25,7 @@ class TracebackCases(unittest.TestCase):
import test.badsyntax_nocaret
def syntax_error_bad_indentation(self):
compile("def spam():\n print 1\n print 2", "?", "exec")
compile("def spam():\n print(1)\n print(2)", "?", "exec")
def test_caret(self):
err = self.get_exception_format(self.syntax_error_with_caret,
@ -48,9 +48,9 @@ class TracebackCases(unittest.TestCase):
err = self.get_exception_format(self.syntax_error_bad_indentation,
IndentationError)
self.assert_(len(err) == 4)
self.assert_(err[1].strip() == "print 2")
self.assert_(err[1].strip() == "print(2)")
self.assert_("^" in err[2])
self.assert_(err[1].find("2") == err[2].find("^"))
self.assert_(err[1].find(")") == err[2].find("^"))
def test_bug737473(self):
import sys, os, tempfile, time