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
0263c80b
Commit
0263c80b
authored
Aug 09, 2001
by
Guido van Rossum
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Unittests for mhlib, by Nick Mathewson.
parent
29206bc8
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
328 additions
and
0 deletions
+328
-0
Lib/test/test_mhlib.py
Lib/test/test_mhlib.py
+328
-0
No files found.
Lib/test/test_mhlib.py
0 → 100644
View file @
0263c80b
"""
Tests for the mhlib module
Nick Mathewson
"""
### BUG: This suite doesn't currently test the mime functionality of
### mhlib. It should.
import
unittest
from
test_support
import
run_unittest
,
TESTFN
import
os
,
StringIO
import
mhlib
_mhroot
=
TESTFN
+
"_MH"
_mhpath
=
os
.
path
.
join
(
_mhroot
,
"MH"
)
_mhprofile
=
os
.
path
.
join
(
_mhroot
,
".mh_profile"
)
def
normF
(
f
):
return
os
.
path
.
join
(
*
f
.
split
(
'/'
))
def
writeFile
(
fname
,
contents
):
dir
=
os
.
path
.
split
(
fname
)[
0
]
if
dir
and
not
os
.
path
.
exists
(
dir
):
mkdirs
(
dir
)
f
=
open
(
fname
,
'w'
)
f
.
write
(
contents
)
f
.
close
()
def
readFile
(
fname
):
f
=
open
(
fname
)
r
=
f
.
read
()
f
.
close
()
return
r
def
writeProfile
(
dict
):
contents
=
[
"%s: %s
\
n
"
%
(
k
,
v
)
for
k
,
v
in
dict
.
iteritems
()
]
writeFile
(
_mhprofile
,
""
.
join
(
contents
))
def
writeContext
(
folder
):
folder
=
normF
(
folder
)
writeFile
(
os
.
path
.
join
(
_mhpath
,
"context"
),
"Current-Folder: %s
\
n
"
%
folder
)
def
writeCurMessage
(
folder
,
cur
):
folder
=
normF
(
folder
)
writeFile
(
os
.
path
.
join
(
_mhpath
,
folder
,
".mh_sequences"
),
"cur: %s
\
n
"
%
cur
)
def
writeMessage
(
folder
,
n
,
headers
,
body
):
folder
=
normF
(
folder
)
headers
=
""
.
join
([
"%s: %s
\
n
"
%
(
k
,
v
)
for
k
,
v
in
headers
.
iteritems
()
])
contents
=
"%s
\
n
%s
\
n
"
%
(
headers
,
body
)
mkdirs
(
os
.
path
.
join
(
_mhpath
,
folder
))
writeFile
(
os
.
path
.
join
(
_mhpath
,
folder
,
str
(
n
)),
contents
)
def
getMH
():
return
mhlib
.
MH
(
os
.
path
.
abspath
(
_mhpath
),
_mhprofile
)
def
sortLines
(
s
):
lines
=
s
.
split
(
"
\
n
"
)
lines
=
[
line
.
strip
()
for
line
in
lines
if
len
(
line
)
>=
2
]
lines
.
sort
()
return
lines
# These next 2 functions are copied from test_glob.py.
def
mkdirs
(
fname
):
if
os
.
path
.
exists
(
fname
)
or
fname
==
''
:
return
base
,
file
=
os
.
path
.
split
(
fname
)
mkdirs
(
base
)
os
.
mkdir
(
fname
)
def
deltree
(
fname
):
if
not
os
.
path
.
exists
(
fname
):
return
for
f
in
os
.
listdir
(
fname
):
fullname
=
os
.
path
.
join
(
fname
,
f
)
if
os
.
path
.
isdir
(
fullname
):
deltree
(
fullname
)
else
:
try
:
os
.
unlink
(
fullname
)
except
:
pass
try
:
os
.
rmdir
(
fname
)
except
:
pass
class
MhlibTests
(
unittest
.
TestCase
):
def
setUp
(
self
):
deltree
(
_mhroot
)
mkdirs
(
_mhpath
)
writeProfile
({
'Path'
:
os
.
path
.
abspath
(
_mhpath
),
'Editor'
:
'emacs'
,
'ignored-attribute'
:
'camping holiday'
})
# Note: These headers aren't really conformant to RFC822, but
# mhlib shouldn't care about that.
# An inbox with a couple of messages.
writeMessage
(
'inbox'
,
1
,
{
'From'
:
'Mrs. Premise'
,
'To'
:
'Mrs. Conclusion'
,
'Date'
:
'18 July 2001'
},
"Hullo, Mrs. Conclusion!
\
n
"
)
writeMessage
(
'inbox'
,
2
,
{
'From'
:
'Mrs. Conclusion'
,
'To'
:
'Mrs. Premise'
,
'Date'
:
'29 July 2001'
},
"Hullo, Mrs. Premise!
\
n
"
)
# A folder with many messages
for
i
in
range
(
5
,
101
)
+
range
(
101
,
201
,
2
):
writeMessage
(
'wide'
,
i
,
{
'From'
:
'nowhere'
,
'Subject'
:
'message #%s'
%
i
},
"This is message number %s
\
n
"
%
i
)
# A deeply nested folder
def
deep
(
folder
,
n
):
writeMessage
(
folder
,
n
,
{
'Subject'
:
'Message %s/%s'
%
(
folder
,
n
)
},
"This is message number %s in %s
\
n
"
%
(
n
,
folder
)
)
deep
(
'deep/f1'
,
1
)
deep
(
'deep/f1'
,
2
)
deep
(
'deep/f1'
,
3
)
deep
(
'deep/f2'
,
4
)
deep
(
'deep/f2'
,
6
)
deep
(
'deep'
,
3
)
deep
(
'deep/f2/f3'
,
1
)
deep
(
'deep/f2/f3'
,
2
)
def
tearDown
(
self
):
deltree
(
_mhroot
)
def
test_basic
(
self
):
writeContext
(
'inbox'
)
writeCurMessage
(
'inbox'
,
2
)
mh
=
getMH
()
eq
=
self
.
assertEquals
eq
(
mh
.
getprofile
(
'Editor'
),
'emacs'
)
eq
(
mh
.
getprofile
(
'not-set'
),
None
)
eq
(
mh
.
getpath
(),
os
.
path
.
abspath
(
_mhpath
))
eq
(
mh
.
getcontext
(),
'inbox'
)
mh
.
setcontext
(
'wide'
)
eq
(
mh
.
getcontext
(),
'wide'
)
eq
(
readFile
(
os
.
path
.
join
(
_mhpath
,
'context'
)),
"Current-Folder: wide
\
n
"
)
mh
.
setcontext
(
'inbox'
)
inbox
=
mh
.
openfolder
(
'inbox'
)
eq
(
inbox
.
getfullname
(),
os
.
path
.
join
(
os
.
path
.
abspath
(
_mhpath
),
'inbox'
))
eq
(
inbox
.
getsequencesfilename
(),
os
.
path
.
join
(
os
.
path
.
abspath
(
_mhpath
),
'inbox'
,
'.mh_sequences'
))
eq
(
inbox
.
getmessagefilename
(
1
),
os
.
path
.
join
(
os
.
path
.
abspath
(
_mhpath
),
'inbox'
,
'1'
))
def
test_listfolders
(
self
):
mh
=
getMH
()
eq
=
self
.
assertEquals
folders
=
mh
.
listfolders
()
folders
.
sort
()
eq
(
folders
,
[
'deep'
,
'inbox'
,
'wide'
])
folders
=
mh
.
listallfolders
()
folders
.
sort
()
eq
(
folders
,
map
(
normF
,
[
'deep'
,
'deep/f1'
,
'deep/f2'
,
'deep/f2/f3'
,
'inbox'
,
'wide'
]))
folders
=
mh
.
listsubfolders
(
'deep'
)
folders
.
sort
()
eq
(
folders
,
map
(
normF
,
[
'deep/f1'
,
'deep/f2'
]))
folders
=
mh
.
listallsubfolders
(
'deep'
)
folders
.
sort
()
eq
(
folders
,
map
(
normF
,
[
'deep/f1'
,
'deep/f2'
,
'deep/f2/f3'
]))
eq
(
mh
.
listsubfolders
(
normF
(
'deep/f2'
)),
[
normF
(
'deep/f2/f3'
)])
eq
(
mh
.
listsubfolders
(
'inbox'
),
[])
eq
(
mh
.
listallsubfolders
(
'inbox'
),
[])
def
test_sequence
(
self
):
mh
=
getMH
()
eq
=
self
.
assertEquals
writeCurMessage
(
'wide'
,
55
)
f
=
mh
.
openfolder
(
'wide'
)
all
=
f
.
listmessages
()
eq
(
all
,
range
(
5
,
101
)
+
range
(
101
,
201
,
2
))
eq
(
f
.
getcurrent
(),
55
)
f
.
setcurrent
(
99
)
eq
(
readFile
(
os
.
path
.
join
(
_mhpath
,
'wide'
,
'.mh_sequences'
)),
'cur: 99
\
n
'
)
def
seqeq
(
seq
,
val
):
eq
(
f
.
parsesequence
(
seq
),
val
)
seqeq
(
'5-55'
,
range
(
5
,
56
))
seqeq
(
'90-108'
,
range
(
90
,
101
)
+
range
(
101
,
109
,
2
))
seqeq
(
'90-108'
,
range
(
90
,
101
)
+
range
(
101
,
109
,
2
))
seqeq
(
'10:10'
,
range
(
10
,
20
))
seqeq
(
'10:+10'
,
range
(
10
,
20
))
seqeq
(
'101:10'
,
range
(
101
,
121
,
2
))
seqeq
(
'cur'
,
[
99
])
seqeq
(
'.'
,
[
99
])
seqeq
(
'prev'
,
[
98
])
seqeq
(
'next'
,
[
100
])
seqeq
(
'cur:-3'
,
[
97
,
98
,
99
])
seqeq
(
'first-cur'
,
range
(
5
,
100
))
seqeq
(
'150-last'
,
range
(
151
,
201
,
2
))
seqeq
(
'prev-next'
,
[
98
,
99
,
100
])
lowprimes
=
[
5
,
7
,
11
,
13
,
17
,
19
,
23
,
29
]
lowcompos
=
[
x
for
x
in
range
(
5
,
31
)
if
not
x
in
lowprimes
]
f
.
putsequences
({
'cur'
:
[
5
],
'lowprime'
:
lowprimes
,
'lowcompos'
:
lowcompos
})
seqs
=
readFile
(
os
.
path
.
join
(
_mhpath
,
'wide'
,
'.mh_sequences'
))
seqs
=
sortLines
(
seqs
)
eq
(
seqs
,
[
"cur: 5"
,
"lowcompos: 6 8-10 12 14-16 18 20-22 24-28 30"
,
"lowprime: 5 7 11 13 17 19 23 29"
])
seqeq
(
'lowprime'
,
lowprimes
)
seqeq
(
'lowprime:1'
,
[
5
])
seqeq
(
'lowprime:2'
,
[
5
,
7
])
seqeq
(
'lowprime:-2'
,
[
23
,
29
])
## Not supported
#seqeq('lowprime:first', [5])
#seqeq('lowprime:last', [29])
#seqeq('lowprime:prev', [29])
#seqeq('lowprime:next', [29])
def
test_modify
(
self
):
mh
=
getMH
()
eq
=
self
.
assertEquals
mh
.
makefolder
(
"dummy1"
)
self
.
assert_
(
"dummy1"
in
mh
.
listfolders
())
path
=
os
.
path
.
join
(
_mhpath
,
"dummy1"
)
self
.
assert_
(
os
.
path
.
exists
(
path
))
f
=
mh
.
openfolder
(
'dummy1'
)
def
create
(
n
):
msg
=
"From: foo
\
n
Subject: %s
\
n
\
n
Dummy Message %s
\
n
"
%
(
n
,
n
)
f
.
createmessage
(
n
,
StringIO
.
StringIO
(
msg
))
create
(
7
)
create
(
8
)
create
(
9
)
eq
(
readFile
(
f
.
getmessagefilename
(
9
)),
"From: foo
\
n
Subject: 9
\
n
\
n
Dummy Message 9
\
n
"
)
eq
(
f
.
listmessages
(),
[
7
,
8
,
9
])
files
=
os
.
listdir
(
path
)
files
.
sort
()
eq
(
files
,
[
'7'
,
'8'
,
'9'
])
f
.
removemessages
([
'7'
,
'8'
])
files
=
os
.
listdir
(
path
)
files
.
sort
()
eq
(
files
,
[
',7'
,
',8'
,
'9'
])
eq
(
f
.
listmessages
(),
[
9
])
create
(
10
)
create
(
11
)
create
(
12
)
mh
.
makefolder
(
"dummy2"
)
f2
=
mh
.
openfolder
(
"dummy2"
)
eq
(
f2
.
listmessages
(),
[])
f
.
movemessage
(
10
,
f2
,
3
)
f
.
movemessage
(
11
,
f2
,
5
)
eq
(
f
.
listmessages
(),
[
9
,
12
])
eq
(
f2
.
listmessages
(),
[
3
,
5
])
eq
(
readFile
(
f2
.
getmessagefilename
(
3
)),
"From: foo
\
n
Subject: 10
\
n
\
n
Dummy Message 10
\
n
"
)
f
.
copymessage
(
9
,
f2
,
4
)
eq
(
f
.
listmessages
(),
[
9
,
12
])
eq
(
readFile
(
f2
.
getmessagefilename
(
4
)),
"From: foo
\
n
Subject: 9
\
n
\
n
Dummy Message 9
\
n
"
)
f
.
refilemessages
([
9
,
12
],
f2
)
eq
(
f
.
listmessages
(),
[])
eq
(
f2
.
listmessages
(),
[
3
,
4
,
5
,
6
,
7
])
eq
(
readFile
(
f2
.
getmessagefilename
(
7
)),
"From: foo
\
n
Subject: 12
\
n
\
n
Dummy Message 12
\
n
"
)
# XXX This should check that _copysequences does the right thing.
mh
.
deletefolder
(
'dummy1'
)
mh
.
deletefolder
(
'dummy2'
)
self
.
assert_
(
'dummy1'
not
in
mh
.
listfolders
())
self
.
assert_
(
not
os
.
path
.
exists
(
path
))
def
test_read
(
self
):
mh
=
getMH
()
eq
=
self
.
assertEquals
f
=
mh
.
openfolder
(
'inbox'
)
msg
=
f
.
openmessage
(
1
)
# Check some basic stuff from rfc822
eq
(
msg
.
getheader
(
'From'
),
"Mrs. Premise"
)
eq
(
msg
.
getheader
(
'To'
),
"Mrs. Conclusion"
)
# Okay, we have the right message. Let's check the stuff from
# mhlib.
lines
=
sortLines
(
msg
.
getheadertext
())
eq
(
lines
,
[
"Date: 18 July 2001"
,
"From: Mrs. Premise"
,
"To: Mrs. Conclusion"
])
lines
=
sortLines
(
msg
.
getheadertext
(
lambda
h
:
len
(
h
)
==
4
))
eq
(
lines
,
[
"Date: 18 July 2001"
,
"From: Mrs. Premise"
])
eq
(
msg
.
getbodytext
(),
"Hullo, Mrs. Conclusion!
\
n
\
n
"
)
eq
(
msg
.
getbodytext
(
0
),
"Hullo, Mrs. Conclusion!
\
n
\
n
"
)
# XXXX there should be a better way to reclaim the file handle
msg
.
fp
.
close
()
del
msg
run_unittest
(
MhlibTests
)
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