mirror of
https://github.com/google/pybadges.git
synced 2025-09-04 16:50:16 +02:00
126 lines
4.6 KiB
Python
126 lines
4.6 KiB
Python
# Copyright 2018 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.
|
|
"""Tests for pybadges."""
|
|
|
|
import base64
|
|
import doctest
|
|
import json
|
|
import os.path
|
|
import unittest
|
|
import pathlib
|
|
import sys
|
|
import tempfile
|
|
import xmldiff.main
|
|
|
|
import pybadges
|
|
|
|
TEST_DIR = os.path.dirname(__file__)
|
|
|
|
PNG_IMAGE_B64 = (
|
|
'iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAIAAAD91JpzAAAAD0lEQVQI12P4zw'
|
|
'AD/xkYAA/+Af8iHnLUAAAAAElFTkSuQmCC')
|
|
PNG_IMAGE = base64.b64decode(PNG_IMAGE_B64)
|
|
|
|
|
|
class TestPybadgesBadge(unittest.TestCase):
|
|
"""Tests for pybadges.badge."""
|
|
|
|
def test_docs(self):
|
|
doctest.testmod(pybadges, optionflags=doctest.ELLIPSIS)
|
|
|
|
def test_whole_link_and_left_link(self):
|
|
with self.assertRaises(ValueError):
|
|
pybadges.badge(left_text='foo',
|
|
right_text='bar',
|
|
left_link='http://example.com/',
|
|
whole_link='http://example.com/')
|
|
|
|
def test_changes(self):
|
|
with open(os.path.join(TEST_DIR, 'test-badges.json'), 'r') as f:
|
|
examples = json.load(f)
|
|
|
|
for example in examples:
|
|
file_name = example.pop('file_name')
|
|
with self.subTest(example=file_name):
|
|
filepath = os.path.join(TEST_DIR, 'golden-images', file_name)
|
|
|
|
with open(filepath, mode="r", encoding="utf-8") as f:
|
|
golden_image = f.read()
|
|
pybadge_image = pybadges.badge(**example)
|
|
|
|
diff = xmldiff.main.diff_texts(golden_image, pybadge_image)
|
|
self.assertFalse(diff)
|
|
|
|
|
|
class TestEmbedImage(unittest.TestCase):
|
|
"""Tests for pybadges._embed_image."""
|
|
|
|
def test_data_url(self):
|
|
url = 'data:image/png;base64,' + PNG_IMAGE_B64
|
|
self.assertEqual(url, pybadges._embed_image(url))
|
|
|
|
def test_http_url(self):
|
|
url = 'https://dev.w3.org/SVG/tools/svgweb/samples/svg-files/python.svg'
|
|
self.assertRegex(pybadges._embed_image(url),
|
|
r'^data:image/svg(\+xml)?;base64,')
|
|
|
|
def test_not_image_url(self):
|
|
with self.assertRaisesRegex(ValueError,
|
|
'expected an image, got "text"'):
|
|
pybadges._embed_image('http://www.google.com/')
|
|
|
|
@unittest.skipIf(sys.platform.startswith("win"), "requires Unix filesystem")
|
|
def test_svg_file_path(self):
|
|
image_path = os.path.abspath(
|
|
os.path.join(TEST_DIR, 'golden-images', 'build-failure.svg'))
|
|
self.assertRegex(pybadges._embed_image(image_path),
|
|
r'^data:image/svg(\+xml)?;base64,')
|
|
|
|
@unittest.skipIf(sys.platform.startswith("win"), "requires Unix filesystem")
|
|
def test_png_file_path(self):
|
|
with tempfile.NamedTemporaryFile() as png:
|
|
png.write(PNG_IMAGE)
|
|
png.flush()
|
|
self.assertEqual(pybadges._embed_image(png.name),
|
|
'data:image/png;base64,' + PNG_IMAGE_B64)
|
|
|
|
@unittest.skipIf(sys.platform.startswith("win"), "requires Unix filesystem")
|
|
def test_unknown_type_file_path(self):
|
|
with tempfile.NamedTemporaryFile() as non_image:
|
|
non_image.write(b'Hello')
|
|
non_image.flush()
|
|
with self.assertRaisesRegex(ValueError,
|
|
'not able to determine file type'):
|
|
pybadges._embed_image(non_image.name)
|
|
|
|
@unittest.skipIf(sys.platform.startswith("win"), "requires Unix filesystem")
|
|
def test_text_file_path(self):
|
|
with tempfile.NamedTemporaryFile(suffix='.txt') as non_image:
|
|
non_image.write(b'Hello')
|
|
non_image.flush()
|
|
with self.assertRaisesRegex(ValueError,
|
|
'expected an image, got "text"'):
|
|
pybadges._embed_image(non_image.name)
|
|
|
|
def test_file_url(self):
|
|
image_path = os.path.abspath(
|
|
os.path.join(TEST_DIR, 'golden-images', 'build-failure.svg'))
|
|
|
|
with self.assertRaisesRegex(ValueError, 'unsupported scheme "file"'):
|
|
pybadges._embed_image(pathlib.Path(image_path).as_uri())
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|