Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
cpython
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
cpython
Commits
fa3b9cc7
Kaydet (Commit)
fa3b9cc7
authored
Haz 17, 2014
tarafından
Terry Jan Reedy
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Issue #21694: Add unittest for ParenMatch. Patch by Saimadhav Heblikar.
üst
24b8209a
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
131 additions
and
4 deletions
+131
-4
ParenMatch.py
Lib/idlelib/ParenMatch.py
+10
-4
test_parenmatch.py
Lib/idlelib/idle_test/test_parenmatch.py
+121
-0
No files found.
Lib/idlelib/ParenMatch.py
Dosyayı görüntüle @
fa3b9cc7
...
@@ -90,7 +90,8 @@ class ParenMatch:
...
@@ -90,7 +90,8 @@ class ParenMatch:
self
.
set_timeout
=
self
.
set_timeout_none
self
.
set_timeout
=
self
.
set_timeout_none
def
flash_paren_event
(
self
,
event
):
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
:
if
indices
is
None
:
self
.
warn_mismatched
()
self
.
warn_mismatched
()
return
return
...
@@ -167,6 +168,11 @@ class ParenMatch:
...
@@ -167,6 +168,11 @@ class ParenMatch:
# associate a counter with an event; only disable the "paren"
# associate a counter with an event; only disable the "paren"
# tag if the event is for the most recent timer.
# tag if the event is for the most recent timer.
self
.
counter
+=
1
self
.
counter
+=
1
self
.
editwin
.
text_frame
.
after
(
self
.
FLASH_DELAY
,
self
.
editwin
.
text_frame
.
after
(
lambda
self
=
self
,
c
=
self
.
counter
:
\
self
.
FLASH_DELAY
,
self
.
handle_restore_timer
(
c
))
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
Dosyayı görüntüle @
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