ref: e21659fda78e53fdcbed87290a51a178d26788f6
parent: d88cf9f4fdb0b874f9544ac54bcbf3b536665096
author: giles <giles@ded80894-8fb9-0310-811b-c03f3676ab4d>
date: Wed Jul 17 09:59:47 EDT 2002
Add a regression test script based on the python unittest framework. It looks for known files, runs 'jbig2dec --hash' and compares the result to the known correct value. Currently it looks for the ubc test files in '../ubc/' git-svn-id: http://svn.ghostscript.com/jbig2dec/trunk@143 ded80894-8fb9-0310-811b-c03f3676ab4d
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,4 +1,4 @@
-# $Id: Makefile.am,v 1.7 2002/07/15 23:25:30 giles Exp $
+# $Id: Makefile.am,v 1.8 2002/07/17 13:59:47 giles Exp $
## process this file with automake to generate Makefile.in
lib_LIBRARIES = libjbig2dec.a
@@ -17,3 +17,5 @@
jbig2dec_LDADD = libjbig2dec.a @LIBOBJS@
MAINTAINERCLEANFILES = config_types.h.in
+
+TESTS = test_jbig2dec.py
--- /dev/null
+++ b/test_jbig2dec.py
@@ -1,0 +1,133 @@
+#! /usr/bin/env python
+
+# this is the testtest script for jbig2dec
+
+import os, re
+import unittest
+
+class KnownFileHash(unittest.TestCase):
+ # these are known test files in the form
+ # (filename, sha-1(file), sha-1(decoded document)
+ known_hashes = ( ('../ubc/042_1.jb2',
+ "673e1ee5c55ab241b171e476ba1168a42733ddaa",
+ "ffffffffff5fffff2271ffff19ff0e52712046ff"),
+ ('../ubc/042_2.jb2',
+ "9aa2804e2d220952035c16fb3c907547884067c5",
+ "ffffffffff5fffff2271ffff19ff0e52712046ff"),
+ ('../ubc/042_3.jb2',
+ "9663a5f35727f13e61a0a2f0a64207b1f79e7d67",
+ "ffffffffff5fffff2271ffff19ff0e52712046ff"),
+ ('../ubc/042_4.jb2',
+ "014df658c8b99b600c2ceac3f1d53c7cc2b4917c",
+ "ffffffffff5fffff2271ffff19ff0e52712046ff"),
+ ('../ubc/042_5.jb2',
+ "264720a6ccbbf72aa6a2cfb6343f43b8e6f2da4b",
+ "ffffffffff5fffff2271ffff19ff0e52712046ff"),
+ ('../ubc/042_6.jb2',
+ "96f7dc9df4a1b305f9ac082dd136f85ef5b108fe",
+ "ffffffffff5fffff2271ffff19ff0e52712046ff"),
+ ('../ubc/042_7.jb2',
+ "5526371ba9dc2b8743f20ae3e05a7e60b3dcba76",
+ "ffffffffff5fffff2271ffff19ff0e52712046ff"),
+ ('../ubc/042_8.jb2',
+ "4bf0c87dfaf40d67c36f2a083579eeda26d54641",
+ "ffffffffff5fffff2271ffff19ff0e52712046ff"),
+ ('../ubc/042_9.jb2',
+ "53e630e7fe2fe6e1d6164758e15fc93382e07f55",
+ "ffffffffff5fffff2271ffff19ff0e52712046ff"),
+ ('../ubc/042_10.jb2',
+ "5ca1364367e25cb8f642e9dc677a94d5cfed0c8b",
+ "ffffffffff5fffff2271ffff19ff0e52712046ff"),
+ ('../ubc/042_11.jb2',
+ "bc194caf022bc5345fc41259e05cea3c08245216",
+ "ffffffffff5fffff2271ffff19ff0e52712046ff"),
+ ('../ubc/042_12.jb2',
+ "f354df8eb4849bc707f088739e322d1fe3a14ef3",
+ "ffffffffff5fffff2271ffff19ff0e52712046ff"),
+ ('../ubc/042_13.jb2',
+ "7d428bd542f58591b254d9827f554b0552c950a7",
+ "ffffffffff5fffff2271ffff19ff0e52712046ff"),
+ ('../ubc/042_14.jb2',
+ "c40fe3a02acb6359baf9b40fc9c49bc0800be589",
+ "ffffffffff5fffff2271ffff19ff0e52712046ff"),
+ ('../ubc/042_15.jb2',
+ "a9e39fc1ecb178aec9f05039514d75ea3246246c",
+ "ffffffffff5fffff2271ffff19ff0e52712046ff"),
+ ('../ubc/042_16.jb2',
+ "4008bbca43670f3c90eaee26516293ba95baaf3d",
+ "ffffffffff5fffff2271ffff19ff0e52712046ff"),
+ ('../ubc/042_17.jb2',
+ "0ff95637b64c57d659a41c582da03e25321551fb",
+ "ffffffffff5fffff2271ffff19ff0e52712046ff"),
+ ('../ubc/042_18.jb2',
+ "87381d044f00c4329200e44decbe91bebfa31595",
+ "ffffffffff5fffff2271ffff19ff0e52712046ff"),
+ ('../ubc/042_19.jb2',
+ "387d95a140b456d4742622c788cf5b51cebbf438",
+ "ffffffffff5fffff2271ffff19ff0e52712046ff"),
+ ('../ubc/042_20.jb2',
+ "85c19e9ec42b8ddd6b860a1bebea1c67610e7a59",
+ "ffffffffff5fffff2271ffff19ff0e52712046ff"),
+ ('../ubc/042_21.jb2',
+ "ab535c7d7a61a7b9dc53d546e7419ca78ac7f447",
+ "ffffffffff5fffff2271ffff19ff0e52712046ff"),
+ ('../ubc/042_22.jb2',
+ "a9e2b365be63716dbde74b0661c3c6efd2a6844d",
+ "ffffffffff5fffff2271ffff19ff0e52712046ff"),
+ ('../ubc/042_23.jb2',
+ "8ffa40a05e93e10982b38a2233a8da58c1b5c343",
+ "ffffffffff5fffff2271ffff19ff0e52712046ff"),
+ ('../ubc/042_24.jb2',
+ "2553fe65111c58f6412de51d8cdc71651e778ccf",
+ "ffffffffff5fffff2271ffff19ff0e52712046ff"),
+ ('../ubc/042_25.jb2',
+ "52de4a3b86252d896a8d783ba71dd0699333dd69",
+ "ffffffffff5fffff2271ffff19ff0e52712046ff"),
+ ('../ubc/amb_1.jb2', # we don't have a correct hash for this yet
+ "d6d6d1c981dc37a09108c1e3ed990aa5b345fa6a",
+ "ff32ffff0776ff66ff254129ff28ffffffff6bff"),
+ ('../ubc/amb_2.jb2', # we don't have a correct hash for this yet
+ "9af6616a89eb03f8934de72626e301a716366c3c",
+ "ff32ffff0776ff66ff254129ff28ffffffff6bff"),
+ ('../str-p39',
+ "1a303e33d3ea57eb7e19a676a1b2f28baa29b045",
+ "ff373f070f5f405b732c53ffffff087eff22ff5b") )
+
+ def __init__(self, file, file_hash, decode_hash):
+ self.file = file
+ self.file_hash = file_hash
+ self.decode_hash = decode_hash
+ unittest.TestCase.__init__(self)
+ def shortDescription(self):
+ return "Checking '%s' for correct decoded document hash" % self.file
+ def runTest(self):
+ '''jbig2dec should return proper document hashes for known files'''
+ # invoke jbig2dec on our file
+ instance = os.popen('./jbig2dec -q -o /dev/null --hash ' + self.file)
+ lines = instance.readlines()
+ exit_code = instance.close()
+ self.failIf(exit_code, 'jbig2dec should exit normally')
+ # test here for correct hash
+ hash_pattern = re.compile('[0-9a-f]{%d}' % len(decode_hash))
+ for line in lines:
+ m = hash_pattern.search(line.lower())
+ if m:
+ self.assertEqual(self.decode_hash, m.group(),
+ 'hash of known decoded document must be correct')
+ return
+ self.fail('document hash was not found in the output')
+
+suite = unittest.TestSuite()
+for filename, file_hash, decode_hash in KnownFileHash.known_hashes:
+ # only add tests for files we can find
+ if not os.access(filename, os.R_OK): continue
+ # todo: verify our file matches its encoded document hash
+ suite.addTest(KnownFileHash(filename, file_hash, decode_hash))
+
+# run the defined tests if we're called as a script
+if __name__ == "__main__":
+ import sys
+ verbosity = 2
+ runner = unittest.TextTestRunner(verbosity=verbosity)
+ result = runner.run(suite)
+ sys.exit(not result.wasSuccessful())