Blame test_jbig2dec.py

Packit Service 7fa611
#! /usr/bin/env python
Packit Service 7fa611
Packit Service 7fa611
# this is the test script for jbig2dec
Packit Service 7fa611
Packit Service 7fa611
import os, re
Packit Service 7fa611
import sys, time
Packit Service 7fa611
Packit Service 7fa611
class SelfTest:
Packit Service 7fa611
  'generic class for self tests'
Packit Service 7fa611
  def __init__(self):
Packit Service 7fa611
    self.result = 'unrun'
Packit Service 7fa611
    self.msg = ''
Packit Service 7fa611
  def shortDescription(self):
Packit Service 7fa611
    'returns a short name for the test'
Packit Service 7fa611
    return "generic self test"
Packit Service 7fa611
  def runTest(self):
Packit Service 7fa611
    'call this to execute the test'
Packit Service 7fa611
    pass
Packit Service 7fa611
  def fail(self, msg=None):
Packit Service 7fa611
    self.result = 'FAIL'
Packit Service 7fa611
    self.msg = msg
Packit Service 7fa611
  def failIf(self, check, msg=None):
Packit Service 7fa611
    if check: self.fail(msg)
Packit Service 7fa611
  def assertEqual(self, a, b, msg=None):
Packit Service 7fa611
    if a != b: self.fail(msg)
Packit Service 7fa611
Packit Service 7fa611
class SelfTestSuite:
Packit Service 7fa611
  'generic class for running a collection of SelfTest instances'
Packit Service 7fa611
  def __init__(self, stream=sys.stderr):
Packit Service 7fa611
    self.stream = stream
Packit Service 7fa611
    self.tests = []
Packit Service 7fa611
    self.fails = []
Packit Service 7fa611
    self.xfails = []
Packit Service 7fa611
    self.errors = []
Packit Service 7fa611
  def addTest(self, test):
Packit Service 7fa611
    self.tests.append(test)
Packit Service 7fa611
  def run(self):
Packit Service 7fa611
    starttime = time.time()
Packit Service 7fa611
    for test in self.tests:
Packit Service 7fa611
      self.stream.write("%s ... " % test.shortDescription())
Packit Service 7fa611
      test.result = 'ok'
Packit Service 7fa611
      test.runTest()
Packit Service 7fa611
      if test.result != 'ok':
Packit Service 7fa611
        self.fails.append(test)
Packit Service 7fa611
      self.stream.write("%s\n" % test.result)
Packit Service 7fa611
    stoptime = time.time()
Packit Service 7fa611
    self.stream.write('-'*72 + '\n')
Packit Service 7fa611
    self.stream.write('ran %d tests in %.3f seconds\n\n' %
Packit Service 7fa611
        (len(self.tests), stoptime - starttime))
Packit Service 7fa611
    if len(self.fails):
Packit Service 7fa611
      self.stream.write('FAILED %d of %d tests\n' %
Packit Service 7fa611
        (len(self.fails),len(self.tests)))
Packit Service 7fa611
      return False
Packit Service 7fa611
    else:
Packit Service 7fa611
      self.stream.write('PASSED all %d tests\n' % len(self.tests))
Packit Service 7fa611
      return True
Packit Service 7fa611
Packit Service 7fa611
class KnownFileHash(SelfTest):
Packit Service 7fa611
  'self test to check for correct decode of known test files'
Packit Service 7fa611
Packit Service 7fa611
  # hashes of known test inputs
Packit Service 7fa611
  known_NOTHING_DECODED = "da39a3ee5e6b4b0d3255bfef95601890afd80709"
Packit Service 7fa611
  known_042_DECODED = "ebfdf6e2fc5ff3ee2271c2fa19de0e52712046e8"
Packit Service 7fa611
  known_amb_DECODED = "3d4b7992d506894662b53415bd3d0d2a2f8b7953"
Packit Service 7fa611
Packit Service 7fa611
  # these are known test files in the form
Packit Service 7fa611
  # (filename, sha-1(file), sha-1(decoded document)
Packit Service 7fa611
  known_hashes = ( ('../ubc/042_1.jb2',
Packit Service 7fa611
			"673e1ee5c55ab241b171e476ba1168a42733ddaa",
Packit Service 7fa611
			known_042_DECODED),
Packit Service 7fa611
                   ('../ubc/042_2.jb2', 
Packit Service 7fa611
                        "9aa2804e2d220952035c16fb3c907547884067c5",
Packit Service 7fa611
                        known_042_DECODED),
Packit Service 7fa611
                   ('../ubc/042_3.jb2',
Packit Service 7fa611
			"9663a5f35727f13e61a0a2f0a64207b1f79e7d67",
Packit Service 7fa611
			known_042_DECODED),
Packit Service 7fa611
                   ('../ubc/042_4.jb2',
Packit Service 7fa611
			"014df658c8b99b600c2ceac3f1d53c7cc2b4917c",
Packit Service 7fa611
                        known_042_DECODED),
Packit Service 7fa611
                   ('../ubc/042_5.jb2',
Packit Service 7fa611
			"264720a6ccbbf72aa6a2cfb6343f43b8e6f2da4b",
Packit Service 7fa611
                        known_042_DECODED),
Packit Service 7fa611
                   ('../ubc/042_6.jb2',
Packit Service 7fa611
			"96f7dc9df4a1b305f9ac082dd136f85ef5b108fe",
Packit Service 7fa611
			known_042_DECODED),
Packit Service 7fa611
                   ('../ubc/042_7.jb2',
Packit Service 7fa611
			"5526371ba9dc2b8743f20ae3e05a7e60b3dcba76",
Packit Service 7fa611
			known_042_DECODED),
Packit Service 7fa611
                   ('../ubc/042_8.jb2',
Packit Service 7fa611
			"4bf0c87dfaf40d67c36f2a083579eeda26d54641",
Packit Service 7fa611
			known_042_DECODED),
Packit Service 7fa611
                   ('../ubc/042_9.jb2',
Packit Service 7fa611
			"53e630e7fe2fe6e1d6164758e15fc93382e07f55",
Packit Service 7fa611
			known_042_DECODED),
Packit Service 7fa611
                   ('../ubc/042_10.jb2',
Packit Service 7fa611
			"5ca1364367e25cb8f642e9dc677a94d5cfed0c8b",
Packit Service 7fa611
			known_042_DECODED),
Packit Service 7fa611
                   ('../ubc/042_11.jb2',
Packit Service 7fa611
			"bc194caf022bc5345fc41259e05cea3c08245216",
Packit Service 7fa611
			known_042_DECODED),
Packit Service 7fa611
                   ('../ubc/042_12.jb2',
Packit Service 7fa611
			"f354df8eb4849bc707f088739e322d1fe3a14ef3",
Packit Service 7fa611
			known_042_DECODED),
Packit Service 7fa611
                   ('../ubc/042_13.jb2',
Packit Service 7fa611
			"7d428bd542f58591b254d9827f554b0552c950a7",
Packit Service 7fa611
			known_NOTHING_DECODED),
Packit Service 7fa611
                   ('../ubc/042_14.jb2',
Packit Service 7fa611
			"c40fe3a02acb6359baf9b40fc9c49bc0800be589",
Packit Service 7fa611
			known_NOTHING_DECODED),
Packit Service 7fa611
                   ('../ubc/042_15.jb2',
Packit Service 7fa611
			"a9e39fc1ecb178aec9f05039514d75ea3246246c",
Packit Service 7fa611
			known_042_DECODED),
Packit Service 7fa611
                   ('../ubc/042_16.jb2',
Packit Service 7fa611
			"4008bbca43670f3c90eaee26516293ba95baaf3d",
Packit Service 7fa611
			known_042_DECODED),
Packit Service 7fa611
                   ('../ubc/042_17.jb2',
Packit Service 7fa611
			"0ff95637b64c57d659a41c582da03e25321551fb",
Packit Service 7fa611
			known_042_DECODED),
Packit Service 7fa611
                   ('../ubc/042_18.jb2',
Packit Service 7fa611
			"87381d044f00c4329200e44decbe91bebfa31595",
Packit Service 7fa611
			known_042_DECODED),
Packit Service 7fa611
                   ('../ubc/042_19.jb2',
Packit Service 7fa611
			"387d95a140b456d4742622c788cf5b51cebbf438",
Packit Service 7fa611
			known_042_DECODED),
Packit Service 7fa611
                   ('../ubc/042_20.jb2',
Packit Service 7fa611
			"85c19e9ec42b8ddd6b860a1bebea1c67610e7a59",
Packit Service 7fa611
			known_042_DECODED),
Packit Service 7fa611
                   ('../ubc/042_21.jb2',
Packit Service 7fa611
			"ab535c7d7a61a7b9dc53d546e7419ca78ac7f447",
Packit Service 7fa611
			known_042_DECODED),
Packit Service 7fa611
                   ('../ubc/042_22.jb2',
Packit Service 7fa611
			"a9e2b365be63716dbde74b0661c3c6efd2a6844d",
Packit Service 7fa611
			known_042_DECODED),
Packit Service 7fa611
                   ('../ubc/042_23.jb2',
Packit Service 7fa611
			"8ffa40a05e93e10982b38a2233a8da58c1b5c343",
Packit Service 7fa611
			known_042_DECODED),
Packit Service 7fa611
                   ('../ubc/042_24.jb2',
Packit Service 7fa611
			"2553fe65111c58f6412de51d8cdc71651e778ccf",
Packit Service 7fa611
			known_042_DECODED),
Packit Service 7fa611
                   ('../ubc/042_25.jb2',
Packit Service 7fa611
			"52de4a3b86252d896a8d783ba71dd0699333dd69",
Packit Service 7fa611
			known_042_DECODED),
Packit Service 7fa611
                   ('../ubc/amb_1.jb2',
Packit Service 7fa611
			"d6d6d1c981dc37a09108c1e3ed990aa5b345fa6a",
Packit Service 7fa611
                        known_amb_DECODED),
Packit Service 7fa611
                   ('../ubc/amb_2.jb2',
Packit Service 7fa611
			"9af6616a89eb03f8934de72626e301a716366c3c",
Packit Service 7fa611
                        known_amb_DECODED)
Packit Service 7fa611
                 )
Packit Service 7fa611
Packit Service 7fa611
  def __init__(self, file, file_hash, decode_hash):
Packit Service 7fa611
    SelfTest.__init__(self)
Packit Service 7fa611
    self.file = file
Packit Service 7fa611
    self.file_hash = file_hash
Packit Service 7fa611
    self.decode_hash = decode_hash
Packit Service 7fa611
Packit Service 7fa611
  def shortDescription(self):
Packit Service 7fa611
    return "Checking '%s' for correct decoded document hash" % self.file
Packit Service 7fa611
Packit Service 7fa611
  def runTest(self):
Packit Service 7fa611
    '''jbig2dec should return proper document hashes for known files'''
Packit Service 7fa611
    # invoke jbig2dec on our file
Packit Service 7fa611
    instance = os.popen('./jbig2dec -q -o /dev/null --hash ' + self.file)
Packit Service 7fa611
    lines = instance.readlines()
Packit Service 7fa611
    exit_code = instance.close()
Packit Service 7fa611
    self.failIf(exit_code, 'jbig2dec should exit normally')
Packit Service 7fa611
    # test here for correct hash
Packit Service 7fa611
    hash_pattern = re.compile('[0-9a-f]{%d}' % len(decode_hash))
Packit Service 7fa611
    for line in lines:
Packit Service 7fa611
      m = hash_pattern.search(line.lower())
Packit Service 7fa611
      if m:
Packit Service 7fa611
        self.assertEqual(self.decode_hash, m.group(),
Packit Service 7fa611
          'hash of known decoded document must be correct')
Packit Service 7fa611
        return
Packit Service 7fa611
    self.fail('document hash was not found in the output')
Packit Service 7fa611
Packit Service 7fa611
suite = SelfTestSuite()
Packit Service 7fa611
for filename, file_hash, decode_hash in KnownFileHash.known_hashes:
Packit Service 7fa611
  # only add tests for files we can find
Packit Service 7fa611
  if not os.access(filename, os.R_OK): continue
Packit Service 7fa611
  # todo: verify our file matches its encoded document hash
Packit Service 7fa611
  suite.addTest(KnownFileHash(filename, file_hash, decode_hash))
Packit Service 7fa611
Packit Service 7fa611
# run the defined tests if we're called as a script
Packit Service 7fa611
if __name__ == "__main__":
Packit Service 7fa611
    result = suite.run()
Packit Service 7fa611
    sys.exit(not result)