[Jython-checkins] jython: Fix inconsistent conversion of PyObject to String in StdoutWrapper
jim.baker
jython-checkins at python.org
Sun Apr 19 22:46:26 CEST 2015
https://hg.python.org/jython/rev/fbcbd5f9462b
changeset: 7680:fbcbd5f9462b
user: Jim Baker <jim.baker at rackspace.com>
date: Sun Apr 19 14:46:22 2015 -0600
summary:
Fix inconsistent conversion of PyObject to String in StdoutWrapper
Thanks Richard Fearn for the patch to StdoutWrapper!
Fixes http://bugs.jython.org/issue2105
files:
ACKNOWLEDGMENTS | 1 +
Lib/test/test_pythoninterpreter_jy.py | 27 ++++++++++++-
src/org/python/core/StdoutWrapper.java | 2 +-
3 files changed, 27 insertions(+), 3 deletions(-)
diff --git a/ACKNOWLEDGMENTS b/ACKNOWLEDGMENTS
--- a/ACKNOWLEDGMENTS
+++ b/ACKNOWLEDGMENTS
@@ -154,6 +154,7 @@
Stefan Richthofer
Jason Madden
Daniel Martin
+ Richard Fearn
Local Variables:
mode: indented-text
diff --git a/Lib/test/test_pythoninterpreter_jy.py b/Lib/test/test_pythoninterpreter_jy.py
--- a/Lib/test/test_pythoninterpreter_jy.py
+++ b/Lib/test/test_pythoninterpreter_jy.py
@@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
import java.io
+import os
import sys
import traceback
import types
@@ -10,6 +11,7 @@
from _codecs import encode
from sun.awt.image import BufImgVolatileSurfaceManager
+
def exec_code_in_pi(source, inp=None, out=None, err=None, locals=None):
"""Runs code in a separate context: (thread, PySystemState, PythonInterpreter)"""
@@ -101,13 +103,14 @@
self.assertEquals(42, len(output))
- at unittest.skip("FIXME: Disabled for now (failing in dictionary compare)")
class UnicodeSourceTest(unittest.TestCase):
# When the core PythonInterpreter is embedded in a Java program
# it may be supplied as Unicode source as a string or via streams.
- def do_test(self, source, ref_out=u'', ref_var={}, inp=None):
+ def do_test(self, source, ref_out=u'', ref_var=None, inp=None):
+ if ref_var is None:
+ ref_var = {}
out = java.io.StringWriter()
err = java.io.StringWriter()
var = {}
@@ -118,6 +121,7 @@
inp = java.io.StringReader(inp)
exec_code_in_pi(source, inp, out, err, var)
+ del var['__builtins__']
self.assertEquals(ref_var, var)
self.assertEquals(ref_out, out.toString())
@@ -307,11 +311,30 @@
# There is no readinto() with pi.setIn(Reader)
+class StdoutWrapperTest(unittest.TestCase):
+
+ def test_choose_str(self):
+
+ def f():
+ class Example:
+ def __str__(self):
+ return "str"
+ def __repr__(self):
+ return "repr"
+ print Example()
+
+ out = java.io.StringWriter()
+ err = java.io.StringWriter()
+ exec_code_in_pi(f, None, out, err)
+ self.assertEqual(out.toString(), "str" + os.linesep)
+
+
def test_main():
test.test_support.run_unittest(
InterpreterTest,
UnicodeSourceTest,
InterpreterSetInTest,
+ StdoutWrapperTest
)
if __name__ == "__main__":
diff --git a/src/org/python/core/StdoutWrapper.java b/src/org/python/core/StdoutWrapper.java
--- a/src/org/python/core/StdoutWrapper.java
+++ b/src/org/python/core/StdoutWrapper.java
@@ -120,7 +120,7 @@
if (o instanceof PyString) {
s = ((PyString) o).getString();
} else {
- s = o.toString();
+ s = o.__str__().toString();
}
file.write(s);
return s;
--
Repository URL: https://hg.python.org/jython
More information about the Jython-checkins
mailing list