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 6import os 7import sys 8 9import common 10 11class 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