Chromium Code Reviews| Index: testing/tools/pngdiffer.py |
| diff --git a/testing/tools/pngdiffer.py b/testing/tools/pngdiffer.py |
| new file mode 100755 |
| index 0000000000000000000000000000000000000000..1891044481c3f0b7f56d913ac92e055f09ddeb7c |
| --- /dev/null |
| +++ b/testing/tools/pngdiffer.py |
| @@ -0,0 +1,94 @@ |
| +#!/usr/bin/env python |
| +# Copyright 2015 The PDFium Authors. All rights reserved. |
| +# Use of this source code is governed by a BSD-style license that can be |
| +# found in the LICENSE file. |
| + |
| +import os |
| +import subprocess |
| +import sys |
| + |
| +class PNGDiffer(): |
| + def __init__(self, os_name, pdfium_diff_path): |
| + self.pdfium_diff_path = pdfium_diff_path |
| + self.actual_template = '.pdf.%d.png' |
|
Lei Zhang
2015/04/02 23:16:20
this can be a class constant
Tom Sepez
2015/04/03 18:13:14
Done.
|
| + self.expected_template = '_expected' + self.actual_template |
| + # os_name to be used shortly for platform-specifc result files. |
| + |
| + def HasDifferences(self, input_filename, source_dir, working_dir): |
| + input_root, _ = os.path.splitext(input_filename) |
| + actual_path_template = os.path.join( |
| + working_dir, input_root + self.actual_template) |
| + expected_path_template = os.path.join( |
| + source_dir, input_root + self.expected_template) |
| + i = 0 |
| + try: |
| + while True: |
| + actual_path = actual_path_template % i; |
| + expected_path = expected_path_template % i; |
| + if not os.path.exists(expected_path): |
| + if i == 0: |
| + print "WARNING: no expected results files for " + input_filename |
| + break |
| + print "Checking " + actual_path |
| + sys.stdout.flush() |
| + subprocess.check_call( |
| + [self.pdfium_diff_path, expected_path, actual_path]) |
| + i += 1 |
| + except subprocess.CalledProcessError as e: |
| + print "FAILURE: " + input_filename + "; " + str(e) |
| + return True |
| + return False |
| + |
| + |
| +# Testing. |
|
Lei Zhang
2015/04/02 23:16:20
Other python projects within the chromium-sphere p
Tom Sepez
2015/04/03 18:13:15
Comment is misleading. This makes a command-line
|
| +def main(argv): |
| + if sys.platform.startswith('linux'): |
|
Lei Zhang
2015/04/02 23:16:20
This can go in to common.py since we use it everyw
Tom Sepez
2015/04/03 18:13:14
Done.
|
| + os_name = 'linux' |
| + elif sys.platform.startswith('win'): |
| + os_name = 'win' |
| + elif sys.platform.startswith('darwin'): |
| + os_name = 'mac' |
| + else: |
| + print 'Confused, can not determine OS, aborting.' |
| + return 1 |
| + |
| + if len(argv) != 4: |
| + print "usage: %s <filename> <source-dir> <working-dir>" % argv[0] |
| + return 1 |
| + |
| + # Expect |my_dir| to be .../pdfium/testing/tools. |
| + my_dir = os.path.dirname(os.path.realpath(__file__)) |
| + testing_dir = os.path.dirname(my_dir) |
| + pdfium_dir = os.path.dirname(testing_dir) |
| + if (os.path.basename(my_dir) != 'tools' or |
| + os.path.basename(testing_dir) != 'testing'): |
| + print 'Confused, can not find pdfium root directory, aborting.' |
| + return 1 |
| + |
| + # Find path to build directory. This depends on whether this is a |
| + # standalone build vs. a build as part of a chromium checkout. For |
| + # standalone, we expect a path like .../pdfium/out/Debug, but for |
| + # chromium, we expect a path like .../src/out/Debug two levels |
| + # higher (to skip over the third_party/pdfium path component under |
| + # which chromium sticks pdfium). |
| + base_dir = pdfium_dir |
| + one_up_dir = os.path.dirname(base_dir) |
| + two_up_dir = os.path.dirname(one_up_dir) |
| + if (os.path.basename(two_up_dir) == 'src' and |
| + os.path.basename(one_up_dir) == 'third_party'): |
| + base_dir = two_up_dir |
| + build_dir = os.path.join(base_dir, 'out', 'Debug') |
| + |
| + # Compiled binaries are found under the build path. |
| + pdfium_diff_path = os.path.join(build_dir, 'pdfium_diff') |
| + if sys.platform.startswith('win'): |
| + pdfium_diff_path = pdfium_diff_path + '.exe' |
| + |
| + differ = PNGDiffer(os_name, pdfium_diff_path) |
| + if differ.HasDifferences(argv[1], argv[2], argv[3]): |
| + print "Returned true" |
| + |
| + return 0 |
| + |
| +if __name__ == '__main__': |
| + sys.exit(main(sys.argv)) |