#!/usr/bin/env python import unittest import os import sys import tempfile import shutil import subprocess class Common(object): """ Variables and methods for common use in different tests. """ PDF2HTMLEX_PATH = "@PDF2HTMLEX_PATH@" # defined in CMakeLists.txt if not os.path.isfile(PDF2HTMLEX_PATH) or not os.access(PDF2HTMLEX_PATH, os.X_OK): print >> sys.stderr, "Cannot locate pdf2htmlEX executable, expected at ", PDF2HTMLEX_PATH, ". Make sure source was built before running this test." exit(1) SRC_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) TEST_DIR = os.path.join(SRC_DIR, 'test') DATA_DIR = os.path.join(SRC_DIR, 'share') SAVE_TMP = bool(os.environ.get('P2H_TEST_SAVE_TMP')) GENERATING_MODE = bool(os.environ.get('P2H_TEST_GEN')) CANONICAL_TEMPDIR = '/tmp/pdf2htmlEX_test' def setUp(self): if not self.SAVE_TMP: self.cur_temp_dir = tempfile.mkdtemp(prefix='pdf2htmlEX_test') else: shutil.rmtree(self.CANONICAL_TEMPDIR, True) os.mkdir(self.CANONICAL_TEMPDIR) self.cur_temp_dir = self.CANONICAL_TEMPDIR self.cur_data_dir = os.path.join(self.cur_temp_dir, 'share') self.cur_output_dir = os.path.join(self.cur_temp_dir, 'out') os.mkdir(self.cur_data_dir) os.mkdir(self.cur_output_dir) # filter manifest with open(os.path.join(self.DATA_DIR, 'manifest')) as inf: with open(os.path.join(self.cur_data_dir, 'manifest'), 'w') as outf: ignore = False for line in inf: if ignore: if line.startswith('#TEST_IGNORE_END'): ignore = False elif line.startswith('#TEST_IGNORE_BEGIN'): ignore = True else: outf.write(line) # copy files shutil.copy(os.path.join(self.DATA_DIR, 'base.min.css'), os.path.join(self.cur_data_dir, 'base.min.css')) shutil.copy(os.path.join(self.TEST_DIR, 'fancy.min.css'), os.path.join(self.cur_data_dir, 'fancy.min.css')) def tearDown(self): if not self.SAVE_TMP: shutil.rmtree(self.cur_temp_dir, True) def run_pdf2htmlEX(self, args): """ Execute the pdf2htmlEX with the specified arguments. :type args: list of values :param args: list of arguments to pass to executable. :return: an object of relevant info """ args = [Common.PDF2HTMLEX_PATH, '--data-dir', self.cur_data_dir, '--dest-dir', self.cur_output_dir ] + args with open(os.devnull, 'w') as fnull: return_code = subprocess.call(list(map(str, args)), stderr=fnull) self.assertEquals(return_code, 0, 'cannot execute pdf2htmlEX') files = os.listdir(self.cur_output_dir) return { 'return_code' : return_code, 'output_files' : files }