diff --git a/tests/samples/test1.png b/tests/samples/test1.png new file mode 100644 index 0000000000000000000000000000000000000000..d6db74a9cfea9ed4668b58f54d5aa22755ada0ea GIT binary patch literal 405 zcmeAS@N?(olHy`uVBq!ia0vp^A3&Ic8Ax(=OD+IXYymzYt`8nO=yhEspAmbWfq~J> z)5S5QV$Pd8hFnaB0uF(q@9R@_bAnkGZTeHW{+{YjAL(a>(ryKFA6OkMZF;65S@cUW$`uX=BCEsabCC3o__MWbd3cppqwWw%+p|BW{?z{VL^78lp vYaTqQy|IInn>cUHn1R*&?|cjl|NpzsWPN1&_q!S}oEbb_{an^LB{Ts5EaktG3U))L%wDM5!Qn$r~apm~r|L z>EaktG3U))L#`GB3AT%|AOD44<6goMq49Ztco)~<>ug1T+5}_NclZ^|ePDI4wCOd= zb89*VW|i`@ZylZ*&BzG=_T81$@rzXk`W4MOg3idxw$ShF`tz`OLRf vum4;Xek>-2=`U=04Ggg=EoWz7`2XMXG{=*)ZZ!>H=rVY^`njxgN@xNA9*(N6 literal 0 HcmV?d00001 diff --git a/tests/test_pydenticon.py b/tests/test_pydenticon.py index 8ed898f6c54e21058e363283147c42e50ddf043c..515b271d5f54c864c7102efd5d138bea5667e67f 100644 --- a/tests/test_pydenticon.py +++ b/tests/test_pydenticon.py @@ -6,6 +6,7 @@ from io import BytesIO # Third-party Python library imports. import mock import PIL +import PIL.ImageChops # Library imports. from pydenticon import Generator @@ -334,5 +335,65 @@ class GeneratorTest(unittest.TestCase): generator.generate(data, 200, 200) generate_png_mock.assert_called_with(mock.ANY, mock.ANY, mock.ANY, mock.ANY, foreground[5], background) + def test_generate_png_compare(self): + """ + Tests generated PNG identicon against a set of pre-generated samples. + """ + + # Set-up a list of foreground colours (taken from Sigil). Same as used + # for reference images. + foreground = ["rgb(45,79,255)", + "rgb(254,180,44)", + "rgb(226,121,234)", + "rgb(30,179,253)", + "rgb(232,77,65)", + "rgb(49,203,115)", + "rgb(141,69,170)"] + + # Set-up a background colour (taken from Sigil). Same as used for + # reference images. + background = "rgb(224,224,224)" + + # Set-up parameters equivalent as used for samples. + width = 200 + height = 200 + padding = (20, 20, 20, 20) + + # Load the reference images, making sure they're in RGB mode. + test1_ref = PIL.Image.open("tests/samples/test1.png").convert(mode="RGB") + test2_ref = PIL.Image.open("tests/samples/test2.png").convert(mode="RGB") + test3_ref = PIL.Image.open("tests/samples/test3.png").convert(mode="RGB") + + # Set-up the Generator. + generator = Generator(5, 5, foreground=foreground, background=background) + + # Generate first test identicon. + raw_image = generator.generate("test1", width, height, padding=padding) + image_stream = BytesIO(raw_image) + test1 = PIL.Image.open(image_stream) + + # Generate second test identicon. + raw_image = generator.generate("test2", width, height, padding=padding) + image_stream = BytesIO(raw_image) + test2 = PIL.Image.open(image_stream) + + # Generate third test identicon. + raw_image = generator.generate("test3", width, height, padding=padding) + image_stream = BytesIO(raw_image) + test3 = PIL.Image.open(image_stream) + + # Calculate differences between generated identicons and references. + diff1 = PIL.ImageChops.difference(test1, test1_ref) + diff2 = PIL.ImageChops.difference(test2, test2_ref) + diff3 = PIL.ImageChops.difference(test3, test3_ref) + + # Verify that all the diffs are essentially black (i.e. no differences + # between generated identicons and reference samples). + expected_extrema = ((0, 0), (0, 0), (0, 0)) + + self.assertEqual(diff1.getextrema(), expected_extrema) + self.assertEqual(diff2.getextrema(), expected_extrema) + self.assertEqual(diff3.getextrema(), expected_extrema) + if __name__ == '__main__': unittest.main()