| OLD | NEW |
| 1 # Copyright 2015 The PDFium Authors. All rights reserved. | 1 # Copyright 2015 The PDFium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 | 5 |
| 6 import json | 6 import json |
| 7 import os | 7 import os |
| 8 import shlex | 8 import shlex |
| 9 import shutil | 9 import shutil |
| 10 | 10 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 44 # "md5" : "0b955f387740c66eb23bf0e253c80d64", | 44 # "md5" : "0b955f387740c66eb23bf0e253c80d64", |
| 45 # "options" : { | 45 # "options" : { |
| 46 # "ext" : "png", | 46 # "ext" : "png", |
| 47 # "gamma_correct" : "no" | 47 # "gamma_correct" : "no" |
| 48 # } | 48 # } |
| 49 # } | 49 # } |
| 50 # ], | 50 # ], |
| 51 # } | 51 # } |
| 52 # | 52 # |
| 53 class GoldResults(object): | 53 class GoldResults(object): |
| 54 def __init__(self, source_type, outputDir, propertiesStr, keyStr): | 54 def __init__(self, source_type, outputDir, propertiesStr, keyStr, |
| 55 ignore_hashes_file): |
| 55 """ | 56 """ |
| 56 source_type is the source_type (=corpus) field used for all results. | 57 source_type is the source_type (=corpus) field used for all results. |
| 57 output_dir is the directory where the resulting images are copied and | 58 output_dir is the directory where the resulting images are copied and |
| 58 the dm.json file is written. | 59 the dm.json file is written. |
| 59 propertiesStr is a string with space separated key/value pairs that | 60 propertiesStr is a string with space separated key/value pairs that |
| 60 is used to set the top level fields in the output JSON file. | 61 is used to set the top level fields in the output JSON file. |
| 61 keyStr is a string with space separated key/value pairs that | 62 keyStr is a string with space separated key/value pairs that |
| 62 is used to set the 'key' field in the output JSON file. | 63 is used to set the 'key' field in the output JSON file. |
| 64 ignore_hashes_file is a file that contains a list of image hashes |
| 65 that should be ignored. |
| 63 """ | 66 """ |
| 64 self._source_type = source_type | 67 self._source_type = source_type |
| 65 self._properties = self._parseKeyValuePairs(propertiesStr) | 68 self._properties = self._parseKeyValuePairs(propertiesStr) |
| 66 self._properties["key"] = self._parseKeyValuePairs(keyStr) | 69 self._properties["key"] = self._parseKeyValuePairs(keyStr) |
| 67 self._results = [] | 70 self._results = [] |
| 68 self._outputDir = outputDir | 71 self._outputDir = outputDir |
| 69 | 72 |
| 70 # make sure the output directory exists. | 73 # make sure the output directory exists. |
| 71 if not os.path.exists(outputDir): | 74 if not os.path.exists(outputDir): |
| 72 os.makedirs(outputDir) | 75 os.makedirs(outputDir) |
| 73 | 76 |
| 77 self._ignore_hashes = set() |
| 78 if ignore_hashes_file: |
| 79 with open(ignore_hashes_file, 'r') as ig_file: |
| 80 hashes=[x.strip() for x in ig_file.readlines() if x.strip()] |
| 81 self._ignore_hashes = set(hashes) |
| 82 |
| 74 def AddTestResult(self, testName, md5Hash, outputImagePath): | 83 def AddTestResult(self, testName, md5Hash, outputImagePath): |
| 75 # Copy the image to <output_dir>/<md5Hash>.<image_extension> | 84 # If the hash is in the list of hashes to ignore then we don'try |
| 85 # make a copy, but add it to the result. |
| 76 imgExt = os.path.splitext(outputImagePath)[1].lstrip(".") | 86 imgExt = os.path.splitext(outputImagePath)[1].lstrip(".") |
| 77 if not imgExt: | 87 if md5Hash not in self._ignore_hashes: |
| 78 raise ValueError("File %s does not have an extension" % outputImagePath) | 88 # Copy the image to <output_dir>/<md5Hash>.<image_extension> |
| 79 newFilePath = os.path.join(self._outputDir, md5Hash + '.' + imgExt) | 89 if not imgExt: |
| 80 shutil.copy2(outputImagePath, newFilePath) | 90 raise ValueError("File %s does not have an extension" % outputImagePath) |
| 91 newFilePath = os.path.join(self._outputDir, md5Hash + '.' + imgExt) |
| 92 shutil.copy2(outputImagePath, newFilePath) |
| 81 | 93 |
| 82 # Add an entry to the list of test results | 94 # Add an entry to the list of test results |
| 83 self._results.append({ | 95 self._results.append({ |
| 84 "key": { | 96 "key": { |
| 85 "name": testName, | 97 "name": testName, |
| 86 "source_type": self._source_type, | 98 "source_type": self._source_type, |
| 87 }, | 99 }, |
| 88 "md5": md5Hash, | 100 "md5": md5Hash, |
| 89 "options": { | 101 "options": { |
| 90 "ext": imgExt, | 102 "ext": imgExt, |
| (...skipping 25 matching lines...) Expand all Loading... |
| 116 os.makedirs(testDir) | 128 os.makedirs(testDir) |
| 117 open(os.path.join(testDir, "image1.png"), 'wb').close() | 129 open(os.path.join(testDir, "image1.png"), 'wb').close() |
| 118 open(os.path.join(testDir, "image2.png"), 'wb').close() | 130 open(os.path.join(testDir, "image2.png"), 'wb').close() |
| 119 open(os.path.join(testDir, "image3.png"), 'wb').close() | 131 open(os.path.join(testDir, "image3.png"), 'wb').close() |
| 120 | 132 |
| 121 # Create an instance and add results. | 133 # Create an instance and add results. |
| 122 propStr = """build_number 2 "builder name" Builder-Name gitHash a4a338179013b0
29d6dd55e737b5bd648a9fb68c""" | 134 propStr = """build_number 2 "builder name" Builder-Name gitHash a4a338179013b0
29d6dd55e737b5bd648a9fb68c""" |
| 123 | 135 |
| 124 keyStr = "arch arm64 compiler Clang configuration Debug" | 136 keyStr = "arch arm64 compiler Clang configuration Debug" |
| 125 | 137 |
| 126 gr = GoldResults("pdfium", testDir, propStr, keyStr) | 138 hash_file = os.path.join(testDir, "ignore_hashes.txt") |
| 139 with open(hash_file, 'wb') as f: |
| 140 f.write("\n".join(["hash-1","hash-4"]) + "\n") |
| 141 |
| 142 gr = GoldResults("pdfium", testDir, propStr, keyStr, hash_file) |
| 127 gr.AddTestResult("test-1", "hash-1", os.path.join(testDir, "image1.png")) | 143 gr.AddTestResult("test-1", "hash-1", os.path.join(testDir, "image1.png")) |
| 128 gr.AddTestResult("test-2", "hash-2", os.path.join(testDir, "image2.png")) | 144 gr.AddTestResult("test-2", "hash-2", os.path.join(testDir, "image2.png")) |
| 129 gr.AddTestResult("test-3", "hash-3", os.path.join(testDir, "image3.png")) | 145 gr.AddTestResult("test-3", "hash-3", os.path.join(testDir, "image3.png")) |
| 130 gr.WriteResults() | 146 gr.WriteResults() |
| OLD | NEW |