Home | History | Annotate | Download | only in tools
      1 #!/usr/bin/env python
      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
      4 # found in the LICENSE file.
      5 
      6 import os
      7 import sys
      8 
      9 import common
     10 
     11 class PNGDiffer():
     12   ACTUAL_TEMPLATE = '.pdf.%d.png'
     13   EXPECTED_TEMPLATE = '_expected' + ACTUAL_TEMPLATE
     14   PLATFORM_EXPECTED_TEMPLATE = '_expected_%s' + ACTUAL_TEMPLATE
     15 
     16   def __init__(self, finder):
     17     self.pdfium_diff_path = finder.ExecutablePath('pdfium_diff')
     18     self.os_name = finder.os_name
     19 
     20   def GetActualFiles(self, input_filename, source_dir, working_dir):
     21     actual_paths = []
     22     template_paths = self._GetTemplatePaths(
     23         input_filename, source_dir, working_dir)
     24     actual_path_template = template_paths[0];
     25     expected_path_template = template_paths[1]
     26     platform_expected_path_template = template_paths[2]
     27     i = 0
     28     while True:
     29       actual_path = actual_path_template % i
     30       expected_path = expected_path_template % i
     31       platform_expected_path = (
     32           platform_expected_path_template % (self.os_name, i))
     33       if os.path.exists(platform_expected_path):
     34         expected_path = platform_expected_path
     35       elif not os.path.exists(expected_path):
     36         break
     37       actual_paths.append(actual_path)
     38       i += 1
     39     return actual_paths
     40 
     41   def HasDifferences(self, input_filename, source_dir, working_dir,
     42                      redirect_output=False):
     43     template_paths = self._GetTemplatePaths(
     44         input_filename, source_dir, working_dir)
     45     actual_path_template = template_paths[0];
     46     expected_path_template = template_paths[1]
     47     platform_expected_path_template = template_paths[2]
     48     i = 0
     49     while True:
     50       actual_path = actual_path_template % i
     51       expected_path = expected_path_template % i
     52       platform_expected_path = (
     53           platform_expected_path_template % (self.os_name, i))
     54       if os.path.exists(platform_expected_path):
     55         expected_path = platform_expected_path
     56       elif not os.path.exists(expected_path):
     57         if i == 0:
     58           print "WARNING: no expected results files for " + input_filename
     59         break
     60       print "Checking " + actual_path
     61       sys.stdout.flush()
     62       error = common.RunCommand(
     63           [self.pdfium_diff_path, expected_path, actual_path], redirect_output)
     64       if error:
     65         print "FAILURE: " + input_filename + "; " + str(error)
     66         return True
     67       i += 1
     68     return False
     69 
     70   def _GetTemplatePaths(self, input_filename, source_dir, working_dir):
     71     input_root, _ = os.path.splitext(input_filename)
     72     actual_path = os.path.join(working_dir, input_root + self.ACTUAL_TEMPLATE)
     73     expected_path = os.path.join(
     74         source_dir, input_root + self.EXPECTED_TEMPLATE)
     75     platform_expected_path = os.path.join(
     76         source_dir, input_root + self.PLATFORM_EXPECTED_TEMPLATE)
     77     return (actual_path, expected_path, platform_expected_path)
     78