Switch builds to clang by default for Linux and OS X.
[pdfium.git] / testing / tools / pngdiffer.py
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)