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
fa3b9cc7
Commit
fa3b9cc7
authored
Jun 17, 2014
by
Terry Jan Reedy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Issue #21694: Add unittest for ParenMatch. Patch by Saimadhav Heblikar.
parent
24b8209a
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
131 additions
and
4 deletions
+131
-4
Lib/idlelib/ParenMatch.py
Lib/idlelib/ParenMatch.py
+10
-4
Lib/idlelib/idle_test/test_parenmatch.py
Lib/idlelib/idle_test/test_parenmatch.py
+121
-0
No files found.
Lib/idlelib/ParenMatch.py
View file @
fa3b9cc7
...
...
@@ -90,7 +90,8 @@ class ParenMatch:
self
.
set_timeout
=
self
.
set_timeout_none
def
flash_paren_event
(
self
,
event
):
indices
=
HyperParser
(
self
.
editwin
,
"insert"
).
get_surrounding_brackets
()
indices
=
(
HyperParser
(
self
.
editwin
,
"insert"
)
.
get_surrounding_brackets
())
if
indices
is
None
:
self
.
warn_mismatched
()
return
...
...
@@ -167,6 +168,11 @@ class ParenMatch:
# associate a counter with an event; only disable the "paren"
# tag if the event is for the most recent timer.
self
.
counter
+=
1
self
.
editwin
.
text_frame
.
after
(
self
.
FLASH_DELAY
,
lambda
self
=
self
,
c
=
self
.
counter
:
\
self
.
handle_restore_timer
(
c
))
self
.
editwin
.
text_frame
.
after
(
self
.
FLASH_DELAY
,
lambda
self
=
self
,
c
=
self
.
counter
:
self
.
handle_restore_timer
(
c
))
if
__name__
==
'__main__'
:
import
unittest
unittest
.
main
(
'idlelib.idle_test.test_parenmatch'
,
verbosity
=
2
)
Lib/idlelib/idle_test/test_parenmatch.py
0 → 100644
View file @
fa3b9cc7
"""Test idlelib.ParenMatch."""
# This must currently be a gui test because ParenMatch methods use
# several text methods not defined on idlelib.idle_test.mock_tk.Text.
import
unittest
from
test.test_support
import
requires
from
Tkinter
import
Tk
,
Text
from
idlelib.ParenMatch
import
ParenMatch
class
Mock
:
# 2.7 does not have unittest.mock
def
__init__
(
self
,
*
args
,
**
kwargs
):
self
.
called
=
False
def
__call__
(
self
,
*
args
,
**
kwargs
):
self
.
called
=
True
def
reset_mock
(
self
,
*
args
,
**
kwargs
):
self
.
called
=
False
def
after
(
self
,
*
args
,
**
kwargs
):
pass
class
DummyEditwin
:
def
__init__
(
self
,
text
):
self
.
text
=
text
self
.
indentwidth
=
8
self
.
tabwidth
=
8
self
.
context_use_ps1
=
True
class
ParenMatchTest
(
unittest
.
TestCase
):
@
classmethod
def
setUpClass
(
cls
):
requires
(
'gui'
)
cls
.
root
=
Tk
()
cls
.
text
=
Text
(
cls
.
root
)
cls
.
editwin
=
DummyEditwin
(
cls
.
text
)
cls
.
editwin
.
text_frame
=
Mock
()
@
classmethod
def
tearDownClass
(
cls
):
del
cls
.
text
,
cls
.
editwin
cls
.
root
.
destroy
()
del
cls
.
root
def
tearDown
(
self
):
self
.
text
.
delete
(
'1.0'
,
'end'
)
def
test_paren_expression
(
self
):
"""
Test ParenMatch with 'expression' style.
"""
text
=
self
.
text
pm
=
ParenMatch
(
self
.
editwin
)
pm
.
set_style
(
'expression'
)
text
.
insert
(
'insert'
,
'def foobar(a, b'
)
pm
.
flash_paren_event
(
'event'
)
self
.
assertIn
(
'<<parenmatch-check-restore>>'
,
text
.
event_info
())
self
.
assertTupleEqual
(
text
.
tag_prevrange
(
'paren'
,
'end'
),
(
'1.10'
,
'1.15'
))
text
.
insert
(
'insert'
,
')'
)
pm
.
restore_event
()
self
.
assertNotIn
(
'<<parenmatch-check-restore>>'
,
text
.
event_info
())
self
.
assertEqual
(
text
.
tag_prevrange
(
'paren'
,
'end'
),
())
# paren_closed_event can only be tested as below
pm
.
paren_closed_event
(
'event'
)
self
.
assertTupleEqual
(
text
.
tag_prevrange
(
'paren'
,
'end'
),
(
'1.10'
,
'1.16'
))
def
test_paren_default
(
self
):
"""
Test ParenMatch with 'default' style.
"""
text
=
self
.
text
pm
=
ParenMatch
(
self
.
editwin
)
pm
.
set_style
(
'default'
)
text
.
insert
(
'insert'
,
'def foobar(a, b'
)
pm
.
flash_paren_event
(
'event'
)
self
.
assertIn
(
'<<parenmatch-check-restore>>'
,
text
.
event_info
())
self
.
assertTupleEqual
(
text
.
tag_prevrange
(
'paren'
,
'end'
),
(
'1.10'
,
'1.11'
))
text
.
insert
(
'insert'
,
')'
)
pm
.
restore_event
()
self
.
assertNotIn
(
'<<parenmatch-check-restore>>'
,
text
.
event_info
())
self
.
assertEqual
(
text
.
tag_prevrange
(
'paren'
,
'end'
),
())
def
test_paren_corner
(
self
):
"""
Test corner cases in flash_paren_event and paren_closed_event.
These cases force conditional expression and alternate paths.
"""
text
=
self
.
text
pm
=
ParenMatch
(
self
.
editwin
)
text
.
insert
(
'insert'
,
'# this is a commen)'
)
self
.
assertIsNone
(
pm
.
paren_closed_event
(
'event'
))
text
.
insert
(
'insert'
,
'
\
n
def'
)
self
.
assertIsNone
(
pm
.
flash_paren_event
(
'event'
))
self
.
assertIsNone
(
pm
.
paren_closed_event
(
'event'
))
text
.
insert
(
'insert'
,
' a, *arg)'
)
self
.
assertIsNone
(
pm
.
paren_closed_event
(
'event'
))
def
test_handle_restore_timer
(
self
):
pm
=
ParenMatch
(
self
.
editwin
)
pm
.
restore_event
=
Mock
()
pm
.
handle_restore_timer
(
0
)
self
.
assertTrue
(
pm
.
restore_event
.
called
)
pm
.
restore_event
.
reset_mock
()
pm
.
handle_restore_timer
(
1
)
self
.
assertFalse
(
pm
.
restore_event
.
called
)
if
__name__
==
'__main__'
:
unittest
.
main
(
verbosity
=
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