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 subprocess 8import sys 9 10class PNGDiffer(): 11 ACTUAL_TEMPLATE = '.pdf.%d.png' 12 EXPECTED_TEMPLATE = '_expected' + ACTUAL_TEMPLATE 13 PLATFORM_EXPECTED_TEMPLATE = '_expected_%s' + ACTUAL_TEMPLATE 14 15 def __init__(self, finder): 16 self.pdfium_diff_path = finder.ExecutablePath('pdfium_diff') 17 self.os_name = finder.os_name 18 19 def HasDifferences(self, input_filename, source_dir, working_dir): 20 input_root, _ = os.path.splitext(input_filename) 21 actual_path_template = os.path.join( 22 working_dir, input_root + self.ACTUAL_TEMPLATE) 23 expected_path_template = os.path.join( 24 source_dir, input_root + self.EXPECTED_TEMPLATE) 25 platform_expected_path_template = os.path.join( 26 source_dir, input_root + self.PLATFORM_EXPECTED_TEMPLATE) 27 i = 0 28 try: 29 while True: 30 actual_path = actual_path_template % i 31 expected_path = expected_path_template % i 32 platform_expected_path = ( 33 platform_expected_path_template % (self.os_name, i)) 34 if os.path.exists(platform_expected_path): 35 expected_path = platform_expected_path 36 elif not os.path.exists(expected_path): 37 if i == 0: 38 print "WARNING: no expected results files for " + input_filename 39 break 40 print "Checking " + actual_path 41 sys.stdout.flush() 42 subprocess.check_call( 43 [self.pdfium_diff_path, expected_path, actual_path]) 44 i += 1 45 except subprocess.CalledProcessError as e: 46 print "FAILURE: " + input_filename + "; " + str(e) 47 return True 48 return False 49