1
0
mirror of https://github.com/pdf2htmlEX/pdf2htmlEX.git synced 2024-12-22 04:50:09 +00:00

Merge pull request #683 from jwuttke/reactivate_ctest

Reactivate ctest
This commit is contained in:
Lu Wang 2017-01-16 23:42:22 +01:00 committed by GitHub
commit f12fc15515
43 changed files with 174 additions and 399 deletions

View File

@ -215,5 +215,19 @@ set(PDF2HTMLEX_RESOURCE
install (FILES ${PDF2HTMLEX_RESOURCE} DESTINATION share/pdf2htmlEX) install (FILES ${PDF2HTMLEX_RESOURCE} DESTINATION share/pdf2htmlEX)
install (FILES pdf2htmlEX.1 DESTINATION share/man/man1) install (FILES pdf2htmlEX.1 DESTINATION share/man/man1)
enable_testing() ## tests:
add_test(test python ${CMAKE_SOURCE_DIR}/test/test.py)
set(PDF2HTMLEX_PATH ${CMAKE_BINARY_DIR}/pdf2htmlEX)
set(PDF2HTMLEX_TMPDIR /tmp/pdf2htmlEX/tmp)
set(PDF2HTMLEX_DATDIR /tmp/pdf2htmlEX/dat)
set(PDF2HTMLEX_PNGDIR /tmp/pdf2htmlEX/png)
set(PDF2HTMLEX_OUTDIR /tmp/pdf2htmlEX/out)
file(MAKE_DIRECTORY ${PDF2HTMLEX_TMPDIR})
file(MAKE_DIRECTORY ${PDF2HTMLEX_DATDIR})
file(MAKE_DIRECTORY ${PDF2HTMLEX_PNGDIR})
file(MAKE_DIRECTORY ${PDF2HTMLEX_OUTDIR})
configure_file(${CMAKE_SOURCE_DIR}/test/test.py.in ${CMAKE_SOURCE_DIR}/test/test.py)
include(CTest)
add_test(test_basic python ${CMAKE_SOURCE_DIR}/test/test_output.py)
add_test(test_browser python ${CMAKE_SOURCE_DIR}/test/test_local_browser.py)

View File

@ -5,24 +5,21 @@
- Selenium - Selenium
- unittest - unittest
- Firefox - Firefox
- firefoxdriver
### Usage ### Usage
- Run all tests: - Run all tests:
- `./test.py` - python test_output.py
- Run selected test suites: - python test_local_browser.py
- `./test.py test_local_browser`
- Run selected test case:
- `./test.py test_local_browser.test_basic_text`
- Or `./test.py test_basic_text`
- Environment variables: - Environment variables:
- Set `P2H_TEST_SAVE_TMP=1` to keep the temporary files in `/tmp/pdf2htmlEX_test` - `export P2H_TEST_GEN=1` to generate new reference files (when done, `unset P2H_TEST_GEN`)
- Set `P2H_TEST_GEN=1` to generate new reference files - `export P2H_TEST_REMOTE=1` to test different browsers using Sauce Labs
- Set `P2H_TEST_REMOTE=1` to test different browsers using Sauce Labs
- Install `sauceclient` for Python - Install `sauceclient` for Python
- Set correct values for `SAUCE_USERNAME` and `SAUCE_ACCESS_KEY` - Set correct values for `SAUCE_USERNAME` and `SAUCE_ACCESS_KEY`
- Setup a HTTP server at `/` on port 8000 - Setup a HTTP server at `/` on port 8000
- Enable Sauce Connect - Enable Sauce Connect
- See `.travis.yml` as an example - See `.travis.yml` as an example
- python test_remote_browser.py
### Add new test cases ### Add new test cases
@ -35,4 +32,3 @@
- [Optional] Include the source files that the PDF file is generated from. - [Optional] Include the source files that the PDF file is generated from.
- Add the new PDF file to the correct folder in `test/`, and add a new function in the corresponding Python file - Add the new PDF file to the correct folder in `test/`, and add a new function in the corresponding Python file
- Run `P2H_TEST_GEN=1 test/test.py test_issueXXX` to generate the reference, assuming that the new function is called `test_issueXXX` - Run `P2H_TEST_GEN=1 test/test.py test_issueXXX` to generate the reference, assuming that the new function is called `test_issueXXX`

View File

@ -14,7 +14,7 @@ class BrowserTests(Common):
DEFAULT_PDF2HTMLEX_ARGS = [ DEFAULT_PDF2HTMLEX_ARGS = [
'--fit-width', 800, '--fit-width', 800,
'--last-page', 1, '--last-page', 1,
'--embed', 'fi', # avoid base64 to make it faster # avoid base64 to make it faster
] ]
BROWSER_WIDTH=800 BROWSER_WIDTH=800
@ -28,42 +28,35 @@ class BrowserTests(Common):
def tearDownClass(cls): def tearDownClass(cls):
pass pass
def run_test_case(self, filename, pdf2htmlEX_args=[], page_must_load=True): def run_test_case(self, filename, args=[], page_must_load=True):
basefilename, extension = os.path.splitext(filename) basefilename, extension = os.path.splitext(filename)
htmlfilename = basefilename + '.html'
ref_htmlfolder = os.path.join(self.TEST_DATA_DIR, basefilename)
ref_htmlfilename = os.path.join(ref_htmlfolder, htmlfilename)
out_htmlfilename = os.path.join(self.cur_output_dir, htmlfilename)
self.assertEquals(extension.lower(), '.pdf', 'Input file is not PDF') self.assertEquals(extension.lower(), '.pdf', 'Input file is not PDF')
pdf2htmlEX_args = self.DEFAULT_PDF2HTMLEX_ARGS \ htmlfilename = basefilename + '.html'
+ list(pdf2htmlEX_args) + [ ref_htmlfolder = os.path.join(self.TEST_DATA_DIR, basefilename)
os.path.join(self.TEST_DATA_DIR, filename), ref_htmlfilename = os.path.join(ref_htmlfolder, htmlfilename)
htmlfilename out_htmlfilename = os.path.join(self.OUTDIR, htmlfilename)
]
pdf2htmlEX_args = self.DEFAULT_PDF2HTMLEX_ARGS + args + [
os.path.join(self.TEST_DATA_DIR, filename),
htmlfilename ]
result = self.run_pdf2htmlEX(pdf2htmlEX_args) result = self.run_pdf2htmlEX(pdf2htmlEX_args)
self.assertIn(htmlfilename, result['output_files'], 'HTML file is not generated') self.assertIn(htmlfilename, result['output_files'], 'HTML file is not generated')
if self.GENERATING_MODE: if self.GENERATING_MODE:
# copy generated html files # copy generated html files
shutil.rmtree(ref_htmlfolder, True) shutil.rmtree(ref_htmlfolder, True)
shutil.copytree(self.cur_output_dir, ref_htmlfolder) shutil.copytree(self.OUTDIR, ref_htmlfolder)
return return
png_out_dir = os.path.join(self.cur_temp_dir, 'png_out') pngfilename_out = os.path.join(self.PNGDIR, basefilename + '.out.png')
os.mkdir(png_out_dir) self.generate_image(out_htmlfilename, pngfilename_out)
out_img = Image.open(pngfilename_out)
pngfilename_out_fullpath = os.path.join(png_out_dir, basefilename + '.out.png') pngfilename_ref = os.path.join(self.PNGDIR, basefilename + '.ref.png')
self.generate_image(out_htmlfilename, pngfilename_out_fullpath) self.generate_image(ref_htmlfilename, pngfilename_ref, page_must_load=page_must_load)
out_img = Image.open(pngfilename_out_fullpath) ref_img = Image.open(pngfilename_ref)
pngfilename_ref_fullpath = os.path.join(png_out_dir, basefilename + '.ref.png')
self.generate_image(ref_htmlfilename, pngfilename_ref_fullpath, page_must_load=page_must_load)
ref_img = Image.open(pngfilename_ref_fullpath)
diff_img = ImageChops.difference(ref_img, out_img); diff_img = ImageChops.difference(ref_img, out_img);
@ -71,11 +64,13 @@ class BrowserTests(Common):
if diff_bbox is not None: if diff_bbox is not None:
diff_size = (diff_bbox[2] - diff_bbox[0]) * (diff_bbox[3] - diff_bbox[1]) diff_size = (diff_bbox[2] - diff_bbox[0]) * (diff_bbox[3] - diff_bbox[1])
img_size = ref_img.size[0] * ref_img.size[1] img_size = ref_img.size[0] * ref_img.size[1]
if self.SAVE_TMP: # save the diff image (http://stackoverflow.com/questions/15721484):
# save the diff image diff_file_name = os.path.join(self.PNGDIR, basefilename + '.diff.png')
# http://stackoverflow.com/questions/15721484/saving-in-png-using-pil-library-after-taking-imagechops-difference-of-two-png diff_img.convert('RGB').save(diff_file_name)
diff_img.convert('RGB').save(os.path.join(png_out_dir, basefilename + '.diff.png')) self.fail(('PNG files %s and %s differ by at most %d pixels, '+
self.fail('PNG files differ by <= %d pixels, (%f%% of %d pixels in total)' % (diff_size, 1.0*diff_size/img_size, img_size)) '(%f%% of %d pixels in total), difference: %s') %
(pngfilename_out, pngfilename_ref,
diff_size, 100.0*diff_size/img_size, img_size, diff_file_name))
@unittest.skipIf(Common.GENERATING_MODE, 'Do not auto generate reference for test_fail') @unittest.skipIf(Common.GENERATING_MODE, 'Do not auto generate reference for test_fail')
def test_fail(self): def test_fail(self):

View File

@ -19,8 +19,8 @@
</style> </style>
<style type="text/css"> <style type="text/css">
.ff0{font-family:sans-serif;visibility:hidden;} .ff0{font-family:sans-serif;visibility:hidden;}
@font-face{font-family:ff1;src:url(f1.woff)format("woff");}.ff1{font-family:ff1;line-height:0.899000;font-style:normal;font-weight:normal;visibility:visible;} @font-face{font-family:ff1;src:url('data:application/font-woff;base64,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')format("woff");}.ff1{font-family:ff1;line-height:0.899000;font-style:normal;font-weight:normal;visibility:visible;}
@font-face{font-family:ff2;src:url(f2.woff)format("woff");}.ff2{font-family:ff2;line-height:0.882000;font-style:normal;font-weight:normal;visibility:visible;} @font-face{font-family:ff2;src:url('data:application/font-woff;base64,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')format("woff");}.ff2{font-family:ff2;line-height:0.882000;font-style:normal;font-weight:normal;visibility:visible;}
.m2{transform:matrix(0.231081,-0.231081,0.231081,0.231081,0,0);-ms-transform:matrix(0.231081,-0.231081,0.231081,0.231081,0,0);-webkit-transform:matrix(0.231081,-0.231081,0.231081,0.231081,0,0);} .m2{transform:matrix(0.231081,-0.231081,0.231081,0.231081,0,0);-ms-transform:matrix(0.231081,-0.231081,0.231081,0.231081,0,0);-webkit-transform:matrix(0.231081,-0.231081,0.231081,0.231081,0,0);}
.m0{transform:matrix(0.326797,0.000000,0.000000,0.326797,0,0);-ms-transform:matrix(0.326797,0.000000,0.000000,0.326797,0,0);-webkit-transform:matrix(0.326797,0.000000,0.000000,0.326797,0,0);} .m0{transform:matrix(0.326797,0.000000,0.000000,0.326797,0,0);-ms-transform:matrix(0.326797,0.000000,0.000000,0.326797,0,0);-webkit-transform:matrix(0.326797,0.000000,0.000000,0.326797,0,0);}
.m3{transform:matrix(0.462161,-0.462161,0.231081,0.231081,0,0);-ms-transform:matrix(0.462161,-0.462161,0.231081,0.231081,0,0);-webkit-transform:matrix(0.462161,-0.462161,0.231081,0.231081,0,0);} .m3{transform:matrix(0.462161,-0.462161,0.231081,0.231081,0,0);-ms-transform:matrix(0.462161,-0.462161,0.231081,0.231081,0,0);-webkit-transform:matrix(0.462161,-0.462161,0.231081,0.231081,0,0);}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 475 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 174 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

File diff suppressed because one or more lines are too long

View File

@ -1,193 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1584pt" height="1224pt" viewBox="0 0 1584 1224" version="1.2">
<defs>
<clipPath id="clip1">
<path d="M 710.878906 199.921875 L 823.441406 199.921875 L 823.441406 219.601562 L 710.878906 219.601562 Z M 710.878906 199.921875 "/>
</clipPath>
<image id="image6" width="8" height="8" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAIAAABLbSncAAAABmJLR0QA/wD/AP+gvaeTAAAAFUlEQVQImWP8//8/AzbAhFV00EoAAFbUAw00q2Z5AAAAAElFTkSuQmCC"/>
<clipPath id="clip2">
<rect width="8" height="8"/>
</clipPath>
<g id="surface9" clip-path="url(#clip2)">
<use xlink:href="#image6"/>
</g>
<pattern id="pattern0" patternUnits="userSpaceOnUse" width="8" height="8" patternTransform="matrix(1.44,0,0,1.44,0.000024,-0.000024)">
<use xlink:href="#surface9"/>
</pattern>
<image id="image11" width="118" height="11" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHYAAAALCAIAAAAlee5ZAAAABmJLR0QA/wD/AP+gvaeTAAAD/klEQVRIie1WXUibVxh+T/Klapy7cbputWxaF9uqLLUaQVYtiHopdKxzssnKCsXRq7KrTUVn5k/ncLVScEVYO+gEXUjVC1fUBdMfcyONmCmzZRpTNEl7URNN9Mt33l2cLE3z/UQreDH2cC4+Ds/zvu/5eZ/vEKQIyiAAABCP9T/koIrL4Lf5wGZgH0r5r0JxixGAwI2fb7R/1x6+y7sFkR+wg85QkEeCxBXuMYVCENwRjSgZBYFn3mclJSWra6v37t7Lfz8f6A6KjpJ73V7rXSullJCwTMNpUt9IPZJ15ODbB18UKiN3zDnm5uY4jhOvTaBCwYmCbF22hJyAbdq29PcSAOTl5+Xm5UqnILD+fN3yh2Wb346UJ0YoFMrJydGf0EsG8bg9IyMjPM9zHFddXZ32ZpoEDSnKDkTjt0ZGq/2kllKKKE+WklsmLUR0Jpyay8jIqPuszvbAhgwy8qbGJrmVA8CV7isSWkRErK2pZZyGbxoU4s//OZ/yWopCCoaLX16UqBMREXt+7InQrvVek8wlbxQEFv9a7LkaDjE4NHjn9ztxq4mBSqXSaDQxkyEh5HK5bv5ys7yivPuHbkTZNlKr1QrBBUGIK+TUog6IAiLyPB8zKb4TISEkKee3ebPZHJGYzWYaouIul6mAACB0dnZ6vB6m53m+zdhWVlqWqE3c1euC9WBaalp9fX3K6ymbm5sLCwuTE5Nur9vv91/66pJWq71Qf0E55smCkzUf1wj0xZ5SpKWlpcpJ4yI9Pb2joyMQCBBCOI6bmZm59estBMx8N/P8F+c5DYeIAhUMhQYACUOz2+3TtmkAQEAAuP/g/uzsrL5AH8uTa6KJ8YmkxCQAIEDYAIDrfdd34RWIU5aphAMJAKB7T+df9+O/WJhfqCivYAUceuvQ40ePJVu+pbmFcc59fg4lIZUUEes+rWPC5qZmpYJfhuk3E1Od+uBUnESIiNjwdQMAJCcl67J1TNja0irmSxkFga3gVntbeyAYiHQN+7j8/WX3mvsVXheUUv+GP3wXEHKO5vT392dlZgHAk9UnQ4NDceUSs3t/qmPUAAgGg2xaEIRgIPgSQQTfc9/wyDAAHM893tjYyG7S6Ojohn8jhintxQMDA+OT49GuxHph8dFi79XePa6L4fA7h89+dJZ9W61WpKhwcj6fb2Vlxel0OpedzmXn8tLyU89TBRPfB0xZpxwOBwCcLjt95sMzx44eAwD7rN02bYthiraYgGfN09XVBSJHYzve91Pfw5mHr/hMjgABAPT6sG25XC7x4UdjbGysuKi4uKjYYDAYDIbCokJjq5GoxH+mfQEBADCZTAIVEg4kVFVVaZO1lZWVABDcCt4evh3hMPwDoftBGDZEsogAAAAASUVORK5CYII="/>
<image id="image14" width="118" height="10" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHYAAAAKCAIAAADuJT38AAAABmJLR0QA/wD/AP+gvaeTAAAFjklEQVRIicVWWUyUVxT+7j+DMwwqwzJaoSwdlGGNosS0StFUkzqItTQmFQuGuqTG9aE+NAYrkigSH2VNLdQFosStQtEUbAxqTKCaFtlb0lgWrcjqwM8s/3/6cGGAYQatPPTLeZh77/nuOff775x7QDJNMaK83DwAABiYg/H5A/sOEIc8oxHV3K1RzVEBWByy+Pmz51MoRBU3KxRMwVd7/ulx3JDoeMZxuEDqF6nOcyAiou0p27lbxrcZr89znFhaUspZqz5YJY6ILolEvS97DaEGAGGGsL7ePiK6XXmbMQYgZmmMacg0mStMSZyh50VPQUEB13f6wfjkpcuX6n+rd3X4NwcREQiAQlAIguDKjYHN9ZgbFBgU8G4AN39/f51ON/sE3hoPHz5sb28HsGbNGi9vLwCxsbGhi0MBNLc01z2qm+ysdCDnnMmpfzIhH5eAQ4BAIAbW87InOzv7YulFxtik9f+MZ8+fySQD8Pb29pjr4cqNQEajMScnh2gsmCzLGo1mNqHfHgwArl27ZpNsAO7fu2/82CjLMhj6B/oBjJpHy38sX7t2LRh4hsrJ5Jamlty8XAAMjIurVqvTtqdptdrvzn7X29eL8epx5eqV1NupG4wbZpNodVU1H4WFhanUqhncNRrNgoULHGf/F4mBjr87qqqq+O/G5sbG5kYHh8rKyvT0dC8fLz6c8vc8deoU15FAAhM2JW6qrqrOL8zPys56cP/Bzh073d3dCUQgi9Vy8sTJkeERZ+XEORSCAgDYmL5Xr1wtLy/nSwkbE4CZJLPf3yl4g9BMYBNB7Ta7b1NdVd3R2QHA18c3PCw8dEkoN8MSg0atAdD6R2tNTY3df1xihjvVdy6XXeaj+Lj469ev3yy/uTpudXdnd3tbuyHccPb7s1U/V23+ZDMX696De+fPnX/TvAiiKFosFtMrU1trW3ZW9u5du0WzCGD9R+uNRuPMbMkmWSwW86jZbuKIaDVbXxvWZrNZLVY7a1QctZqt9NYaM8iSfOPGDQCCIOTl5tWOo66urvbX2pSUFABExH3GLgF/IkfF0bhVcQCiIqOKi4olSSKi7q7uzIzMwIBAnU53cP/BpsYm/l5XlFfEfxgPwH+Rf1dnF9nhuqNQq9TRkdHLY5ZHhEd4a73tOYeEhNT/Xu/87Z7UUfh4+6yIWbFs6TK7RUVGHTt6zEncSR0FA/N7x89OjFkaExUZlXUiy1W413cURA1PGrw8vQCEG8KHBoZoKm79dIvfP79Ffp0dnXyHMYlzzuQsXLAwOyubb/30r6dHvjnit8hv8ifUemr3fLVnTBGi4qLi4KDg/Xv326y2poamx48ey7LskNDdX+467Uz4+TcmbGx40jBDb3Q0/egMVyr582RXEm/bus0Va9eOXa4kvnDuAveJXRErDk+TmIiIMjMyuc+hA4ccoxP19/VHRkRyh8KCQr6qBMPgwKBSqaytrQ0MCmxrbcvPzy8tLX3R8wKAwAR+8xnYwOBAQWFBSUlJ0qdJe/ftTfsybcuWLaUlpV2dXYODg8OmYZKIKaf0GBqNJiI8wmwxC4IAAhhUKpWvr290dHRCQsK6deuUbkrILquqTqfT6/VKhWPbA8Am2YKDg13p6O/v75Rok2wBAQGuWJ6eniH6EALp39PzJtcBZtHc0tKi1+vnuM1J+iwJcCzrWi9t8tbkoh+KANTX15NMTGCMZJIkSaFUtP/Zfvr06bKyMt58uLp9vJC5q90TExMPf3145fsrJZtktVqJyN3d3fFIVtsr06uJ3Rjc3Nw8NB4Tr+yMVVEURVEU+Wd2gCzLKrXKw8N5qzdsGjZbzNOJMslqlVrjoXF6MLPFPDIyAoJCqZg3b950lSVJGhoaAoEJbP78+U57eYvFMmwaJhBjTOupZQL7Fz9nQeQreNFSAAAAAElFTkSuQmCC"/>
<clipPath id="clip3">
<path d="M 1443 239 L 1445 239 L 1445 571.921875 L 1443 571.921875 Z M 1443 239 "/>
</clipPath>
<clipPath id="clip4">
<path d="M 1443 571.921875 L 1445 571.921875 L 1445 1031 L 1443 1031 Z M 1443 571.921875 "/>
</clipPath>
</defs>
<g id="surface1">
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 696.960938 142.320312 L 696.960938 215.761719 L 736.558594 215.761719 L 736.558594 142.320312 Z M 696.960938 142.320312 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 33.121094 240.238281 L 33.121094 285.359375 L 42.71875 285.359375 L 42.71875 240.238281 Z M 33.121094 240.238281 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 696.960938 340.078125 L 696.960938 341.761719 L 736.558594 341.761719 L 736.558594 340.078125 Z M 696.960938 340.078125 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 854.398438 340.078125 L 854.398438 341.761719 L 972.71875 341.761719 L 972.71875 340.078125 Z M 854.398438 340.078125 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 1129.921875 340.078125 L 1129.921875 341.761719 L 1169.519531 341.761719 L 1169.519531 340.078125 Z M 1129.921875 340.078125 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 41.519531 239.28125 L 41.519531 342.960938 L 43.441406 342.960938 L 43.441406 239.28125 Z M 41.519531 239.28125 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 656.640625 341.039062 L 656.640625 342.960938 L 658.558594 342.960938 L 658.558594 341.039062 Z M 656.640625 341.039062 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 1365.121094 341.039062 L 1365.121094 342.960938 L 1367.039062 342.960938 L 1367.039062 341.039062 Z M 1365.121094 341.039062 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 43.441406 239.28125 L 43.441406 241.199219 L 1445.039062 241.199219 L 1445.039062 239.28125 Z M 43.441406 239.28125 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 43.441406 275.519531 L 43.441406 277.441406 L 1445.039062 277.441406 L 1445.039062 275.519531 Z M 43.441406 275.519531 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 43.441406 339.121094 L 43.441406 341.039062 L 1445.039062 341.039062 L 1445.039062 339.121094 Z M 43.441406 339.121094 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 41.519531 341.519531 L 41.519531 450 L 43.441406 450 L 43.441406 341.519531 Z M 41.519531 341.519531 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 115.679688 341.519531 L 115.679688 450 L 117.601562 450 L 117.601562 341.519531 Z M 115.679688 341.519531 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 43.441406 448.078125 L 43.441406 450 L 1445.039062 450 L 1445.039062 448.078125 Z M 43.441406 448.078125 "/>
<path style="fill:none;stroke-width:0.96;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.00047305 -0.000549275 L -53.760239 -53.760315 " transform="matrix(0,2,2,0,476.880005,449.040009)"/>
<path style="fill:none;stroke-width:0.96;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.00047305 -0.000080125 L -53.760239 -53.759846 " transform="matrix(0,2,2,0,525.840004,449.040009)"/>
<path style="fill:none;stroke-width:0.96;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.00047305 0.0009346 L -53.760239 -53.760784 " transform="matrix(0,2,2,0,577.920006,449.040009)"/>
<path style="fill:none;stroke-width:0.96;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.00047305 0.0006218 L -53.760239 -53.759144 " transform="matrix(0,2,2,0,617.280006,449.040009)"/>
<path style="fill:none;stroke-width:0.96;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.00047305 0.000309 L -53.760239 -53.759457 " transform="matrix(0,2,2,0,656.640007,449.040009)"/>
<path style="fill:none;stroke-width:0.96;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.00047305 -0.0000038 L -53.760239 -53.759769 " transform="matrix(0,2,2,0,696.000008,449.040009)"/>
<path style="fill:none;stroke-width:0.96;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.00047305 -0.0003166 L -53.760239 -53.760082 " transform="matrix(0,2,2,0,735.360008,449.040009)"/>
<path style="fill:none;stroke-width:0.96;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.00047305 -0.0006294 L -53.760239 -53.760395 " transform="matrix(0,2,2,0,774.720009,449.040009)"/>
<path style="fill:none;stroke-width:0.96;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.00047305 -0.0009422 L -53.760239 -53.760708 " transform="matrix(0,2,2,0,814.080009,449.040009)"/>
<path style="fill:none;stroke-width:0.96;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.00047305 0.000698125 L -53.760239 -53.759067 " transform="matrix(0,2,2,0,853.44001,449.040009)"/>
<path style="fill:none;stroke-width:0.96;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.00047305 0.000385325 L -53.760239 -53.75938 " transform="matrix(0,2,2,0,892.800011,449.040009)"/>
<path style="fill:none;stroke-width:0.96;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.00047305 0.000072525 L -53.760239 -53.759693 " transform="matrix(0,2,2,0,932.160011,449.040009)"/>
<path style="fill:none;stroke-width:0.96;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.00047305 -0.000240275 L -53.760239 -53.760006 " transform="matrix(0,2,2,0,971.520012,449.040009)"/>
<path style="fill:none;stroke-width:0.96;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.00047305 -0.000553075 L -53.760239 -53.760319 " transform="matrix(0,2,2,0,1010.880012,449.040009)"/>
<path style="fill:none;stroke-width:0.96;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.00047305 -0.000865875 L -53.760239 -53.760632 " transform="matrix(0,2,2,0,1050.240013,449.040009)"/>
<path style="fill:none;stroke-width:0.96;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.00047305 0.00077445 L -53.760239 -53.760944 " transform="matrix(0,2,2,0,1089.600014,449.040009)"/>
<path style="fill:none;stroke-width:0.96;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.00047305 0.00046165 L -53.760239 -53.759304 " transform="matrix(0,2,2,0,1128.960014,449.040009)"/>
<path style="fill:none;stroke-width:0.96;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.00047305 0.00014885 L -53.760239 -53.759617 " transform="matrix(0,2,2,0,1168.320015,449.040009)"/>
<path style="fill:none;stroke-width:0.96;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.00047305 -0.00016395 L -53.760239 -53.75993 " transform="matrix(0,2,2,0,1207.680015,449.040009)"/>
<path style="fill:none;stroke-width:0.96;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.00047305 -0.00047675 L -53.760239 -53.760242 " transform="matrix(0,2,2,0,1247.040016,449.040009)"/>
<path style="fill:none;stroke-width:0.96;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.00047305 -0.00078955 L -53.760239 -53.760555 " transform="matrix(0,2,2,0,1286.400017,449.040009)"/>
<path style="fill:none;stroke-width:0.96;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.00047305 0.000850775 L -53.760239 -53.760868 " transform="matrix(0,2,2,0,1325.760017,449.040009)"/>
<path style="fill:none;stroke-width:0.96;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.00047305 0.000537975 L -53.760239 -53.759228 " transform="matrix(0,2,2,0,1365.120018,449.040009)"/>
<path style="fill:none;stroke-width:0.96;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.00047305 0.000225175 L -53.760239 -53.75954 " transform="matrix(0,2,2,0,1404.480018,449.040009)"/>
<path style="fill:none;stroke-width:0.96;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.00047305 -0.000087625 L -53.760239 -53.759853 " transform="matrix(0,2,2,0,1443.840019,449.040009)"/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 20.640625 449.039062 L 20.640625 472.558594 L 42.71875 472.558594 L 42.71875 449.039062 Z M 20.640625 449.039062 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 696.960938 449.039062 L 696.960938 472.558594 L 736.558594 472.558594 L 736.558594 449.039062 Z M 696.960938 449.039062 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 815.039062 449.039062 L 815.039062 472.558594 L 972.71875 472.558594 L 972.71875 449.039062 Z M 815.039062 449.039062 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 1129.921875 449.039062 L 1129.921875 472.558594 L 1169.519531 472.558594 L 1169.519531 449.039062 Z M 1129.921875 449.039062 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 20.640625 472.320312 L 20.640625 495.839844 L 42.71875 495.839844 L 42.71875 472.320312 Z M 20.640625 472.320312 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(84.799194%,84.799194%,84.799194%);fill-opacity:1;" d="M 42.480469 472.320312 L 42.480469 495.839844 L 1445.039062 495.839844 L 1445.039062 472.320312 Z M 42.480469 472.320312 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 20.640625 495.601562 L 20.640625 542.398438 L 42.71875 542.398438 L 42.71875 495.601562 Z M 20.640625 495.601562 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(84.799194%,84.799194%,84.799194%);fill-opacity:1;" d="M 42.480469 518.878906 L 42.480469 542.398438 L 1445.039062 542.398438 L 1445.039062 518.878906 Z M 42.480469 518.878906 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 20.640625 542.160156 L 20.640625 571.921875 L 42.71875 571.921875 L 42.71875 542.160156 Z M 20.640625 542.160156 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(84.799194%,84.799194%,84.799194%);fill-opacity:1;" d="M 42.480469 565.441406 L 42.480469 571.921875 L 1445.039062 571.921875 L 1445.039062 565.441406 Z M 42.480469 565.441406 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 41.519531 448.078125 L 41.519531 571.921875 L 43.441406 571.921875 L 43.441406 448.078125 Z M 41.519531 448.078125 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 115.679688 450 L 115.679688 571.921875 L 117.601562 571.921875 L 117.601562 450 Z M 115.679688 450 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 476.878906 450 L 476.878906 571.921875 L 478.800781 571.921875 L 478.800781 450 Z M 476.878906 450 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 525.839844 450 L 525.839844 571.921875 L 527.761719 571.921875 L 527.761719 450 Z M 525.839844 450 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 577.921875 450 L 577.921875 571.921875 L 579.839844 571.921875 L 579.839844 450 Z M 577.921875 450 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 617.28125 450 L 617.28125 571.921875 L 619.199219 571.921875 L 619.199219 450 Z M 617.28125 450 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 656.640625 450 L 656.640625 571.921875 L 658.558594 571.921875 L 658.558594 450 Z M 656.640625 450 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 696 450 L 696 571.921875 L 697.921875 571.921875 L 697.921875 450 Z M 696 450 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 735.359375 450 L 735.359375 571.921875 L 737.28125 571.921875 L 737.28125 450 Z M 735.359375 450 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 774.71875 450 L 774.71875 571.921875 L 776.640625 571.921875 L 776.640625 450 Z M 774.71875 450 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 814.078125 450 L 814.078125 571.921875 L 816 571.921875 L 816 450 Z M 814.078125 450 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 853.441406 450 L 853.441406 571.921875 L 855.359375 571.921875 L 855.359375 450 Z M 853.441406 450 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 892.800781 450 L 892.800781 571.921875 L 894.71875 571.921875 L 894.71875 450 Z M 892.800781 450 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 932.160156 450 L 932.160156 571.921875 L 934.078125 571.921875 L 934.078125 450 Z M 932.160156 450 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 971.519531 450 L 971.519531 571.921875 L 973.441406 571.921875 L 973.441406 450 Z M 971.519531 450 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 1010.878906 450 L 1010.878906 571.921875 L 1012.800781 571.921875 L 1012.800781 450 Z M 1010.878906 450 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 1050.238281 450 L 1050.238281 571.921875 L 1052.160156 571.921875 L 1052.160156 450 Z M 1050.238281 450 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 1089.601562 450 L 1089.601562 571.921875 L 1091.519531 571.921875 L 1091.519531 450 Z M 1089.601562 450 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 1128.960938 450 L 1128.960938 571.921875 L 1130.878906 571.921875 L 1130.878906 450 Z M 1128.960938 450 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 1168.320312 450 L 1168.320312 571.921875 L 1170.238281 571.921875 L 1170.238281 450 Z M 1168.320312 450 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 1207.679688 450 L 1207.679688 571.921875 L 1209.601562 571.921875 L 1209.601562 450 Z M 1207.679688 450 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 1247.039062 450 L 1247.039062 571.921875 L 1248.960938 571.921875 L 1248.960938 450 Z M 1247.039062 450 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 1286.398438 450 L 1286.398438 571.921875 L 1288.320312 571.921875 L 1288.320312 450 Z M 1286.398438 450 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 1325.761719 450 L 1325.761719 571.921875 L 1327.679688 571.921875 L 1327.679688 450 Z M 1325.761719 450 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 1365.121094 450 L 1365.121094 571.921875 L 1367.039062 571.921875 L 1367.039062 450 Z M 1365.121094 450 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 1404.480469 450 L 1404.480469 571.921875 L 1406.398438 571.921875 L 1406.398438 450 Z M 1404.480469 450 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 43.441406 448.078125 L 43.441406 450 L 1445.039062 450 L 1445.039062 448.078125 Z M 43.441406 448.078125 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 43.441406 471.359375 L 43.441406 473.28125 L 1445.039062 473.28125 L 1445.039062 471.359375 Z M 43.441406 471.359375 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 43.441406 494.640625 L 43.441406 496.558594 L 1445.039062 496.558594 L 1445.039062 494.640625 Z M 43.441406 494.640625 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 43.441406 517.921875 L 43.441406 519.839844 L 1445.039062 519.839844 L 1445.039062 517.921875 Z M 43.441406 517.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 43.441406 541.199219 L 43.441406 543.121094 L 1445.039062 543.121094 L 1445.039062 541.199219 Z M 43.441406 541.199219 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 43.441406 564.480469 L 43.441406 566.398438 L 1445.039062 566.398438 L 1445.039062 564.480469 Z M 43.441406 564.480469 "/>
<g clip-path="url(#clip1)" clip-rule="nonzero">
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 710.878906 199.921875 L 710.878906 219.601562 L 823.558594 219.601562 L 823.558594 199.921875 Z M 710.878906 199.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern0);" d="M 710.878906 199.921875 L 710.878906 219.601562 L 823.4375 219.601562 L 823.4375 199.921875 Z M 710.878906 199.921875 "/>
</g>
<use xlink:href="#image11" transform="matrix(0.96,0,0,0.938182,710.880005,199.920006)"/>
<use xlink:href="#image14" transform="matrix(0.96,0,0,0.936,710.880005,210.240006)"/>
<g clip-path="url(#clip3)" clip-rule="nonzero">
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 1444.558594 239.28125 L 1444.800781 1030.078125 L 1443.839844 1030.078125 L 1443.359375 239.28125 "/>
</g>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 21.601562 571.921875 L 21.601562 588.960938 L 42.71875 588.960938 L 42.71875 571.921875 Z M 21.601562 571.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(84.799194%,84.799194%,84.799194%);fill-opacity:1;" d="M 42.480469 571.921875 L 42.480469 588.960938 L 1445.039062 588.960938 L 1445.039062 571.921875 Z M 42.480469 571.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 21.601562 588.71875 L 21.601562 635.519531 L 42.71875 635.519531 L 42.71875 588.71875 Z M 21.601562 588.71875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(84.799194%,84.799194%,84.799194%);fill-opacity:1;" d="M 42.480469 612 L 42.480469 635.519531 L 1445.039062 635.519531 L 1445.039062 612 Z M 42.480469 612 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 21.601562 635.28125 L 21.601562 682.078125 L 42.71875 682.078125 L 42.71875 635.28125 Z M 21.601562 635.28125 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(84.799194%,84.799194%,84.799194%);fill-opacity:1;" d="M 42.480469 658.558594 L 42.480469 682.078125 L 1445.039062 682.078125 L 1445.039062 658.558594 Z M 42.480469 658.558594 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 21.601562 681.839844 L 21.601562 728.640625 L 42.71875 728.640625 L 42.71875 681.839844 Z M 21.601562 681.839844 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(84.799194%,84.799194%,84.799194%);fill-opacity:1;" d="M 42.480469 705.121094 L 42.480469 728.640625 L 1445.039062 728.640625 L 1445.039062 705.121094 Z M 42.480469 705.121094 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 21.601562 728.398438 L 21.601562 775.199219 L 42.71875 775.199219 L 42.71875 728.398438 Z M 21.601562 728.398438 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(84.799194%,84.799194%,84.799194%);fill-opacity:1;" d="M 42.480469 751.679688 L 42.480469 775.199219 L 1445.039062 775.199219 L 1445.039062 751.679688 Z M 42.480469 751.679688 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 21.601562 774.960938 L 21.601562 821.761719 L 42.71875 821.761719 L 42.71875 774.960938 Z M 21.601562 774.960938 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(84.799194%,84.799194%,84.799194%);fill-opacity:1;" d="M 42.480469 798.238281 L 42.480469 821.761719 L 1445.039062 821.761719 L 1445.039062 798.238281 Z M 42.480469 798.238281 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 21.601562 821.519531 L 21.601562 868.320312 L 42.71875 868.320312 L 42.71875 821.519531 Z M 21.601562 821.519531 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(84.799194%,84.799194%,84.799194%);fill-opacity:1;" d="M 42.480469 844.800781 L 42.480469 868.320312 L 1445.039062 868.320312 L 1445.039062 844.800781 Z M 42.480469 844.800781 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 21.601562 868.078125 L 21.601562 914.878906 L 42.71875 914.878906 L 42.71875 868.078125 Z M 21.601562 868.078125 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(84.799194%,84.799194%,84.799194%);fill-opacity:1;" d="M 42.480469 891.359375 L 42.480469 914.878906 L 1445.039062 914.878906 L 1445.039062 891.359375 Z M 42.480469 891.359375 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 21.601562 914.640625 L 21.601562 961.441406 L 42.71875 961.441406 L 42.71875 914.640625 Z M 21.601562 914.640625 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(84.799194%,84.799194%,84.799194%);fill-opacity:1;" d="M 42.480469 937.921875 L 42.480469 961.441406 L 1445.039062 961.441406 L 1445.039062 937.921875 Z M 42.480469 937.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 21.601562 961.199219 L 21.601562 984.71875 L 1445.039062 984.71875 L 1445.039062 961.199219 Z M 21.601562 961.199219 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 21.601562 984.480469 L 21.601562 1008 L 42.71875 1008 L 42.71875 984.480469 Z M 21.601562 984.480469 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(84.799194%,84.799194%,84.799194%);fill-opacity:1;" d="M 42.480469 984.480469 L 42.480469 1008 L 1445.039062 1008 L 1445.039062 984.480469 Z M 42.480469 984.480469 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 21.601562 1007.761719 L 21.601562 1031.28125 L 42.71875 1031.28125 L 42.71875 1007.761719 Z M 21.601562 1007.761719 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 33.121094 1031.039062 L 33.121094 1056 L 1445.039062 1056 L 1445.039062 1031.039062 Z M 33.121094 1031.039062 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 696.960938 1055.761719 L 696.960938 1080.71875 L 736.558594 1080.71875 L 736.558594 1055.761719 Z M 696.960938 1055.761719 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 41.519531 571.921875 L 41.519531 1032 L 43.441406 1032 L 43.441406 571.921875 Z M 41.519531 571.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 115.679688 571.921875 L 115.679688 1032 L 117.601562 1032 L 117.601562 571.921875 Z M 115.679688 571.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 476.878906 571.921875 L 476.878906 1032 L 478.800781 1032 L 478.800781 571.921875 Z M 476.878906 571.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 525.839844 571.921875 L 525.839844 1032 L 527.761719 1032 L 527.761719 571.921875 Z M 525.839844 571.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 577.921875 571.921875 L 577.921875 1032 L 579.839844 1032 L 579.839844 571.921875 Z M 577.921875 571.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 617.28125 571.921875 L 617.28125 1032 L 619.199219 1032 L 619.199219 571.921875 Z M 617.28125 571.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 656.640625 571.921875 L 656.640625 1032 L 658.558594 1032 L 658.558594 571.921875 Z M 656.640625 571.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 696 571.921875 L 696 1032 L 697.921875 1032 L 697.921875 571.921875 Z M 696 571.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 735.359375 571.921875 L 735.359375 1032 L 737.28125 1032 L 737.28125 571.921875 Z M 735.359375 571.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 774.71875 571.921875 L 774.71875 1032 L 776.640625 1032 L 776.640625 571.921875 Z M 774.71875 571.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 814.078125 571.921875 L 814.078125 1032 L 816 1032 L 816 571.921875 Z M 814.078125 571.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 853.441406 571.921875 L 853.441406 1032 L 855.359375 1032 L 855.359375 571.921875 Z M 853.441406 571.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 892.800781 571.921875 L 892.800781 1032 L 894.71875 1032 L 894.71875 571.921875 Z M 892.800781 571.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 932.160156 571.921875 L 932.160156 1032 L 934.078125 1032 L 934.078125 571.921875 Z M 932.160156 571.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 971.519531 571.921875 L 971.519531 1032 L 973.441406 1032 L 973.441406 571.921875 Z M 971.519531 571.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 1010.878906 571.921875 L 1010.878906 1032 L 1012.800781 1032 L 1012.800781 571.921875 Z M 1010.878906 571.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 1050.238281 571.921875 L 1050.238281 1032 L 1052.160156 1032 L 1052.160156 571.921875 Z M 1050.238281 571.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 1089.601562 571.921875 L 1089.601562 1032 L 1091.519531 1032 L 1091.519531 571.921875 Z M 1089.601562 571.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 1128.960938 571.921875 L 1128.960938 1032 L 1130.878906 1032 L 1130.878906 571.921875 Z M 1128.960938 571.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 1168.320312 571.921875 L 1168.320312 1032 L 1170.238281 1032 L 1170.238281 571.921875 Z M 1168.320312 571.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 1207.679688 571.921875 L 1207.679688 1032 L 1209.601562 1032 L 1209.601562 571.921875 Z M 1207.679688 571.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 1247.039062 571.921875 L 1247.039062 1032 L 1248.960938 1032 L 1248.960938 571.921875 Z M 1247.039062 571.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 1286.398438 571.921875 L 1286.398438 1032 L 1288.320312 1032 L 1288.320312 571.921875 Z M 1286.398438 571.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 1325.761719 571.921875 L 1325.761719 1032 L 1327.679688 1032 L 1327.679688 571.921875 Z M 1325.761719 571.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 1365.121094 571.921875 L 1365.121094 1032 L 1367.039062 1032 L 1367.039062 571.921875 Z M 1365.121094 571.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 1404.480469 571.921875 L 1404.480469 1032 L 1406.398438 1032 L 1406.398438 571.921875 Z M 1404.480469 571.921875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 43.441406 587.761719 L 43.441406 589.679688 L 1445.039062 589.679688 L 1445.039062 587.761719 Z M 43.441406 587.761719 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 43.441406 611.039062 L 43.441406 612.960938 L 1445.039062 612.960938 L 1445.039062 611.039062 Z M 43.441406 611.039062 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 43.441406 634.320312 L 43.441406 636.238281 L 1445.039062 636.238281 L 1445.039062 634.320312 Z M 43.441406 634.320312 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 43.441406 657.601562 L 43.441406 659.519531 L 1445.039062 659.519531 L 1445.039062 657.601562 Z M 43.441406 657.601562 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 43.441406 680.878906 L 43.441406 682.800781 L 1445.039062 682.800781 L 1445.039062 680.878906 Z M 43.441406 680.878906 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 43.441406 704.160156 L 43.441406 706.078125 L 1445.039062 706.078125 L 1445.039062 704.160156 Z M 43.441406 704.160156 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 43.441406 727.441406 L 43.441406 729.359375 L 1445.039062 729.359375 L 1445.039062 727.441406 Z M 43.441406 727.441406 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 43.441406 750.71875 L 43.441406 752.640625 L 1445.039062 752.640625 L 1445.039062 750.71875 Z M 43.441406 750.71875 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 43.441406 774 L 43.441406 775.921875 L 1445.039062 775.921875 L 1445.039062 774 Z M 43.441406 774 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 43.441406 797.28125 L 43.441406 799.199219 L 1445.039062 799.199219 L 1445.039062 797.28125 Z M 43.441406 797.28125 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 43.441406 820.558594 L 43.441406 822.480469 L 1445.039062 822.480469 L 1445.039062 820.558594 Z M 43.441406 820.558594 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 43.441406 843.839844 L 43.441406 845.761719 L 1445.039062 845.761719 L 1445.039062 843.839844 Z M 43.441406 843.839844 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 43.441406 867.121094 L 43.441406 869.039062 L 1445.039062 869.039062 L 1445.039062 867.121094 Z M 43.441406 867.121094 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 43.441406 890.398438 L 43.441406 892.320312 L 1445.039062 892.320312 L 1445.039062 890.398438 Z M 43.441406 890.398438 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 43.441406 913.679688 L 43.441406 915.601562 L 1445.039062 915.601562 L 1445.039062 913.679688 Z M 43.441406 913.679688 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 43.441406 936.960938 L 43.441406 938.878906 L 1445.039062 938.878906 L 1445.039062 936.960938 Z M 43.441406 936.960938 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 43.441406 960.238281 L 43.441406 962.160156 L 1445.039062 962.160156 L 1445.039062 960.238281 Z M 43.441406 960.238281 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 43.441406 983.519531 L 43.441406 985.441406 L 1445.039062 985.441406 L 1445.039062 983.519531 Z M 43.441406 983.519531 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 43.441406 1006.800781 L 43.441406 1008.71875 L 1445.039062 1008.71875 L 1445.039062 1006.800781 Z M 43.441406 1006.800781 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 43.441406 1030.078125 L 43.441406 1032 L 1445.039062 1032 L 1445.039062 1030.078125 Z M 43.441406 1030.078125 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(74.902344%,74.902344%,74.902344%);fill-opacity:1;" d="M 47.761719 1044 L 582.238281 1044.238281 L 582.238281 1045.921875 L 47.761719 1045.679688 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(74.902344%,74.902344%,74.902344%);fill-opacity:1;" d="M 987.839844 1043.039062 L 1421.519531 1043.039062 L 1421.519531 1044.480469 L 987.839844 1044.71875 "/>
<g clip-path="url(#clip4)" clip-rule="nonzero">
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 1444.558594 239.28125 L 1444.800781 1030.078125 L 1443.839844 1030.078125 L 1443.359375 239.28125 "/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 109 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@ -1,128 +0,0 @@
#!/usr/bin/env python
import unittest
import os
import sys
import tempfile
import shutil
import subprocess
class Common(object):
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')
PDF2HTMLEX_PATH = os.path.join(SRC_DIR, 'pdf2htmlEX')
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 = [self.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
}
if __name__ == '__main__':
if not os.path.isfile(Common.PDF2HTMLEX_PATH) or not os.access(Common.PDF2HTMLEX_PATH, os.X_OK):
print >> sys.stderr, "Cannot locate pdf2htmlEX executable. Make sure source was built before running this test."
exit(1)
suites = []
loader = unittest.TestLoader()
all_modules = []
all_modules.append(__import__('test_output'))
all_modules.append(__import__('test_local_browser'))
all_classes = ['test_output', 'test_local_browser']
if bool(os.environ.get('P2H_TEST_REMOTE')):
m = __import__('test_remote_browser')
all_modules.append(m)
all_classes += m.test_classnames
test_names = []
for name in sys.argv[1:]:
test_names.append(name)
if name.find('.') == -1:
for m in all_classes:
test_names.append(m + '.' + name)
for module in all_modules:
if len(test_names) > 0 and module.__name__ not in test_names:
for n in test_names:
try:
suites.append(loader.loadTestsFromName(n, module))
except:
pass
else:
suites.append(loader.loadTestsFromModule(module))
if len(suites) == 0:
print >>sys.stderr, 'No test found'
exit(1)
failure_count = 0
runner = unittest.TextTestRunner(verbosity=2)
for suite in suites:
result = runner.run(suite)
failure_count += len(result.errors) + len(result.failures)
exit(failure_count)

81
test/test.py.in Executable file
View File

@ -0,0 +1,81 @@
#!/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')
GENERATING_MODE = bool(os.environ.get('P2H_TEST_GEN'))
# temporary directories defined in CMakeLists.txt:
TMPDIR = "@PDF2HTMLEX_TMPDIR@"
PNGDIR = "@PDF2HTMLEX_PNGDIR@"
DATDIR = "@PDF2HTMLEX_DATDIR@"
OUTDIR = "@PDF2HTMLEX_OUTDIR@"
def setUp(self):
# filter manifest
with open(os.path.join(self.DATA_DIR, 'manifest')) as inf:
with open(os.path.join(self.DATDIR, '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.DATDIR, 'base.min.css'))
shutil.copy(os.path.join(self.TEST_DIR, 'fancy.min.css'),
os.path.join(self.DATDIR, 'fancy.min.css'))
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
"""
shutil.rmtree(self.TMPDIR, ignore_errors=False, onerror=None)
os.mkdir(self.TMPDIR)
args = [Common.PDF2HTMLEX_PATH,
'--data-dir', self.DATDIR,
'--dest-dir', self.TMPDIR
] + 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.TMPDIR)
for file in files:
shutil.copy(os.path.join(self.TMPDIR,file), self.OUTDIR)
return {
'return_code' : return_code,
'output_files' : files
}

View File

@ -35,3 +35,6 @@ class test_local_browser(BrowserTests, unittest.TestCase):
if page_must_load: if page_must_load:
raise raise
self.browser.save_screenshot(png_file) self.browser.save_screenshot(png_file)
if __name__ == '__main__':
unittest.main()

View File

@ -14,8 +14,12 @@ class test_output(Common, unittest.TestCase):
args = list(args) args = list(args)
args.insert(0, os.path.join(self.TEST_DIR, 'test_output', input_file)) args.insert(0, os.path.join(self.TEST_DIR, 'test_output', input_file))
result = self.run_pdf2htmlEX(args) result = self.run_pdf2htmlEX(args)
self.maxDiff = None
if expected_output_files: if expected_output_files:
self.assertItemsEqual(result['output_files'], expected_output_files) self.assertItemsEqual(result['output_files'], expected_output_files)
print("test_output ", input_file, ": matched ", expected_output_files)
else:
print("test_output ", input_file, ": passed")
def test_generate_single_html_default_name_single_page_pdf(self): def test_generate_single_html_default_name_single_page_pdf(self):
self.run_test_case('1-page.pdf', expected_output_files = ['1-page.html']) self.run_test_case('1-page.pdf', expected_output_files = ['1-page.html'])
@ -88,3 +92,6 @@ class test_output(Common, unittest.TestCase):
def test_issue501(self): def test_issue501(self):
self.run_test_case('issue501', ['--split-pages', 1, '--embed-css', 0]); self.run_test_case('issue501', ['--split-pages', 1, '--embed-css', 0]);
if __name__ == '__main__':
unittest.main() # runs all methods that have names starting with 'test'

View File

@ -99,7 +99,7 @@ class test_remote_browser_base(BrowserTests):
passed = (sys.exc_info() == (None, None, None)) passed = (sys.exc_info() == (None, None, None))
branch = os.environ.get('TRAVIS_BRANCH', 'manual') branch = os.environ.get('TRAVIS_BRANCH', 'manual')
pull_request = os.environ.get('TRAVIS_PULL_REQUEST', 'false') pull_request = os.environ.get('TRAVIS_PULL_REQUEST', 'false')
self.sauce.jobs.update_job(self.browser.session_id, self.sauce.jobs.update_job(self.browser.session_id,
build_num=os.environ.get('TRAVIS_BUILD_NUMBER', '0'), build_num=os.environ.get('TRAVIS_BUILD_NUMBER', '0'),
name='pdf2htmlEX', name='pdf2htmlEX',
passed=passed, passed=passed,
@ -110,7 +110,7 @@ class test_remote_browser_base(BrowserTests):
raise raise
pass pass
def generate_image(self, html_file, png_file, page_must_load=True): def generate_image(self, html_file, png_file):
self.browser.get(BASEURL + html_file) self.browser.get(BASEURL + html_file)
try: try:
WebDriverWait(self.browser, 5).until(expected_conditions.presence_of_element_located((By.ID, 'page-container'))) WebDriverWait(self.browser, 5).until(expected_conditions.presence_of_element_located((By.ID, 'page-container')))