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
b54b0ca0
Commit
b54b0ca0
authored
Jun 22, 2013
by
Terry Jan Reedy
Browse files
Options
Browse Files
Download
Plain Diff
#18151 Merge from 3.3
parents
c77d9f38
de3beb26
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
98 additions
and
24 deletions
+98
-24
Lib/idlelib/GrepDialog.py
Lib/idlelib/GrepDialog.py
+18
-24
Lib/idlelib/idle_test/test_grep.py
Lib/idlelib/idle_test/test_grep.py
+80
-0
No files found.
Lib/idlelib/GrepDialog.py
View file @
b54b0ca0
...
...
@@ -81,36 +81,24 @@ class GrepDialog(SearchDialogBase):
hits
=
0
for
fn
in
list
:
try
:
f
=
open
(
fn
,
errors
=
'replace'
)
with
open
(
fn
,
errors
=
'replace'
)
as
f
:
for
lineno
,
line
in
enumerate
(
f
,
1
):
if
line
[
-
1
:]
==
'
\
n
'
:
line
=
line
[:
-
1
]
if
prog
.
search
(
line
):
sys
.
stdout
.
write
(
"%s: %s: %s
\
n
"
%
(
fn
,
lineno
,
line
))
hits
+=
1
except
OSError
as
msg
:
print
(
msg
)
continue
lineno
=
0
while
1
:
block
=
f
.
readlines
(
100000
)
if
not
block
:
break
for
line
in
block
:
lineno
=
lineno
+
1
if
line
[
-
1
:]
==
'
\
n
'
:
line
=
line
[:
-
1
]
if
prog
.
search
(
line
):
sys
.
stdout
.
write
(
"%s: %s: %s
\
n
"
%
(
fn
,
lineno
,
line
))
hits
=
hits
+
1
if
hits
:
if
hits
==
1
:
s
=
""
else
:
s
=
"s"
print
(
"Found"
,
hits
,
"hit%s."
%
s
)
print
(
"(Hint: right-click to open locations.)"
)
else
:
print
(
"No hits."
)
print
((
"Hits found: %s
\
n
"
"(Hint: right-click to open locations.)"
%
hits
)
if
hits
else
"No hits."
)
def
findfiles
(
self
,
dir
,
base
,
rec
):
try
:
names
=
os
.
listdir
(
dir
or
os
.
curdir
)
except
OS
E
rror
as
msg
:
except
OS
e
rror
as
msg
:
print
(
msg
)
return
[]
list
=
[]
...
...
@@ -131,3 +119,9 @@ class GrepDialog(SearchDialogBase):
if
self
.
top
:
self
.
top
.
grab_release
()
self
.
top
.
withdraw
()
if
__name__
==
"__main__"
:
# A human test is a bit tricky since EditorWindow() imports this module.
# Hence Idle must be restarted after editing this file for a live test.
import
unittest
unittest
.
main
(
'idlelib.idle_test.test_grep'
,
verbosity
=
2
,
exit
=
False
)
Lib/idlelib/idle_test/test_grep.py
0 → 100644
View file @
b54b0ca0
""" !Changing this line will break Test_findfile.test_found!
Non-gui unit tests for idlelib.GrepDialog methods.
dummy_command calls grep_it calls findfiles.
An exception raised in one method will fail callers.
Otherwise, tests are mostly independent.
*** Currently only test grep_it.
"""
import
unittest
from
test.support
import
captured_stdout
from
idlelib.idle_test.mock_tk
import
Var
from
idlelib.GrepDialog
import
GrepDialog
import
re
class
Dummy_searchengine
:
'''GrepDialog.__init__ calls parent SearchDiabolBase which attaches the
passed in SearchEngine instance as attribute 'engine'. Only a few of the
many possible self.engine.x attributes are needed here.
'''
def
getpat
(
self
):
return
self
.
_pat
searchengine
=
Dummy_searchengine
()
class
Dummy_grep
:
# Methods tested
#default_command = GrepDialog.default_command
grep_it
=
GrepDialog
.
grep_it
findfiles
=
GrepDialog
.
findfiles
# Other stuff needed
recvar
=
Var
(
False
)
engine
=
searchengine
def
close
(
self
):
# gui method
pass
grep
=
Dummy_grep
()
class
FindfilesTest
(
unittest
.
TestCase
):
# findfiles is really a function, not a method, could be iterator
# test that filename return filename
# test that idlelib has many .py files
# test that recursive flag adds idle_test .py files
pass
class
Grep_itTest
(
unittest
.
TestCase
):
# Test captured reports with 0 and some hits.
# Should test file names, but Windows reports have mixed / and \ separators
# from incomplete replacement, so 'later'.
def
report
(
self
,
pat
):
grep
.
engine
.
_pat
=
pat
with
captured_stdout
()
as
s
:
grep
.
grep_it
(
re
.
compile
(
pat
),
__file__
)
lines
=
s
.
getvalue
().
split
(
'
\
n
'
)
lines
.
pop
()
# remove bogus '' after last \n
return
lines
def
test_unfound
(
self
):
pat
=
'xyz*'
*
7
lines
=
self
.
report
(
pat
)
self
.
assertEqual
(
len
(
lines
),
2
)
self
.
assertIn
(
pat
,
lines
[
0
])
self
.
assertEqual
(
lines
[
1
],
'No hits.'
)
def
test_found
(
self
):
pat
=
'""" !Changing this line will break Test_findfile.test_found!'
lines
=
self
.
report
(
pat
)
self
.
assertEqual
(
len
(
lines
),
5
)
self
.
assertIn
(
pat
,
lines
[
0
])
self
.
assertIn
(
'py: 1:'
,
lines
[
1
])
# line number 1
self
.
assertIn
(
'2'
,
lines
[
3
])
# hits found 2
self
.
assertTrue
(
lines
[
4
].
startswith
(
'(Hint:'
))
class
Default_commandTest
(
unittest
.
TestCase
):
# To write this, mode OutputWindow import to top of GrepDialog
# so it can be replaced by captured_stdout in class setup/teardown.
pass
if
__name__
==
'__main__'
:
unittest
.
main
(
verbosity
=
2
,
exit
=
False
)
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