diff --git a/build_golden_images.py b/build_golden_images.py
index d403e67..7ed730d 100644
--- a/build_golden_images.py
+++ b/build_golden_images.py
@@ -21,17 +21,25 @@ import os.path
import pkg_resources
import pybadges
+from tests import image_server
+from tests import test_pybadges
def generate_images(source_json_path, target_directory):
- os.makedirs(target_directory, exist_ok=True)
- with open(source_json_path) as f:
- examples = json.load(f)
+ srv = image_server.ImageServer(test_pybadges.PNG_IMAGE)
+ srv.start_server()
+ try:
+ os.makedirs(target_directory, exist_ok=True)
+ with open(source_json_path) as f:
+ examples = json.load(f)
- for example in examples:
- filename = os.path.join(target_directory, example.pop('file_name'))
- with open(filename, 'w') as f:
- f.write(pybadges.badge(**example))
+ for example in examples:
+ srv.fix_embedded_url_reference(example)
+ filename = os.path.join(target_directory, example.pop('file_name'))
+ with open(filename, 'w', encoding='utf-8') as f:
+ f.write(pybadges.badge(**example))
+ finally:
+ srv.stop_server()
def main():
diff --git a/tests/__init__.py b/tests/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/tests/golden-images/accuracy.svg b/tests/golden-images/accuracy.svg
index bb38ef2..ae5c657 100644
--- a/tests/golden-images/accuracy.svg
+++ b/tests/golden-images/accuracy.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tests/golden-images/build-failure.svg b/tests/golden-images/build-failure.svg
index c11d95e..a4c3ddd 100644
--- a/tests/golden-images/build-failure.svg
+++ b/tests/golden-images/build-failure.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tests/golden-images/build-passing.svg b/tests/golden-images/build-passing.svg
index 35d7ca5..7a907d0 100644
--- a/tests/golden-images/build-passing.svg
+++ b/tests/golden-images/build-passing.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tests/golden-images/build-running.svg b/tests/golden-images/build-running.svg
index 822ca8d..d1aaae5 100644
--- a/tests/golden-images/build-running.svg
+++ b/tests/golden-images/build-running.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tests/golden-images/complete.svg b/tests/golden-images/complete.svg
index 00f6655..3f2ee19 100644
--- a/tests/golden-images/complete.svg
+++ b/tests/golden-images/complete.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tests/golden-images/embedded-logo.svg b/tests/golden-images/embedded-logo.svg
index 159f80e..8292fc7 100644
--- a/tests/golden-images/embedded-logo.svg
+++ b/tests/golden-images/embedded-logo.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tests/golden-images/github.svg b/tests/golden-images/github.svg
index 5093965..7770b2d 100644
--- a/tests/golden-images/github.svg
+++ b/tests/golden-images/github.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tests/golden-images/license.svg b/tests/golden-images/license.svg
index 43a94a9..13811dc 100644
--- a/tests/golden-images/license.svg
+++ b/tests/golden-images/license.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tests/golden-images/no-embedded-logo.svg b/tests/golden-images/no-embedded-logo.svg
index 06c17af..4976507 100644
--- a/tests/golden-images/no-embedded-logo.svg
+++ b/tests/golden-images/no-embedded-logo.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tests/golden-images/pip.svg b/tests/golden-images/pip.svg
index bdf0850..1a7be88 100644
--- a/tests/golden-images/pip.svg
+++ b/tests/golden-images/pip.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tests/golden-images/python.svg b/tests/golden-images/python.svg
index c9cdacb..cde40b4 100644
--- a/tests/golden-images/python.svg
+++ b/tests/golden-images/python.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tests/golden-images/saying-arabic.svg b/tests/golden-images/saying-arabic.svg
index 9c45022..1e454e8 100644
--- a/tests/golden-images/saying-arabic.svg
+++ b/tests/golden-images/saying-arabic.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tests/golden-images/saying-chinese.svg b/tests/golden-images/saying-chinese.svg
index f6f9470..b207bed 100644
--- a/tests/golden-images/saying-chinese.svg
+++ b/tests/golden-images/saying-chinese.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tests/golden-images/saying-russian.svg b/tests/golden-images/saying-russian.svg
index 24b25f3..c1f40c1 100644
--- a/tests/golden-images/saying-russian.svg
+++ b/tests/golden-images/saying-russian.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tests/golden-images/status.svg b/tests/golden-images/status.svg
index 127388c..e1126c6 100644
--- a/tests/golden-images/status.svg
+++ b/tests/golden-images/status.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tests/golden-images/tests.svg b/tests/golden-images/tests.svg
index 6f47238..330ee09 100644
--- a/tests/golden-images/tests.svg
+++ b/tests/golden-images/tests.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tests/image_server.py b/tests/image_server.py
new file mode 100644
index 0000000..25fc01c
--- /dev/null
+++ b/tests/image_server.py
@@ -0,0 +1,51 @@
+# Copyright 2022 The pybadge Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""An HTTP image server that can be used to set logo embedding.
+
+The server will respond to any request with the image data provided in the
+constructor.
+"""
+
+from http import server
+import threading
+
+
+class ImageServer:
+
+ def __init__(self, image_data):
+ self._image_data = image_data
+
+ def start_server(self):
+ srv = self
+
+ class Handler(server.BaseHTTPRequestHandler):
+
+ def do_GET(self):
+ self.send_response(200)
+ self.send_header('Content-Type', 'image/png')
+ self.end_headers()
+ self.wfile.write(srv._image_data)
+
+ self._httpd = server.HTTPServer(('localhost', 0), Handler)
+ self.logo_url = "http://localhost:{0}".format(self._httpd.server_port)
+
+ thread = threading.Thread(target=self._httpd.serve_forever)
+ thread.start()
+
+ def fix_embedded_url_reference(self, example):
+ if example.get("logo") == "":
+ example["logo"] = self.logo_url
+
+ def stop_server(self):
+ self._httpd.shutdown()
diff --git a/tests/test_pybadges.py b/tests/test_pybadges.py
index 370a49a..5cf6af4 100644
--- a/tests/test_pybadges.py
+++ b/tests/test_pybadges.py
@@ -17,13 +17,14 @@ import base64
import doctest
import json
import os.path
-import unittest
import pathlib
import sys
import tempfile
+import unittest
import xmldiff.main
import pybadges
+from tests import image_server
TEST_DIR = os.path.dirname(__file__)
@@ -36,6 +37,15 @@ PNG_IMAGE = base64.b64decode(PNG_IMAGE_B64)
class TestPybadgesBadge(unittest.TestCase):
"""Tests for pybadges.badge."""
+ def setUp(self):
+ super().setUp()
+ self._image_server = image_server.ImageServer(PNG_IMAGE)
+ self._image_server.start_server()
+
+ def tearDown(self):
+ super().tearDown()
+ self._image_server.stop_server()
+
def test_docs(self):
doctest.testmod(pybadges, optionflags=doctest.ELLIPSIS)
@@ -51,6 +61,7 @@ class TestPybadgesBadge(unittest.TestCase):
examples = json.load(f)
for example in examples:
+ self._image_server.fix_embedded_url_reference(example)
file_name = example.pop('file_name')
with self.subTest(example=file_name):
goldenpath = os.path.join(TEST_DIR, 'golden-images', file_name)
@@ -81,8 +92,6 @@ class TestPybadgesBadge(unittest.TestCase):
"images for %s differ:\n%s\nview with:\npython -m webbrowser %s"
% (file_name, diff, html.name))
- self.assertFalse(diff,)
-
class TestEmbedImage(unittest.TestCase):
"""Tests for pybadges._embed_image."""