[Python-checkins] cpython (merge default -> default): merge heads

giampaolo.rodola python-checkins at python.org
Sun Jun 22 12:44:19 CEST 2014


http://hg.python.org/cpython/rev/3f3de8c47ff8
changeset: 91318:3f3de8c47ff8
parent: 91317:aeeb385e61e4
parent: 91316:3426d25a00a2
user: Giampaolo Rodola' <g.rodola at gmail.com>
date: Sun Jun 22 12:44:05 2014 +0200
summary:
 merge heads
files:
 Lib/difflib.py | 4 +-
 Lib/test/test_difflib.py | 9 ++
 Lib/test/test_pydoc.py | 40 +---------
 Lib/turtle.py | 2 +-
 Lib/turtledemo/clock.py | 36 +++++----
 Lib/turtledemo/demohelp.txt | 74 +++++++++++++++++++++
 Lib/turtledemo/minimal_hanoi.py | 10 +-
 Misc/ACKS | 1 +
 8 files changed, 121 insertions(+), 55 deletions(-)
diff --git a/Lib/difflib.py b/Lib/difflib.py
--- a/Lib/difflib.py
+++ b/Lib/difflib.py
@@ -511,8 +511,8 @@
 non_adjacent.append((i1, j1, k1))
 
 non_adjacent.append( (la, lb, 0) )
- self.matching_blocks = non_adjacent
- return map(Match._make, self.matching_blocks)
+ self.matching_blocks = list(map(Match._make, non_adjacent))
+ return self.matching_blocks
 
 def get_opcodes(self):
 """Return list of 5-tuples describing how to turn a into b.
diff --git a/Lib/test/test_difflib.py b/Lib/test/test_difflib.py
--- a/Lib/test/test_difflib.py
+++ b/Lib/test/test_difflib.py
@@ -76,6 +76,15 @@
 diff_gen = difflib.unified_diff([], [])
 self.assertRaises(StopIteration, next, diff_gen)
 
+ def test_matching_blocks_cache(self):
+ # Issue #21635
+ s = difflib.SequenceMatcher(None, "abxcd", "abcd")
+ first = s.get_matching_blocks()
+ second = s.get_matching_blocks()
+ self.assertEqual(second[0].size, 2)
+ self.assertEqual(second[1].size, 2)
+ self.assertEqual(second[2].size, 0)
+
 def test_added_tab_hint(self):
 # Check fix for bug #1488943
 diff = list(difflib.Differ().compare(["\tI am a buggy"],["\t\tI am a bug"]))
diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py
--- a/Lib/test/test_pydoc.py
+++ b/Lib/test/test_pydoc.py
@@ -2,7 +2,6 @@
 import sys
 import builtins
 import contextlib
-import difflib
 import inspect
 import pydoc
 import keyword
@@ -356,15 +355,6 @@
 output = patt.sub('', output)
 return output.strip(), loc
 
-def print_diffs(text1, text2):
- "Prints unified diffs for two texts"
- # XXX now obsolete, use unittest built-in support
- lines1 = text1.splitlines(keepends=True)
- lines2 = text2.splitlines(keepends=True)
- diffs = difflib.unified_diff(lines1, lines2, n=0, fromfile='expected',
- tofile='got')
- print('\n' + ''.join(diffs))
-
 def get_html_title(text):
 # Bit of hack, but good enough for test purposes
 header, _, _ = text.partition("</head>")
@@ -414,9 +404,7 @@
 expected_html = expected_html_pattern % (
 (mod_url, mod_file, doc_loc) +
 expected_html_data_docstrings)
- if result != expected_html:
- print_diffs(expected_html, result)
- self.fail("outputs are not equal, see diff above")
+ self.assertEqual(result, expected_html)
 
 @unittest.skipIf(sys.flags.optimize >= 2,
 "Docstrings are omitted with -O2 and above")
@@ -429,9 +417,7 @@
 (doc_loc,) +
 expected_text_data_docstrings +
 (inspect.getabsfile(pydoc_mod),))
- if result != expected_text:
- print_diffs(expected_text, result)
- self.fail("outputs are not equal, see diff above")
+ self.assertEqual(expected_text, result)
 
 def test_text_enum_member_with_value_zero(self):
 # Test issue #20654 to ensure enum member with value 0 can be
@@ -887,9 +873,7 @@
 expected_text = expected_dynamicattribute_pattern % (
 (__name__,) + expected_text_data_docstrings[:2])
 result = output.getvalue().strip()
- if result != expected_text:
- print_diffs(expected_text, result)
- self.fail("outputs are not equal, see diff above")
+ self.assertEqual(expected_text, result)
 
 @unittest.skipIf(sys.flags.optimize >= 2,
 "Docstrings are omitted with -O2 and above")
@@ -910,9 +894,7 @@
 helper(Class)
 expected_text = expected_virtualattribute_pattern1 % __name__
 result = output.getvalue().strip()
- if result != expected_text:
- print_diffs(expected_text, result)
- self.fail("outputs are not equal, see diff above")
+ self.assertEqual(expected_text, result)
 
 @unittest.skipIf(sys.flags.optimize >= 2,
 "Docstrings are omitted with -O2 and above")
@@ -952,19 +934,13 @@
 helper(Class1)
 expected_text1 = expected_virtualattribute_pattern2 % __name__
 result1 = output.getvalue().strip()
- if result1 != expected_text1:
- print_diffs(expected_text1, result1)
- fail1 = True
+ self.assertEqual(expected_text1, result1)
 output = StringIO()
 helper = pydoc.Helper(output=output)
 helper(Class2)
 expected_text2 = expected_virtualattribute_pattern3 % __name__
 result2 = output.getvalue().strip()
- if result2 != expected_text2:
- print_diffs(expected_text2, result2)
- fail2 = True
- if fail1 or fail2:
- self.fail("outputs are not equal, see diff above")
+ self.assertEqual(expected_text2, result2)
 
 @unittest.skipIf(sys.flags.optimize >= 2,
 "Docstrings are omitted with -O2 and above")
@@ -981,9 +957,7 @@
 helper(C)
 expected_text = expected_missingattribute_pattern % __name__
 result = output.getvalue().strip()
- if result != expected_text:
- print_diffs(expected_text, result)
- self.fail("outputs are not equal, see diff above")
+ self.assertEqual(expected_text, result)
 
 
 @reap_threads
diff --git a/Lib/turtle.py b/Lib/turtle.py
--- a/Lib/turtle.py
+++ b/Lib/turtle.py
@@ -2945,7 +2945,7 @@
 self._stretchfactor = a11, a22
 self._shearfactor = a12/a22
 self._tilt = alfa
- self._update()
+ self.pen(resizemode="user")
 
 
 def _polytrafo(self, poly):
diff --git a/Lib/turtledemo/clock.py b/Lib/turtledemo/clock.py
--- a/Lib/turtledemo/clock.py
+++ b/Lib/turtledemo/clock.py
@@ -11,6 +11,7 @@
 ------------------------------------
 """
 from turtle import *
+from turtle import Terminator # not in __all__
 from datetime import datetime
 
 mode("logo")
@@ -102,22 +103,25 @@
 sekunde = t.second + t.microsecond*0.000001
 minute = t.minute + sekunde/60.0
 stunde = t.hour + minute/60.0
- tracer(False)
- writer.clear()
- writer.home()
- writer.forward(65)
- writer.write(wochentag(t),
- align="center", font=("Courier", 14, "bold"))
- writer.back(150)
- writer.write(datum(t),
- align="center", font=("Courier", 14, "bold"))
- writer.forward(85)
- tracer(True)
- second_hand.setheading(6*sekunde)
- minute_hand.setheading(6*minute)
- hour_hand.setheading(30*stunde)
- tracer(True)
- ontimer(tick, 100)
+ try:
+ tracer(False) # Terminator can occur here
+ writer.clear()
+ writer.home()
+ writer.forward(65)
+ writer.write(wochentag(t),
+ align="center", font=("Courier", 14, "bold"))
+ writer.back(150)
+ writer.write(datum(t),
+ align="center", font=("Courier", 14, "bold"))
+ writer.forward(85)
+ tracer(True)
+ second_hand.setheading(6*sekunde) # or here
+ minute_hand.setheading(6*minute)
+ hour_hand.setheading(30*stunde)
+ tracer(True)
+ ontimer(tick, 100)
+ except Terminator:
+ pass # turtledemo user pressed STOP
 
 def main():
 tracer(False)
diff --git a/Lib/turtledemo/demohelp.txt b/Lib/turtledemo/demohelp.txt
new file mode 100644
--- /dev/null
+++ b/Lib/turtledemo/demohelp.txt
@@ -0,0 +1,74 @@
+
+
+ ----------------------------------------------
+
+ turtleDemo - Help
+
+ ----------------------------------------------
+
+ This document has two sections:
+
+ (1) How to use the demo viewer
+ (2) How to add your own demos to the demo repository
+
+
+ (1) How to use the demo viewer.
+
+ Select a demoscript from the example menu.
+ The (syntax coloured) source code appears in the left
+ source code window. IT CANNOT BE EDITED, but ONLY VIEWED!
+
+ - Press START button to start the demo.
+ - Stop execution by pressing the STOP button.
+ - Clear screen by pressing the CLEAR button.
+ - Restart by pressing the START button again.
+
+ SPECIAL demos are those which run EVENTDRIVEN.
+ (For example clock.py - or oldTurtleDemo.py which
+ in the end expects a mouse click.):
+
+ Press START button to start the demo.
+
+ - Until the EVENTLOOP is entered everything works
+ as in an ordinary demo script.
+
+ - When the EVENTLOOP is entered, you control the
+ application by using the mouse and/or keys (or it's
+ controlled by some timer events)
+ To stop it you can and must press the STOP button.
+
+ While the EVENTLOOP is running, the examples menu is disabled.
+
+ - Only after having pressed the STOP button, you may
+ restart it or choose another example script.
+
+ * * * * * * * *
+ In some rare situations there may occur interferences/conflicts
+ between events concerning the demo script and those concerning the
+ demo-viewer. (They run in the same process.) Strange behaviour may be
+ the consequence and in the worst case you must close and restart the
+ viewer.
+ * * * * * * * *
+
+
+ (2) How to add your own demos to the demo repository
+
+ - place: same directory as turtledemo/__main__.py
+
+ - requirements on source code:
+ code must contain a main() function which will
+ be executed by the viewer (see provided example scripts)
+ main() may return a string which will be displayed
+ in the Label below the source code window (when execution
+ has finished.)
+
+ If the demo is EVENT DRIVEN, main must return the string
+ "EVENTLOOP". This informs the demo viewer that the script is
+ still running and must be stopped by the user!
+
+ If an "EVENTLOOP" demo runs by itself, as with clock, which uses
+ ontimer, or minimal_hanoi, which loops by recursion, then the
+ code should catch the turtle.Terminator exception that will be
+ raised when the user presses the STOP button. (Paint is not such
+ a demo; it only acts in response to mouse clicks and movements.)
+
diff --git a/Lib/turtledemo/minimal_hanoi.py b/Lib/turtledemo/minimal_hanoi.py
--- a/Lib/turtledemo/minimal_hanoi.py
+++ b/Lib/turtledemo/minimal_hanoi.py
@@ -18,6 +18,7 @@
 ---------------------------------------
 """
 from turtle import *
+from turtle import Terminator # not in __all__
 
 class Disc(Turtle):
 def __init__(self, n):
@@ -50,9 +51,12 @@
 def play():
 onkey(None,"space")
 clear()
- hanoi(6, t1, t2, t3)
- write("press STOP button to exit",
- align="center", font=("Courier", 16, "bold"))
+ try:
+ hanoi(6, t1, t2, t3)
+ write("press STOP button to exit",
+ align="center", font=("Courier", 16, "bold"))
+ except Terminator:
+ pass # turtledemo user pressed STOP
 
 def main():
 global t1, t2, t3
diff --git a/Misc/ACKS b/Misc/ACKS
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -236,6 +236,7 @@
 Albert Chin-A-Young
 Adal Chiriliuc
 Matt Chisholm
+Lita Cho
 Anders Chrigström
 Tom Christiansen
 Vadim Chugunov
-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /