merge heads

This commit is contained in:
Giampaolo Rodola' 2014-06-22 12:44:05 +02:00
commit bc8197a287
8 changed files with 121 additions and 55 deletions

View File

@ -511,8 +511,8 @@ class SequenceMatcher:
non_adjacent.append((i1, j1, k1)) non_adjacent.append((i1, j1, k1))
non_adjacent.append( (la, lb, 0) ) non_adjacent.append( (la, lb, 0) )
self.matching_blocks = non_adjacent self.matching_blocks = list(map(Match._make, non_adjacent))
return map(Match._make, self.matching_blocks) return self.matching_blocks
def get_opcodes(self): def get_opcodes(self):
"""Return list of 5-tuples describing how to turn a into b. """Return list of 5-tuples describing how to turn a into b.

View File

@ -76,6 +76,15 @@ class TestSFbugs(unittest.TestCase):
diff_gen = difflib.unified_diff([], []) diff_gen = difflib.unified_diff([], [])
self.assertRaises(StopIteration, next, diff_gen) 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): def test_added_tab_hint(self):
# Check fix for bug #1488943 # Check fix for bug #1488943
diff = list(difflib.Differ().compare(["\tI am a buggy"],["\t\tI am a bug"])) diff = list(difflib.Differ().compare(["\tI am a buggy"],["\t\tI am a bug"]))

View File

@ -2,7 +2,6 @@ import os
import sys import sys
import builtins import builtins
import contextlib import contextlib
import difflib
import inspect import inspect
import pydoc import pydoc
import keyword import keyword
@ -356,15 +355,6 @@ def get_pydoc_text(module):
output = patt.sub('', output) output = patt.sub('', output)
return output.strip(), loc 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): def get_html_title(text):
# Bit of hack, but good enough for test purposes # Bit of hack, but good enough for test purposes
header, _, _ = text.partition("</head>") header, _, _ = text.partition("</head>")
@ -414,9 +404,7 @@ class PydocDocTest(unittest.TestCase):
expected_html = expected_html_pattern % ( expected_html = expected_html_pattern % (
(mod_url, mod_file, doc_loc) + (mod_url, mod_file, doc_loc) +
expected_html_data_docstrings) expected_html_data_docstrings)
if result != expected_html: self.assertEqual(result, expected_html)
print_diffs(expected_html, result)
self.fail("outputs are not equal, see diff above")
@unittest.skipIf(sys.flags.optimize >= 2, @unittest.skipIf(sys.flags.optimize >= 2,
"Docstrings are omitted with -O2 and above") "Docstrings are omitted with -O2 and above")
@ -429,9 +417,7 @@ class PydocDocTest(unittest.TestCase):
(doc_loc,) + (doc_loc,) +
expected_text_data_docstrings + expected_text_data_docstrings +
(inspect.getabsfile(pydoc_mod),)) (inspect.getabsfile(pydoc_mod),))
if result != expected_text: self.assertEqual(expected_text, result)
print_diffs(expected_text, result)
self.fail("outputs are not equal, see diff above")
def test_text_enum_member_with_value_zero(self): def test_text_enum_member_with_value_zero(self):
# Test issue #20654 to ensure enum member with value 0 can be # Test issue #20654 to ensure enum member with value 0 can be
@ -887,9 +873,7 @@ class PydocWithMetaClasses(unittest.TestCase):
expected_text = expected_dynamicattribute_pattern % ( expected_text = expected_dynamicattribute_pattern % (
(__name__,) + expected_text_data_docstrings[:2]) (__name__,) + expected_text_data_docstrings[:2])
result = output.getvalue().strip() result = output.getvalue().strip()
if result != expected_text: self.assertEqual(expected_text, result)
print_diffs(expected_text, result)
self.fail("outputs are not equal, see diff above")
@unittest.skipIf(sys.flags.optimize >= 2, @unittest.skipIf(sys.flags.optimize >= 2,
"Docstrings are omitted with -O2 and above") "Docstrings are omitted with -O2 and above")
@ -910,9 +894,7 @@ class PydocWithMetaClasses(unittest.TestCase):
helper(Class) helper(Class)
expected_text = expected_virtualattribute_pattern1 % __name__ expected_text = expected_virtualattribute_pattern1 % __name__
result = output.getvalue().strip() result = output.getvalue().strip()
if result != expected_text: self.assertEqual(expected_text, result)
print_diffs(expected_text, result)
self.fail("outputs are not equal, see diff above")
@unittest.skipIf(sys.flags.optimize >= 2, @unittest.skipIf(sys.flags.optimize >= 2,
"Docstrings are omitted with -O2 and above") "Docstrings are omitted with -O2 and above")
@ -952,19 +934,13 @@ class PydocWithMetaClasses(unittest.TestCase):
helper(Class1) helper(Class1)
expected_text1 = expected_virtualattribute_pattern2 % __name__ expected_text1 = expected_virtualattribute_pattern2 % __name__
result1 = output.getvalue().strip() result1 = output.getvalue().strip()
if result1 != expected_text1: self.assertEqual(expected_text1, result1)
print_diffs(expected_text1, result1)
fail1 = True
output = StringIO() output = StringIO()
helper = pydoc.Helper(output=output) helper = pydoc.Helper(output=output)
helper(Class2) helper(Class2)
expected_text2 = expected_virtualattribute_pattern3 % __name__ expected_text2 = expected_virtualattribute_pattern3 % __name__
result2 = output.getvalue().strip() result2 = output.getvalue().strip()
if result2 != expected_text2: self.assertEqual(expected_text2, result2)
print_diffs(expected_text2, result2)
fail2 = True
if fail1 or fail2:
self.fail("outputs are not equal, see diff above")
@unittest.skipIf(sys.flags.optimize >= 2, @unittest.skipIf(sys.flags.optimize >= 2,
"Docstrings are omitted with -O2 and above") "Docstrings are omitted with -O2 and above")
@ -981,9 +957,7 @@ class PydocWithMetaClasses(unittest.TestCase):
helper(C) helper(C)
expected_text = expected_missingattribute_pattern % __name__ expected_text = expected_missingattribute_pattern % __name__
result = output.getvalue().strip() result = output.getvalue().strip()
if result != expected_text: self.assertEqual(expected_text, result)
print_diffs(expected_text, result)
self.fail("outputs are not equal, see diff above")
@reap_threads @reap_threads

View File

@ -2945,7 +2945,7 @@ class RawTurtle(TPen, TNavigator):
self._stretchfactor = a11, a22 self._stretchfactor = a11, a22
self._shearfactor = a12/a22 self._shearfactor = a12/a22
self._tilt = alfa self._tilt = alfa
self._update() self.pen(resizemode="user")
def _polytrafo(self, poly): def _polytrafo(self, poly):

View File

@ -11,6 +11,7 @@ and time
------------------------------------ ------------------------------------
""" """
from turtle import * from turtle import *
from turtle import Terminator # not in __all__
from datetime import datetime from datetime import datetime
mode("logo") mode("logo")
@ -102,22 +103,25 @@ def tick():
sekunde = t.second + t.microsecond*0.000001 sekunde = t.second + t.microsecond*0.000001
minute = t.minute + sekunde/60.0 minute = t.minute + sekunde/60.0
stunde = t.hour + minute/60.0 stunde = t.hour + minute/60.0
tracer(False) try:
writer.clear() tracer(False) # Terminator can occur here
writer.home() writer.clear()
writer.forward(65) writer.home()
writer.write(wochentag(t), writer.forward(65)
align="center", font=("Courier", 14, "bold")) writer.write(wochentag(t),
writer.back(150) align="center", font=("Courier", 14, "bold"))
writer.write(datum(t), writer.back(150)
align="center", font=("Courier", 14, "bold")) writer.write(datum(t),
writer.forward(85) align="center", font=("Courier", 14, "bold"))
tracer(True) writer.forward(85)
second_hand.setheading(6*sekunde) tracer(True)
minute_hand.setheading(6*minute) second_hand.setheading(6*sekunde) # or here
hour_hand.setheading(30*stunde) minute_hand.setheading(6*minute)
tracer(True) hour_hand.setheading(30*stunde)
ontimer(tick, 100) tracer(True)
ontimer(tick, 100)
except Terminator:
pass # turtledemo user pressed STOP
def main(): def main():
tracer(False) tracer(False)

View File

@ -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.)

View File

@ -18,6 +18,7 @@ stretched to rectangles by shapesize()
--------------------------------------- ---------------------------------------
""" """
from turtle import * from turtle import *
from turtle import Terminator # not in __all__
class Disc(Turtle): class Disc(Turtle):
def __init__(self, n): def __init__(self, n):
@ -50,9 +51,12 @@ def hanoi(n, from_, with_, to_):
def play(): def play():
onkey(None,"space") onkey(None,"space")
clear() clear()
hanoi(6, t1, t2, t3) try:
write("press STOP button to exit", hanoi(6, t1, t2, t3)
align="center", font=("Courier", 16, "bold")) write("press STOP button to exit",
align="center", font=("Courier", 16, "bold"))
except Terminator:
pass # turtledemo user pressed STOP
def main(): def main():
global t1, t2, t3 global t1, t2, t3

View File

@ -236,6 +236,7 @@ Ingrid Cheung
Albert Chin-A-Young Albert Chin-A-Young
Adal Chiriliuc Adal Chiriliuc
Matt Chisholm Matt Chisholm
Lita Cho
Anders Chrigström Anders Chrigström
Tom Christiansen Tom Christiansen
Vadim Chugunov Vadim Chugunov