[poppler] Branch 'poppler-0.18' - regtest/backends regtest/commands regtest/TestRun.py

Carlos Garcia Campos carlosgc at kemper.freedesktop.org
Tue Nov 1 06:15:41 PDT 2011


 regtest/TestRun.py            |    2 +-
 regtest/backends/__init__.py  |   34 ++++++++++++++++++++++++++++++++--
 regtest/commands/run-tests.py |    4 ++++
 3 files changed, 37 insertions(+), 3 deletions(-)

New commits:
commit 372dc1ef79983f51c1eac52d211d7569a305a273
Author: Carlos Garcia Campos <carlosgc at gnome.org>
Date:   Tue Nov 1 14:13:10 2011 +0100

    regtest: Add --update-refs command line option to run-tests command
    
    It allows to update the references of failing tests.

diff --git a/regtest/TestRun.py b/regtest/TestRun.py
index f03840b..80a4d33 100644
--- a/regtest/TestRun.py
+++ b/regtest/TestRun.py
@@ -66,7 +66,7 @@ class TestRun:
             self._stderr.append("%s (%s)" % (doc_path, backend.get_name()))
 
         if ref_has_md5 and test_has_md5:
-            if backend.compare_checksums(refs_path, test_path, not self.config.keep_results, self.config.create_diffs):
+            if backend.compare_checksums(refs_path, test_path, not self.config.keep_results, self.config.create_diffs, self.config.update_refs):
                 # FIXME: remove dir if it's empty?
                 print("PASS")
                 self._n_passed += 1
diff --git a/regtest/backends/__init__.py b/regtest/backends/__init__.py
index 2e90759..98d5a07 100644
--- a/regtest/backends/__init__.py
+++ b/regtest/backends/__init__.py
@@ -18,6 +18,8 @@
 
 from hashlib import md5
 import os
+import shutil
+import errno
 from Config import Config
 
 __all__ = [ 'register_backend',
@@ -61,12 +63,13 @@ class Backend:
 
         md5_file.close()
 
-    def compare_checksums(self, refs_path, out_path, remove_results = True, create_diffs = True):
+    def compare_checksums(self, refs_path, out_path, remove_results = True, create_diffs = True, update_refs = False):
         retval = True
 
         md5_path = os.path.join(refs_path, self._name)
         md5_file = open(md5_path + '.md5', 'r')
         tests = os.listdir(out_path)
+        result_md5 = []
 
         for line in md5_file.readlines():
             md5sum, ref_path = line.strip('\n').split(' ', 1)
@@ -81,8 +84,13 @@ class Backend:
 
             result_path = os.path.join(out_path, basename)
             f = open(result_path, 'rb')
-            matched = md5sum == md5(f.read()).hexdigest()
+            result_md5sum = md5(f.read()).hexdigest()
+            matched = md5sum == result_md5sum
             f.close()
+
+            if update_refs:
+                result_md5.append("%s %s\n" % (result_md5sum, ref_path))
+
             if matched:
                 if remove_results:
                     os.remove(result_path)
@@ -97,9 +105,31 @@ class Backend:
                         except NotImplementedError:
                             # Diff not supported by backend
                             pass
+
+                if update_refs:
+                    if os.path.exists(ref_path):
+                        print("Updating image reference %s" % (ref_path))
+                        shutil.copyfile(result_path, ref_path)
+
                 retval = False
         md5_file.close()
 
+        if update_refs and not retval:
+            print("Updating md5 reference %s" % (md5_path))
+            f = open(md5_path + '.md5.tmp', 'wb')
+            f.writelines(result_md5)
+            f.close()
+            os.rename(md5_path + '.md5.tmp', md5_path + '.md5')
+
+            for ref in ('.crashed', '.failed', '.stderr'):
+                src = os.path.join(out_path, self._name + ref)
+                dest = os.path.join(refs_path, self._name + ref)
+                try:
+                    shutil.copyfile(src, dest)
+                except IOError as e:
+                    if e.errno != errno.ENOENT:
+                        raise
+
         return retval
 
     def has_md5(self, test_path):
diff --git a/regtest/commands/run-tests.py b/regtest/commands/run-tests.py
index c1a8b6f..d05d815 100644
--- a/regtest/commands/run-tests.py
+++ b/regtest/commands/run-tests.py
@@ -44,12 +44,16 @@ class RunTests(Command):
         parser.add_argument('--create-diffs',
                             action = 'store_true', dest = 'create_diffs', default = False,
                             help = 'Create diff files for failed tests')
+        parser.add_argument('--update-refs',
+                            action = 'store_true', dest = 'update_refs', default = False,
+                            help = 'Update references for failed tests')
         parser.add_argument('tests')
 
     def run(self, options):
         config = Config()
         config.keep_results = options['keep_results']
         config.create_diffs = options['create_diffs']
+        config.update_refs = options['update_refs']
 
         t = Timer()
         doc = options['tests']


More information about the poppler mailing list