* gnu/packges/graphviz.scm (python-pydot)[source]: Add patch. [arguments]: Override check phase. [native-inputs]: Add graphviz. * gnu/packages/patches/python-pydot-regression-test.patch: New file. * gnu/local.mk (dist_patch_DATA): Register it.
		
			
				
	
	
		
			79 lines
		
	
	
	
		
			3.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
	
		
			3.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
This patch is taken from the upstream repository
 | 
						|
https://github.com/pydot/pydot/commit/a10ced4d132361027a545a471af4541dea8c5cf5.patch
 | 
						|
It should be included in the 1.4.2 release.
 | 
						|
 | 
						|
 | 
						|
From a10ced4d132361027a545a471af4541dea8c5cf5 Mon Sep 17 00:00:00 2001
 | 
						|
From: Peter Nowee <peter@peternowee.com>
 | 
						|
Date: Wed, 26 Jun 2019 15:43:38 +0800
 | 
						|
Subject: [PATCH] Fix multi.dot Graphviz regression test
 | 
						|
 | 
						|
Commit d6602ad of 2018-12-01 fixed the regression test broken by commit
 | 
						|
2d55978 of 2016-07-01. This revealed that `test/graphs/multi.dot` was
 | 
						|
failing.
 | 
						|
 | 
						|
`multi.dot` was introduced in commit 2b3f088 of 2010-11-07 together
 | 
						|
with many of the other tests still here today. It has not been touched
 | 
						|
since. It is a DOT-file containing two digraphs. The regression test
 | 
						|
compares the JPEG images rendered from the DOT-file by pydot with those
 | 
						|
rendered by Graphviz's dot directly.
 | 
						|
 | 
						|
Commit 66734d2 of 2016-07-01 is the actual cause of the failure. It
 | 
						|
changed one of the render methods of the regression test,
 | 
						|
`_render_with_pydot`, from calculating a single hash for all the JPEG
 | 
						|
images to calculating separate hashes for each JPEG image and then
 | 
						|
concatenating those hashes in one long string. The other render method,
 | 
						|
`_render_with_graphviz`, still calculates a single hash over all data.
 | 
						|
For DOT-files that generate only one image the end result is the same,
 | 
						|
but because `multi.dot` has two graphs, it produces two images and this
 | 
						|
leads to comparing a string of two hashes with one single hash.
 | 
						|
 | 
						|
I do not think the change in generating the hash was intentional, for
 | 
						|
the following reasons:
 | 
						|
- Commit 66734d2 states that its purpose was to adapt the test to an
 | 
						|
  API change in pydot. It does not mention a deliberate choice to
 | 
						|
  change the testing method.
 | 
						|
- There was no effort to change `_render_with_graphviz` to also produce
 | 
						|
  multiple hashes.
 | 
						|
- Except for easier debugging in case of a failing test with multiple
 | 
						|
  images (AFAICT, only `multi.dot`), I do not see much added benefit in
 | 
						|
  checking a concatenation of the hashes of all images vs. checking one
 | 
						|
  hash of all images together: In both cases the test will fail if one
 | 
						|
  or more images is rendered differently.
 | 
						|
- Given that there were many commits authored that same hour, including
 | 
						|
  commit 2d55978 which broke the regression tests, I suspect the author
 | 
						|
  did not run the tests for each individual commit, but only at the end
 | 
						|
  of that batch, and was therefore also not alerted of this change by
 | 
						|
  the test suite.
 | 
						|
 | 
						|
Assuming that the change was not intended, this commit will now revert
 | 
						|
`_render_with_pydot` to the old behavior of calculating a single hash
 | 
						|
from all JPEG image data.
 | 
						|
 | 
						|
Tested with Debian 9.9, Graphviz 2.38.0-17, Python 2.7.13-2 and 3.5.3-1.
 | 
						|
 | 
						|
Fixes https://github.com/pydot/pydot/issues/204.
 | 
						|
---
 | 
						|
 test/pydot_unittest.py | 8 ++++----
 | 
						|
 1 file changed, 4 insertions(+), 4 deletions(-)
 | 
						|
 | 
						|
diff --git a/test/pydot_unittest.py b/test/pydot_unittest.py
 | 
						|
index 881ee16..64aa856 100644
 | 
						|
--- a/test/pydot_unittest.py
 | 
						|
+++ b/test/pydot_unittest.py
 | 
						|
@@ -194,11 +194,11 @@ def _render_with_graphviz(self, filename, encoding):
 | 
						|
 
 | 
						|
     def _render_with_pydot(self, filename, encoding):
 | 
						|
         c = pydot.graph_from_dot_file(filename, encoding=encoding)
 | 
						|
-        sha = ''
 | 
						|
+        jpe_data = bytearray()
 | 
						|
         for g in c:
 | 
						|
-            jpe_data = g.create(prog=TEST_PROGRAM, format='jpe', encoding=encoding)
 | 
						|
-            sha += sha256(jpe_data).hexdigest()
 | 
						|
-        return sha
 | 
						|
+            jpe_data.extend(g.create(prog=TEST_PROGRAM, format='jpe',
 | 
						|
+                                     encoding=encoding))
 | 
						|
+        return sha256(jpe_data).hexdigest()
 | 
						|
 
 | 
						|
     def test_my_regression_tests(self):
 | 
						|
         path = os.path.join(test_dir, TESTS_DIR_1)
 |