| OLD | NEW | 
|---|
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python | 
| 2 # Copyright 2015 The PDFium Authors. All rights reserved. | 2 # Copyright 2015 The PDFium Authors. All rights reserved. | 
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be | 
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. | 
| 5 | 5 | 
| 6 import optparse | 6 import optparse | 
| 7 import os | 7 import os | 
| 8 import re | 8 import re | 
| 9 import subprocess | 9 import subprocess | 
| 10 import sys | 10 import sys | 
| 11 | 11 | 
|  | 12 import common | 
|  | 13 | 
| 12 # Nomenclature: | 14 # Nomenclature: | 
| 13 #   x_root - "x" | 15 #   x_root - "x" | 
| 14 #   x_filename - "x.ext" | 16 #   x_filename - "x.ext" | 
| 15 #   x_path - "path/to/a/b/c/x.ext" | 17 #   x_path - "path/to/a/b/c/x.ext" | 
| 16 #   c_dir - "path/to/a/b/c" | 18 #   c_dir - "path/to/a/b/c" | 
| 17 | 19 | 
| 18 def generate_and_test(input_filename, source_dir, working_dir, | 20 def generate_and_test(input_filename, source_dir, working_dir, | 
| 19                       fixup_path, pdfium_test_path): | 21                       fixup_path, pdfium_test_path, text_diff_path): | 
| 20   input_root, _ = os.path.splitext(input_filename) | 22   input_root, _ = os.path.splitext(input_filename) | 
| 21   input_path = os.path.join(source_dir, input_root + '.in') | 23   input_path = os.path.join(source_dir, input_root + '.in') | 
| 22   pdf_path = os.path.join(working_dir, input_root + '.pdf') | 24   pdf_path = os.path.join(working_dir, input_root + '.pdf') | 
| 23   txt_path = os.path.join(working_dir, input_root + '.txt') | 25   txt_path = os.path.join(working_dir, input_root + '.txt') | 
| 24   expected_path = os.path.join(source_dir, input_root + '_expected.txt') | 26   expected_path = os.path.join(source_dir, input_root + '_expected.txt') | 
| 25   try: | 27   try: | 
|  | 28     sys.stdout.flush() | 
| 26     subprocess.check_call( | 29     subprocess.check_call( | 
| 27         [fixup_path, '--output-dir=' + working_dir, input_path]) | 30         [sys.executable, fixup_path, '--output-dir=' + working_dir, input_path]) | 
| 28     with open(txt_path, 'w') as outfile: | 31     with open(txt_path, 'w') as outfile: | 
| 29       subprocess.check_call([pdfium_test_path, pdf_path], stdout=outfile) | 32       subprocess.check_call([pdfium_test_path, pdf_path], stdout=outfile) | 
| 30     subprocess.check_call(['diff', expected_path, txt_path]) | 33     subprocess.check_call( | 
|  | 34         [sys.executable, text_diff_path, expected_path, txt_path]) | 
| 31   except subprocess.CalledProcessError as e: | 35   except subprocess.CalledProcessError as e: | 
| 32     print "FAILURE: " + input_filename + "; " + str(e) | 36     print "FAILURE: " + input_filename + "; " + str(e) | 
| 33     return False | 37     return False | 
| 34   return True | 38   return True | 
| 35 | 39 | 
| 36 def main(): | 40 def main(): | 
| 37   parser = optparse.OptionParser() | 41   parser = optparse.OptionParser() | 
| 38   parser.add_option('--build-dir', default=os.path.join('out', 'Debug'), | 42   parser.add_option('--build-dir', default=os.path.join('out', 'Debug'), | 
| 39                     help='relative path from the base source directory') | 43                     help='relative path from the base source directory') | 
| 40   options, args = parser.parse_args() | 44   options, args = parser.parse_args() | 
| 41 | 45   finder = common.DirectoryFinder(options.build_dir) | 
| 42   # Expect |my_dir| to be .../pdfium/testing/tools. | 46   fixup_path = finder.ScriptPath('fixup_pdf_template.py') | 
| 43   my_dir = os.path.dirname(os.path.realpath(__file__)) | 47   text_diff_path = finder.ScriptPath('text_diff.py') | 
| 44   testing_dir = os.path.dirname(my_dir) | 48   source_dir = finder.TestingDir(os.path.join('resources', 'javascript')) | 
| 45   pdfium_dir = os.path.dirname(testing_dir) | 49   pdfium_test_path = finder.ExecutablePath('pdfium_test') | 
| 46   if (os.path.basename(my_dir) != 'tools' or | 50   working_dir = finder.WorkingDir(os.path.join('testing', 'javascript')) | 
| 47       os.path.basename(testing_dir) != 'testing'): |  | 
| 48     print 'Confused, can not find pdfium root directory, aborting.' |  | 
| 49     return 1 |  | 
| 50 |  | 
| 51   # Other scripts are found in the same directory as this one. |  | 
| 52   fixup_path = os.path.join(my_dir, 'fixup_pdf_template.py') |  | 
| 53 |  | 
| 54   # test files are in .../pdfium/testing/resources/javascript. |  | 
| 55   source_dir = os.path.join(testing_dir, 'resources', 'javascript') |  | 
| 56 |  | 
| 57   # Find path to build directory.  This depends on whether this is a |  | 
| 58   # standalone build vs. a build as part of a chromium checkout. For |  | 
| 59   # standalone, we expect a path like .../pdfium/out/Debug, but for |  | 
| 60   # chromium, we expect a path like .../src/out/Debug two levels |  | 
| 61   # higher (to skip over the third_party/pdfium path component under |  | 
| 62   # which chromium sticks pdfium). |  | 
| 63   base_dir = pdfium_dir |  | 
| 64   one_up_dir = os.path.dirname(base_dir) |  | 
| 65   two_up_dir = os.path.dirname(one_up_dir) |  | 
| 66   if (os.path.basename(two_up_dir) == 'src' and |  | 
| 67       os.path.basename(one_up_dir) == 'third_party'): |  | 
| 68     base_dir = two_up_dir |  | 
| 69   build_dir = os.path.join(base_dir, options.build_dir) |  | 
| 70 |  | 
| 71   # Compiled binaries are found under the build path. |  | 
| 72   pdfium_test_path = os.path.join(build_dir, 'pdfium_test') |  | 
| 73   if sys.platform.startswith('win'): |  | 
| 74     pdfium_test_path = pdfium_test_path + '.exe' |  | 
| 75   # TODO(tsepez): Mac may require special handling here. |  | 
| 76 |  | 
| 77   # Place generated files under the build directory, not source directory. |  | 
| 78   gen_dir = os.path.join(build_dir, 'gen', 'pdfium') |  | 
| 79   working_dir = os.path.join(gen_dir, 'testing', 'javascript') |  | 
| 80   if not os.path.exists(working_dir): | 51   if not os.path.exists(working_dir): | 
| 81     os.makedirs(working_dir) | 52     os.makedirs(working_dir) | 
| 82 | 53 | 
| 83   os_exit_code = 0 | 54   failures = [] | 
| 84   input_file_re = re.compile('^[a-zA-Z0-9_.]+[.]in$') | 55   input_file_re = re.compile('^[a-zA-Z0-9_.]+[.]in$') | 
| 85   for input_filename in os.listdir(source_dir): | 56   for input_filename in os.listdir(source_dir): | 
| 86     if input_file_re.match(input_filename): | 57     if input_file_re.match(input_filename): | 
| 87       input_path = os.path.join(source_dir, input_filename) | 58       input_path = os.path.join(source_dir, input_filename) | 
| 88       if os.path.isfile(input_path): | 59       if os.path.isfile(input_path): | 
| 89         if not generate_and_test(input_filename, source_dir, working_dir, | 60         if not generate_and_test(input_filename, source_dir, working_dir, | 
| 90                                  fixup_path, pdfium_test_path): | 61                                  fixup_path, pdfium_test_path, text_diff_path): | 
| 91           os_exit_code = 1 | 62           failures.append(input_path) | 
| 92 | 63 | 
| 93   return os_exit_code | 64   if failures: | 
|  | 65     print '\n\nSummary of Failures:' | 
|  | 66     for failure in failures: | 
|  | 67       print failure | 
|  | 68     return 1 | 
|  | 69   return 0 | 
| 94 | 70 | 
| 95 | 71 | 
| 96 if __name__ == '__main__': | 72 if __name__ == '__main__': | 
| 97   sys.exit(main()) | 73   sys.exit(main()) | 
| OLD | NEW | 
|---|