Code

Add compatibility package to allow us to deal with Python versions 2.3
[roundup.git] / test / test_anypy_hashlib.py
diff --git a/test/test_anypy_hashlib.py b/test/test_anypy_hashlib.py
new file mode 100644 (file)
index 0000000..cdfb4f1
--- /dev/null
@@ -0,0 +1,139 @@
+#! /usr/bin/env python
+import unittest
+import warnings
+
+import roundup.anypy.hashlib_
+
+class UntestableWarning(Warning):
+    pass
+
+# suppress deprecation warnings; -> warnings.filters[0]:
+warnings.simplefilter(action='ignore',
+                      category=DeprecationWarning,
+                      append=0)
+
+try:
+    import sha
+except:
+    warnings.warn('sha module functions', UntestableWarning)
+    sha = None
+
+try:
+    import md5
+except:
+    warnings.warn('md5 module functions', UntestableWarning)
+    md5 = None
+
+try:
+    import hashlib
+except:
+    warnings.warn('hashlib module functions', UntestableWarning)
+    hashlib = None
+
+# preserve other warning filters set elsewhere:
+del warnings.filters[0]
+
+if not ((sha or md5) and hashlib):
+    warnings.warn('anypy.hashlib_ continuity', UntestableWarning)
+
+class TestCase_anypy_hashlib(unittest.TestCase):
+    """test the hashlib compatibility layer"""
+
+    testdata = (
+           ('',
+            'da39a3ee5e6b4b0d3255bfef95601890afd80709',
+            'd41d8cd98f00b204e9800998ecf8427e'),
+           ('Strange women lying in ponds distributing swords'
+            ' is no basis for a system of government.',
+            'da9b2b00466b00411038c057681fe67349f92d7d',
+            'b71c5178d316ec446c25386f4857d4f9'),
+           ('Ottos Mops hopst fort',
+            'fdf7e6c54cf07108c86edd8d47c90450671c2c81',
+            'a3dce74bee59ee92f1038263e5252500'),
+           ('Dieser Satz kein Verb',
+            '3030aded8a079b92043a39dc044a35443959dcdd',
+            '2f20c69d514228011fb0d32e14dd5d80'),
+           )
+
+    # the following two are always excecuted: 
+    def test_sha1_expected_anypy(self):
+        """...anypy.hashlib_.sha1().hexdigest() yields expected results"""
+        for src, SHA, MD5 in self.testdata:
+            self.assertEqual(roundup.anypy.hashlib_.sha1(src).hexdigest(), SHA)
+
+    def test_md5_expected_anypy(self):
+        """...anypy.hashlib_.md5().hexdigest() yields expected results"""
+        for src, SHA, MD5 in self.testdata:
+            self.assertEqual(roundup.anypy.hashlib_.md5(src).hexdigest(), MD5)
+
+    # execution depending on availability of modules: 
+    if md5 and hashlib:
+        def test_md5_continuity(self):
+            """md5.md5().digest() == hashlib.md5().digest()"""
+            if md5.md5 is hashlib.md5:
+                return
+            else:
+                for s, i1, i2 in self.testdata:
+                    self.assertEqual(md5.md5(s).digest(),
+                                     hashlib.md5().digest())
+
+    if md5:
+        def test_md5_expected(self):
+            """md5.md5().hexdigest() yields expected results"""
+            for src, SHA, MD5 in self.testdata:
+                self.assertEqual(md5.md5(src).hexdigest(), MD5)
+
+        def test_md5_new_expected(self):
+            """md5.new is md5.md5, or at least yields expected results"""
+            if md5.new is md5.md5:
+                return
+            else:
+                for src, SHA, MD5 in self.testdata:
+                    self.assertEqual(md5.new(src).hexdigest(), MD5)
+
+    if sha and hashlib:
+        def test_sha1_continuity(self):
+            """sha.sha().digest() == hashlib.sha1().digest()"""
+            if sha.sha is hashlib.sha1:
+                return
+            else:
+                for s in self.testdata:
+                    self.assertEqual(sha.sha(s).digest(),
+                                     hashlib.sha1().digest())
+
+    if sha:
+        def test_sha_expected(self):
+            """sha.sha().hexdigest() yields expected results"""
+            for src, SHA, MD5 in self.testdata:
+                self.assertEqual(sha.sha(src).hexdigest(), SHA)
+
+        # fails for me with Python 2.3; unittest module bug?
+        def test_sha_new_expected(self):
+            """sha.new is sha.sha, or at least yields expected results"""
+            if sha.new is sha.sha:
+                return
+            else:
+                for src, SHA, MD5 in self.testdata:
+                    self.assertEqual(sha.new(src).hexdigest(), SHA)
+
+    if hashlib:
+        def test_sha1_expected_hashlib(self):
+            """hashlib.sha1().hexdigest() yields expected results"""
+            for src, SHA, MD5 in self.testdata:
+                self.assertEqual(hashlib.sha1(src).hexdigest(), SHA)
+
+        def test_md5_expected_hashlib(self):
+            """hashlib.md5().hexdigest() yields expected results"""
+            for src, SHA, MD5 in self.testdata:
+                self.assertEqual(hashlib.md5(src).hexdigest(), MD5)
+
+def test_suite():
+    suite = unittest.TestSuite()
+    suite.addTest(unittest.makeSuite(TestCase_anypy_hashlib))
+    return suite
+
+if __name__ == '__main__':
+    runner = unittest.TextTestRunner()
+    unittest.main(testRunner=runner)
+
+# vim: ts=8 et sts=4 sw=4 si