晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
| DIR:/opt/alt/python35/lib64/python3.5/idlelib/idle_test/ |
| Current File : //opt/alt/python35/lib64/python3.5/idlelib/idle_test/test_undodelegator.py |
"""Unittest for UndoDelegator in idlelib.UndoDelegator.
Coverage about 80% (retest).
"""
from test.support import requires
requires('gui')
import unittest
from unittest.mock import Mock
from tkinter import Text, Tk
from idlelib.UndoDelegator import UndoDelegator
from idlelib.Percolator import Percolator
class UndoDelegatorTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.root = Tk()
cls.text = Text(cls.root)
cls.percolator = Percolator(cls.text)
@classmethod
def tearDownClass(cls):
cls.percolator.redir.close()
del cls.percolator, cls.text
cls.root.destroy()
del cls.root
def setUp(self):
self.delegator = UndoDelegator()
self.percolator.insertfilter(self.delegator)
self.delegator.bell = Mock(wraps=self.delegator.bell)
def tearDown(self):
self.percolator.removefilter(self.delegator)
self.text.delete('1.0', 'end')
self.delegator.resetcache()
def test_undo_event(self):
text = self.text
text.insert('insert', 'foobar')
text.insert('insert', 'h')
text.event_generate('<<undo>>')
self.assertEqual(text.get('1.0', 'end'), '\n')
text.insert('insert', 'foo')
text.insert('insert', 'bar')
text.delete('1.2', '1.4')
text.insert('insert', 'hello')
text.event_generate('<<undo>>')
self.assertEqual(text.get('1.0', '1.4'), 'foar')
text.event_generate('<<undo>>')
self.assertEqual(text.get('1.0', '1.6'), 'foobar')
text.event_generate('<<undo>>')
self.assertEqual(text.get('1.0', '1.3'), 'foo')
text.event_generate('<<undo>>')
self.delegator.undo_event('event')
self.assertTrue(self.delegator.bell.called)
def test_redo_event(self):
text = self.text
text.insert('insert', 'foo')
text.insert('insert', 'bar')
text.delete('1.0', '1.3')
text.event_generate('<<undo>>')
text.event_generate('<<redo>>')
self.assertEqual(text.get('1.0', '1.3'), 'bar')
text.event_generate('<<redo>>')
self.assertTrue(self.delegator.bell.called)
def test_dump_event(self):
"""
Dump_event cannot be tested directly without changing
environment variables. So, test statements in dump_event
indirectly
"""
text = self.text
d = self.delegator
text.insert('insert', 'foo')
text.insert('insert', 'bar')
text.delete('1.2', '1.4')
self.assertTupleEqual((d.pointer, d.can_merge), (3, True))
text.event_generate('<<undo>>')
self.assertTupleEqual((d.pointer, d.can_merge), (2, False))
def test_get_set_saved(self):
# test the getter method get_saved
# test the setter method set_saved
# indirectly test check_saved
d = self.delegator
self.assertTrue(d.get_saved())
self.text.insert('insert', 'a')
self.assertFalse(d.get_saved())
d.saved_change_hook = Mock()
d.set_saved(True)
self.assertEqual(d.pointer, d.saved)
self.assertTrue(d.saved_change_hook.called)
d.set_saved(False)
self.assertEqual(d.saved, -1)
self.assertTrue(d.saved_change_hook.called)
def test_undo_start_stop(self):
# test the undo_block_start and undo_block_stop methods
text = self.text
text.insert('insert', 'foo')
self.delegator.undo_block_start()
text.insert('insert', 'bar')
text.insert('insert', 'bar')
self.delegator.undo_block_stop()
self.assertEqual(text.get('1.0', '1.3'), 'foo')
# test another code path
self.delegator.undo_block_start()
text.insert('insert', 'bar')
self.delegator.undo_block_stop()
self.assertEqual(text.get('1.0', '1.3'), 'foo')
def test_addcmd(self):
text = self.text
# when number of undo operations exceeds max_undo
self.delegator.max_undo = max_undo = 10
for i in range(max_undo + 10):
text.insert('insert', 'foo')
self.assertLessEqual(len(self.delegator.undolist), max_undo)
if __name__ == '__main__':
unittest.main(verbosity=2, exit=False)
|