1 #! /usr/bin/env python
2 import unittest
3 import warnings
5 import roundup.anypy.hashlib_
7 class UntestableWarning(Warning):
8 pass
10 # suppress deprecation warnings; -> warnings.filters[0]:
11 warnings.simplefilter(action='ignore',
12 category=DeprecationWarning,
13 append=0)
15 try:
16 import sha
17 except:
18 warnings.warn('sha module functions', UntestableWarning)
19 sha = None
21 try:
22 import md5
23 except:
24 warnings.warn('md5 module functions', UntestableWarning)
25 md5 = None
27 try:
28 import hashlib
29 except:
30 warnings.warn('hashlib module functions', UntestableWarning)
31 hashlib = None
33 # preserve other warning filters set elsewhere:
34 del warnings.filters[0]
36 if not ((sha or md5) and hashlib):
37 warnings.warn('anypy.hashlib_ continuity', UntestableWarning)
39 class TestCase_anypy_hashlib(unittest.TestCase):
40 """test the hashlib compatibility layer"""
42 data_for_test = (
43 ('',
44 'da39a3ee5e6b4b0d3255bfef95601890afd80709',
45 'd41d8cd98f00b204e9800998ecf8427e'),
46 ('Strange women lying in ponds distributing swords'
47 ' is no basis for a system of government.',
48 'da9b2b00466b00411038c057681fe67349f92d7d',
49 'b71c5178d316ec446c25386f4857d4f9'),
50 ('Ottos Mops hopst fort',
51 'fdf7e6c54cf07108c86edd8d47c90450671c2c81',
52 'a3dce74bee59ee92f1038263e5252500'),
53 ('Dieser Satz kein Verb',
54 '3030aded8a079b92043a39dc044a35443959dcdd',
55 '2f20c69d514228011fb0d32e14dd5d80'),
56 )
58 # the following two are always excecuted:
59 def test_sha1_expected_anypy(self):
60 """...anypy.hashlib_.sha1().hexdigest() yields expected results"""
61 for src, SHA, MD5 in self.data_for_test:
62 self.assertEqual(roundup.anypy.hashlib_.sha1(src).hexdigest(), SHA)
64 def test_md5_expected_anypy(self):
65 """...anypy.hashlib_.md5().hexdigest() yields expected results"""
66 for src, SHA, MD5 in self.data_for_test:
67 self.assertEqual(roundup.anypy.hashlib_.md5(src).hexdigest(), MD5)
69 # execution depending on availability of modules:
70 if md5 and hashlib:
71 def test_md5_continuity(self):
72 """md5.md5().digest() == hashlib.md5().digest()"""
73 if md5.md5 is hashlib.md5:
74 return
75 else:
76 for s, i1, i2 in self.data_for_test:
77 self.assertEqual(md5.md5(s).digest(),
78 hashlib.md5().digest())
80 if md5:
81 def test_md5_expected(self):
82 """md5.md5().hexdigest() yields expected results"""
83 for src, SHA, MD5 in self.data_for_test:
84 self.assertEqual(md5.md5(src).hexdigest(), MD5)
86 def test_md5_new_expected(self):
87 """md5.new is md5.md5, or at least yields expected results"""
88 if md5.new is md5.md5:
89 return
90 else:
91 for src, SHA, MD5 in self.data_for_test:
92 self.assertEqual(md5.new(src).hexdigest(), MD5)
94 if sha and hashlib:
95 def test_sha1_continuity(self):
96 """sha.sha().digest() == hashlib.sha1().digest()"""
97 if sha.sha is hashlib.sha1:
98 return
99 else:
100 for s in self.data_for_test:
101 self.assertEqual(sha.sha(s).digest(),
102 hashlib.sha1().digest())
104 if sha:
105 def test_sha_expected(self):
106 """sha.sha().hexdigest() yields expected results"""
107 for src, SHA, MD5 in self.data_for_test:
108 self.assertEqual(sha.sha(src).hexdigest(), SHA)
110 # fails for me with Python 2.3; unittest module bug?
111 def test_sha_new_expected(self):
112 """sha.new is sha.sha, or at least yields expected results"""
113 if sha.new is sha.sha:
114 return
115 else:
116 for src, SHA, MD5 in self.data_for_test:
117 self.assertEqual(sha.new(src).hexdigest(), SHA)
119 if hashlib:
120 def test_sha1_expected_hashlib(self):
121 """hashlib.sha1().hexdigest() yields expected results"""
122 for src, SHA, MD5 in self.data_for_test:
123 self.assertEqual(hashlib.sha1(src).hexdigest(), SHA)
125 def test_md5_expected_hashlib(self):
126 """hashlib.md5().hexdigest() yields expected results"""
127 for src, SHA, MD5 in self.data_for_test:
128 self.assertEqual(hashlib.md5(src).hexdigest(), MD5)
130 def test_suite():
131 suite = unittest.TestSuite()
132 suite.addTest(unittest.makeSuite(TestCase_anypy_hashlib))
133 return suite
135 if __name__ == '__main__':
136 runner = unittest.TextTestRunner()
137 unittest.main(testRunner=runner)
139 # vim: ts=8 et sts=4 sw=4 si