Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
c2564f93
Commit
c2564f93
authored
Aug 15, 2013
by
Terry Jan Reedy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Issue #18425: Unittests for idlelib.IdleHistory. First patch by R. Jayakrishnan.
parent
5e4d6398
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
179 additions
and
3 deletions
+179
-3
Lib/idlelib/IdleHistory.py
Lib/idlelib/IdleHistory.py
+15
-3
Lib/idlelib/idle_test/test_idlehistory.py
Lib/idlelib/idle_test/test_idlehistory.py
+164
-0
No files found.
Lib/idlelib/IdleHistory.py
View file @
c2564f93
...
...
@@ -49,7 +49,13 @@ class History:
self
.
text
.
insert
(
where
,
output
)
def
fetch
(
self
,
reverse
):
"Fetch statememt and enter into text at cursor."
'''Fetch statememt and replace current line in text widget.
Set prefix and pointer as needed for successive fetches.
Reset them to None, None when returning to the start line.
Sound bell when return to start line or cannot leave a line
because cyclic is False.
'''
nhist
=
len
(
self
.
history
)
pointer
=
self
.
pointer
prefix
=
self
.
prefix
...
...
@@ -64,7 +70,7 @@ class History:
else
:
if
self
.
cyclic
:
pointer
=
-
1
# will be incremented
else
:
else
:
# abort history_next
self
.
text
.
bell
()
return
nprefix
=
len
(
prefix
)
...
...
@@ -75,7 +81,7 @@ class History:
pointer
=
pointer
+
1
if
pointer
<
0
or
pointer
>=
nhist
:
self
.
text
.
bell
()
if
not
self
.
cyclic
and
pointer
<
0
:
if
not
self
.
cyclic
and
pointer
<
0
:
# abort history_prev
return
else
:
if
self
.
_get_source
(
"iomark"
,
"end-1c"
)
!=
prefix
:
...
...
@@ -106,3 +112,9 @@ class History:
self
.
history
.
append
(
source
)
self
.
pointer
=
None
self
.
prefix
=
None
if
__name__
==
"__main__"
:
from
test
import
support
support
.
use_resources
=
[
'gui'
]
from
unittest
import
main
main
(
'idlelib.idle_test.test_idlehistory'
,
verbosity
=
2
,
exit
=
False
)
Lib/idlelib/idle_test/test_idlehistory.py
0 → 100644
View file @
c2564f93
import
unittest
from
test.support
import
requires
import
tkinter
as
tk
from
tkinter
import
Text
as
tkText
from
idlelib.idle_test.mock_tk
import
Text
as
mkText
from
idlelib.IdleHistory
import
History
from
idlelib.configHandler
import
idleConf
line1
=
'a = 7'
line2
=
'b = a'
class
StoreTest
(
unittest
.
TestCase
):
'''Tests History.__init__ and History.store with mock Text'''
@
classmethod
def
setUpClass
(
cls
):
cls
.
text
=
mkText
()
cls
.
history
=
History
(
cls
.
text
)
def
tearDown
(
self
):
self
.
text
.
delete
(
'1.0'
,
'end'
)
self
.
history
.
history
=
[]
def
test_init
(
self
):
self
.
assertIs
(
self
.
history
.
text
,
self
.
text
)
self
.
assertEqual
(
self
.
history
.
history
,
[])
self
.
assertIsNone
(
self
.
history
.
prefix
)
self
.
assertIsNone
(
self
.
history
.
pointer
)
self
.
assertEqual
(
self
.
history
.
cyclic
,
idleConf
.
GetOption
(
"main"
,
"History"
,
"cyclic"
,
1
,
"bool"
))
def
test_store_short
(
self
):
self
.
history
.
store
(
'a'
)
self
.
assertEqual
(
self
.
history
.
history
,
[])
self
.
history
.
store
(
' a '
)
self
.
assertEqual
(
self
.
history
.
history
,
[])
def
test_store_dup
(
self
):
self
.
history
.
store
(
line1
)
self
.
assertEqual
(
self
.
history
.
history
,
[
line1
])
self
.
history
.
store
(
line2
)
self
.
assertEqual
(
self
.
history
.
history
,
[
line1
,
line2
])
self
.
history
.
store
(
line1
)
self
.
assertEqual
(
self
.
history
.
history
,
[
line2
,
line1
])
def
test_store_reset
(
self
):
self
.
history
.
prefix
=
line1
self
.
history
.
pointer
=
0
self
.
history
.
store
(
line2
)
self
.
assertIsNone
(
self
.
history
.
prefix
)
self
.
assertIsNone
(
self
.
history
.
pointer
)
class
TextWrapper
:
def
__init__
(
self
,
master
):
self
.
text
=
tkText
(
master
=
master
)
self
.
_bell
=
False
def
__getattr__
(
self
,
name
):
return
getattr
(
self
.
text
,
name
)
def
bell
(
self
):
self
.
_bell
=
True
class
FetchTest
(
unittest
.
TestCase
):
'''Test History.fetch with wrapped tk.Text.
'''
@
classmethod
def
setUpClass
(
cls
):
requires
(
'gui'
)
cls
.
root
=
tk
.
Tk
()
def
setUp
(
self
):
self
.
text
=
text
=
TextWrapper
(
self
.
root
)
text
.
insert
(
'1.0'
,
">>> "
)
text
.
mark_set
(
'iomark'
,
'1.4'
)
text
.
mark_gravity
(
'iomark'
,
'left'
)
self
.
history
=
History
(
text
)
self
.
history
.
history
=
[
line1
,
line2
]
@
classmethod
def
tearDownClass
(
cls
):
cls
.
root
.
destroy
()
def
fetch_test
(
self
,
reverse
,
line
,
prefix
,
index
,
*
,
bell
=
False
):
# Perform one fetch as invoked by Alt-N or Alt-P
# Test the result. The line test is the most important.
# The last two are diagnostic of fetch internals.
History
=
self
.
history
History
.
fetch
(
reverse
)
Equal
=
self
.
assertEqual
Equal
(
self
.
text
.
get
(
'iomark'
,
'end-1c'
),
line
)
Equal
(
self
.
text
.
_bell
,
bell
)
if
bell
:
self
.
text
.
_bell
=
False
Equal
(
History
.
prefix
,
prefix
)
Equal
(
History
.
pointer
,
index
)
def
test_fetch_prev_cyclic
(
self
):
prefix
=
''
test
=
self
.
fetch_test
test
(
True
,
line2
,
prefix
,
1
)
test
(
True
,
line1
,
prefix
,
0
)
test
(
True
,
prefix
,
None
,
None
,
bell
=
True
)
def
test_fetch_next_cyclic
(
self
):
prefix
=
''
test
=
self
.
fetch_test
test
(
False
,
line1
,
prefix
,
0
)
test
(
False
,
line2
,
prefix
,
1
)
test
(
False
,
prefix
,
None
,
None
,
bell
=
True
)
# Prefix 'a' tests skip line2, which starts with 'b'
def
test_fetch_prev_prefix
(
self
):
prefix
=
'a'
self
.
text
.
insert
(
'iomark'
,
prefix
)
self
.
fetch_test
(
True
,
line1
,
prefix
,
0
)
self
.
fetch_test
(
True
,
prefix
,
None
,
None
,
bell
=
True
)
def
test_fetch_next_prefix
(
self
):
prefix
=
'a'
self
.
text
.
insert
(
'iomark'
,
prefix
)
self
.
fetch_test
(
False
,
line1
,
prefix
,
0
)
self
.
fetch_test
(
False
,
prefix
,
None
,
None
,
bell
=
True
)
def
test_fetch_prev_noncyclic
(
self
):
prefix
=
''
self
.
history
.
cyclic
=
False
test
=
self
.
fetch_test
test
(
True
,
line2
,
prefix
,
1
)
test
(
True
,
line1
,
prefix
,
0
)
test
(
True
,
line1
,
prefix
,
0
,
bell
=
True
)
def
test_fetch_next_noncyclic
(
self
):
prefix
=
''
self
.
history
.
cyclic
=
False
test
=
self
.
fetch_test
test
(
False
,
prefix
,
None
,
None
,
bell
=
True
)
test
(
True
,
line2
,
prefix
,
1
)
test
(
False
,
prefix
,
None
,
None
,
bell
=
True
)
test
(
False
,
prefix
,
None
,
None
,
bell
=
True
)
def
test_fetch_cursor_move
(
self
):
# Move cursor after fetch
self
.
history
.
fetch
(
reverse
=
True
)
# initialization
self
.
text
.
mark_set
(
'insert'
,
'iomark'
)
self
.
fetch_test
(
True
,
line2
,
None
,
None
,
bell
=
True
)
def
test_fetch_edit
(
self
):
# Edit after fetch
self
.
history
.
fetch
(
reverse
=
True
)
# initialization
self
.
text
.
delete
(
'iomark'
,
'insert'
,
)
self
.
text
.
insert
(
'iomark'
,
'a ='
)
self
.
fetch_test
(
True
,
line1
,
'a ='
,
0
)
# prefix is reset
def
test_history_prev_next
(
self
):
# Minimally test functions bound to events
self
.
history
.
history_prev
(
'dummy event'
)
self
.
assertEqual
(
self
.
history
.
pointer
,
1
)
self
.
history
.
history_next
(
'dummy event'
)
self
.
assertEqual
(
self
.
history
.
pointer
,
None
)
if
__name__
==
'__main__'
:
unittest
.
main
(
verbosity
=
2
,
exit
=
2
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment