Cycles tests: add environment variable to update references renders.
authorBrecht Van Lommel <brechtvanlommel@gmail.com>
Sat, 2 Sep 2017 22:15:14 +0000 (00:15 +0200)
committerBrecht Van Lommel <brechtvanlommel@gmail.com>
Tue, 12 Sep 2017 10:50:44 +0000 (12:50 +0200)
This will copy new renders over references renders:
CYCLESTEST_UPDATE=1 ctest -R cycles

tests/python/cycles_render_tests.py

index ba4c04f..2bdadce 100755 (executable)
@@ -142,7 +142,7 @@ def test_get_images(filepath):
         os.makedirs(diff_dirpath)
     diff_img = os.path.join(diff_dirpath, testname + ".diff.png")
 
-    return ref_img, new_img, diff_img
+    return old_img, ref_img, new_img, diff_img
 
 
 class Report:
@@ -239,7 +239,7 @@ class Report:
         name = test_get_name(filepath)
         name = name.replace('_', ' ')
 
-        ref_img, new_img, diff_img = test_get_images(filepath)
+        old_img, ref_img, new_img, diff_img = test_get_images(filepath)
 
         status = error if error else ""
         style = """ style="background-color: #f99;" """ if error else ""
@@ -266,7 +266,7 @@ class Report:
 
 
 def verify_output(report, filepath):
-    ref_img, new_img, diff_img = test_get_images(filepath)
+    old_img, ref_img, new_img, diff_img = test_get_images(filepath)
 
     # copy new image
     if os.path.exists(new_img):
@@ -274,25 +274,35 @@ def verify_output(report, filepath):
     if os.path.exists(TEMP_FILE):
         shutil.copy(TEMP_FILE, new_img)
 
+    update = os.getenv('CYCLESTEST_UPDATE')
+
+    if os.path.exists(ref_img):
+        # diff test with threshold
+        command = (
+            IDIFF,
+            "-fail", "0.016",
+            "-failpercent", "1",
+            ref_img,
+            TEMP_FILE,
+            )
+        try:
+            subprocess.check_output(command)
+            failed = False
+        except subprocess.CalledProcessError as e:
+            if VERBOSE:
+                print_message(e.output.decode("utf-8"))
+            failed = e.returncode != 1
+    else:
+        if not update:
+            return False
 
-    if not os.path.exists(ref_img):
-        return False
+        failed = True
 
-    # diff test with threshold
-    command = (
-        IDIFF,
-        "-fail", "0.016",
-        "-failpercent", "1",
-        ref_img,
-        TEMP_FILE,
-        )
-    try:
-        subprocess.check_output(command)
+    if failed and update:
+        # update reference
+        shutil.copy(new_img, ref_img)
+        shutil.copy(new_img, old_img)
         failed = False
-    except subprocess.CalledProcessError as e:
-        if VERBOSE:
-            print_message(e.output.decode("utf-8"))
-        failed = e.returncode != 1
 
     # generate diff image
     command = (