You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
351 lines
15 KiB
351 lines
15 KiB
import os
|
|
import pytest
|
|
import shutil
|
|
from calculate.templates.format.base_format import FormatError
|
|
from calculate.templates.format.backgrounds_format import BackgroundsFormat
|
|
from calculate.templates.template_engine import ParametersContainer
|
|
from calculate.variables.datavars import NamespaceNode, VariableNode, ListType
|
|
|
|
|
|
datavars = NamespaceNode("<root>")
|
|
datavars.add_namespace(NamespaceNode("main"))
|
|
VariableNode("cl_resolutions", datavars.main, ListType,
|
|
source=["1024x768"])
|
|
|
|
|
|
TMP_BACKUP_DIR = 'tests/templates/format/testfiles/backgrounds/tmp.backup'
|
|
TMP_DIR = 'tests/templates/format/testfiles/backgrounds/tmp'
|
|
|
|
|
|
@pytest.mark.formats
|
|
@pytest.mark.backgrounds
|
|
def test_make_tmp_dir():
|
|
if not os.path.exists(TMP_DIR):
|
|
shutil.copytree(TMP_BACKUP_DIR, TMP_DIR)
|
|
|
|
|
|
@pytest.mark.formats
|
|
@pytest.mark.backgrounds
|
|
@pytest.mark.parametrize('case', [
|
|
{
|
|
"id": "PNG -> PNG",
|
|
"source":
|
|
'tests/templates/format/testfiles/backgrounds/picture_0.png',
|
|
"convert": False,
|
|
"stretch": True,
|
|
"target": 'result_0-',
|
|
"template_text": ("original\n1024x768"),
|
|
"result": ("PNG", ["32x16", "1024x768"]),
|
|
},
|
|
{
|
|
"id": "JPEG -> JPEG",
|
|
"source":
|
|
'tests/templates/format/testfiles/backgrounds/picture_1.jpg',
|
|
"convert": False,
|
|
"stretch": True,
|
|
"target": 'result_1-',
|
|
"template_text": ("original\n1024x768"),
|
|
"result": ("JPEG", ["320x180", "1024x768"]),
|
|
},
|
|
{
|
|
"id": "PNG -> JPEG",
|
|
"source":
|
|
'tests/templates/format/testfiles/backgrounds/picture_0.png',
|
|
"convert": "JPEG",
|
|
"stretch": True,
|
|
"target": "result_2-",
|
|
"template_text": ("320x160\n1024x768"),
|
|
"result": ("JPEG", ["320x160", "1024x768"]),
|
|
},
|
|
{
|
|
"id": "PNG -> GIF",
|
|
"source":
|
|
'tests/templates/format/testfiles/backgrounds/picture_0.png',
|
|
"convert": "GIF",
|
|
"stretch": True,
|
|
"target": "result_3-",
|
|
"template_text": ("320x160\n1024x768"),
|
|
"result": ("GIF", ["320x160", "1024x768"]),
|
|
},
|
|
pytest.param(
|
|
{
|
|
"id": "JPEG -> PNG",
|
|
"source":
|
|
'tests/templates/format/testfiles/backgrounds/picture_1.jpg',
|
|
"convert": "PNG",
|
|
"stretch": True,
|
|
"target": "result_4-",
|
|
"template_text": ("640x360\n1024x768"),
|
|
"result": ("PNG", ["640x360", "1024x768"]),
|
|
},
|
|
marks=pytest.mark.backgrounds_slow
|
|
),
|
|
{
|
|
"id": "JPEG -> GIF",
|
|
"source":
|
|
'tests/templates/format/testfiles/backgrounds/picture_1.jpg',
|
|
"convert": "GIF",
|
|
"stretch": True,
|
|
"target": "result_5-",
|
|
"template_text": ("original\n1024x768"),
|
|
"result": ("GIF", ["320x180", "1024x768"]),
|
|
},
|
|
{
|
|
"id": "JPEG -> GFXBOOT(JPEG)",
|
|
"source":
|
|
'tests/templates/format/testfiles/backgrounds/picture_1.jpg',
|
|
"convert": "GFXBOOT",
|
|
"stretch": False,
|
|
"target": "result_6-",
|
|
"template_text": ("original\n200x100"),
|
|
"result": ("JPEG", ["320x180", "200x100"]),
|
|
},
|
|
{
|
|
"id": "PNG -> JPEG (single from template)",
|
|
"source":
|
|
'tests/templates/format/testfiles/backgrounds/picture_0.png',
|
|
"convert": "JPEG",
|
|
"stretch": True,
|
|
"target": "result_7",
|
|
"template_text": ("320x160"),
|
|
"result": ("JPEG", ["320x160"]),
|
|
},
|
|
{
|
|
"id": "JPEG -> JPEG (single from variable)",
|
|
"source":
|
|
'tests/templates/format/testfiles/backgrounds/picture_1.jpg',
|
|
"convert": False,
|
|
"stretch": True,
|
|
"target": "result_8-",
|
|
"template_text": "",
|
|
"result": ("JPEG", ["1024x768"]),
|
|
},
|
|
],
|
|
ids=lambda x: x["id"])
|
|
def test_resize_and_convert_of_different_formats(case):
|
|
target_path = os.path.join(TMP_DIR, case["target"])
|
|
parameters = ParametersContainer({'source': case["source"],
|
|
'convert': case["convert"],
|
|
'stretch': case["stretch"]})
|
|
backgrounds_object = BackgroundsFormat(case["template_text"],
|
|
"path/to/template",
|
|
parameters=parameters,
|
|
datavars=datavars)
|
|
changed_files = backgrounds_object.execute_format(target_path)
|
|
|
|
images_format, resolutions = case["result"]
|
|
|
|
output_paths = []
|
|
if len(resolutions) > 1 or not case['template_text']:
|
|
for resolution in resolutions:
|
|
output_paths.append("{}{}.{}".format(target_path, resolution,
|
|
images_format.lower()))
|
|
elif len(resolutions) == 1:
|
|
resolution = next(iter(resolutions))
|
|
output_paths.append(target_path)
|
|
|
|
for outpath in output_paths:
|
|
assert os.path.exists(outpath)
|
|
assert backgrounds_object._magician.get_image_format(outpath
|
|
) == images_format
|
|
|
|
# print("CHANGED FILES:")
|
|
# for path, status in changed_files.items():
|
|
# print(f"{path} -> {status}")
|
|
# assert False
|
|
|
|
|
|
@pytest.mark.formats
|
|
@pytest.mark.backgrounds
|
|
@pytest.mark.parametrize('case', [
|
|
{
|
|
"id": "stretch off",
|
|
"source":
|
|
'tests/templates/format/testfiles/backgrounds/picture_1.jpg',
|
|
"convert": False,
|
|
"stretch": False,
|
|
"target": 'result_8-',
|
|
"template_text": ("400x200\n30x10"),
|
|
"result": {"400x200": False, "30x10": True},
|
|
},
|
|
{
|
|
"id": "stretch on",
|
|
"source":
|
|
'tests/templates/format/testfiles/backgrounds/picture_1.jpg',
|
|
"convert": False,
|
|
"stretch": True,
|
|
"target": 'result_9-',
|
|
"template_text": ("400x200\n30x10"),
|
|
"result": {"400x200": True, "30x10": True},
|
|
},
|
|
],
|
|
ids=lambda x: x["id"])
|
|
def test_scretch_parameter(case):
|
|
target_path = os.path.join(TMP_DIR, case["target"])
|
|
parameters = ParametersContainer({'source': case["source"],
|
|
'convert': case["convert"],
|
|
'stretch': case["stretch"]})
|
|
backgrounds_object = BackgroundsFormat(case["template_text"],
|
|
"path/to/template",
|
|
parameters=parameters,
|
|
datavars=datavars)
|
|
changed_files = backgrounds_object.execute_format(target_path)
|
|
|
|
for resolution, result in case["result"].items():
|
|
image_path = "{}{}.jpeg".format(target_path, resolution)
|
|
assert os.path.exists(image_path) is result
|
|
if result:
|
|
width, height = resolution.split("x")
|
|
assert backgrounds_object._magician.get_image_resolution(
|
|
image_path) == (
|
|
int(width),
|
|
int(height))
|
|
|
|
|
|
# @pytest.mark.formats
|
|
# @pytest.mark.backgrounds
|
|
# def test_to_create():
|
|
# target_path = os.path.join(TMP_BACKUP_DIR, "result_13-")
|
|
# source_path = 'tests/templates/format/testfiles/backgrounds/picture_2.png'
|
|
# parameters = ParametersContainer({'source': source_path,
|
|
# 'convert': False,
|
|
# 'stretch': False})
|
|
# backgrounds_object = BackgroundsFormat("1650x1050\n1024x768",
|
|
# "path/to/template",
|
|
# parameters, datavars)
|
|
# backgrounds_object.execute_format(target_path)
|
|
|
|
|
|
@pytest.mark.formats
|
|
@pytest.mark.backgrounds
|
|
def test_if_template_has_been_already_used__it_will_not_be_reused():
|
|
target_path = os.path.join(TMP_DIR, "result_10-")
|
|
source_path = 'tests/templates/format/testfiles/backgrounds/picture_2.png'
|
|
parameters = ParametersContainer({'source': source_path,
|
|
'convert': False,
|
|
'stretch': False})
|
|
backgrounds_object = BackgroundsFormat("1650x1050\n1024x768",
|
|
"path/to/template",
|
|
parameters=parameters,
|
|
datavars=datavars)
|
|
changed_files = backgrounds_object.execute_format(target_path)
|
|
assert not changed_files
|
|
|
|
|
|
@pytest.mark.backgrounds_slow
|
|
@pytest.mark.formats
|
|
@pytest.mark.backgrounds
|
|
def test_if_template_is_using_in_directory_but_other_template_has_been_already_used_for_the_same_image_name__latest_template_will_remove_old_images_and_md5sum_file_and_create_new_ones():
|
|
target_path = os.path.join(TMP_DIR, "result_11-")
|
|
source_path = 'tests/templates/format/testfiles/backgrounds/picture_2.png'
|
|
parameters = ParametersContainer({'source': source_path,
|
|
'convert': False,
|
|
'stretch': False})
|
|
backgrounds_object = BackgroundsFormat("1440x1080\n1280x960",
|
|
"path/to/template",
|
|
parameters=parameters,
|
|
datavars=datavars)
|
|
changed_files = backgrounds_object.execute_format(target_path)
|
|
assert not os.path.exists(f"{target_path}1650x1050.png")
|
|
assert os.path.exists(f"{target_path}1440x1080.png")
|
|
assert os.path.exists(f"{target_path}1280x960.png")
|
|
assert not os.path.exists(f"{target_path}1024x768.png")
|
|
|
|
assert changed_files == {f"{target_path}1650x1050.png": "D",
|
|
f"{target_path}1024x768.png": "D",
|
|
f"{target_path.strip('_-.')}.md5sum": "M",
|
|
f"{target_path}1440x1080.png": "N",
|
|
f"{target_path}1280x960.png": "N"}
|
|
|
|
|
|
@pytest.mark.backgrounds_slow
|
|
@pytest.mark.formats
|
|
@pytest.mark.backgrounds
|
|
def test_if_template_is_using_in_directory_which_contains_md5sum_file_without_any_images__the_template_will_remove_md5sum_file_and_create_new_one_and_images():
|
|
target_path = os.path.join(TMP_DIR, "result_12-")
|
|
source_path = 'tests/templates/format/testfiles/backgrounds/picture_2.png'
|
|
parameters = ParametersContainer({'source': source_path,
|
|
'convert': False,
|
|
'stretch': False})
|
|
backgrounds_object = BackgroundsFormat("1440x1080\n1280x960",
|
|
"path/to/template",
|
|
parameters=parameters,
|
|
datavars=datavars)
|
|
changed_files = backgrounds_object.execute_format(target_path)
|
|
assert os.path.exists(f"{target_path}1440x1080.png")
|
|
assert os.path.exists(f"{target_path}1280x960.png")
|
|
|
|
assert changed_files == {f"{target_path.strip('_-.')}.md5sum": "M",
|
|
f"{target_path}1440x1080.png": "N",
|
|
f"{target_path}1280x960.png": "N"}
|
|
|
|
|
|
@pytest.mark.backgrounds_slow
|
|
@pytest.mark.formats
|
|
@pytest.mark.backgrounds
|
|
def test_if_template_is_using_in_directory_which_contains_some_image_files_without_md5sum_file__the_template_will_remove_all_images_and_create_new_ones_and_new_md5sum_file():
|
|
target_path = os.path.join(TMP_DIR, "result_13-")
|
|
source_path = 'tests/templates/format/testfiles/backgrounds/picture_2.png'
|
|
parameters = ParametersContainer({'source': source_path,
|
|
'convert': False,
|
|
'stretch': False})
|
|
backgrounds_object = BackgroundsFormat("1440x1080\n1280x960",
|
|
"path/to/template",
|
|
parameters=parameters,
|
|
datavars=datavars)
|
|
changed_files = backgrounds_object.execute_format(target_path)
|
|
assert not os.path.exists(f"{target_path}1650x1050.png")
|
|
assert os.path.exists(f"{target_path}1440x1080.png")
|
|
assert os.path.exists(f"{target_path}1280x960.png")
|
|
assert not os.path.exists(f"{target_path}1024x768.png")
|
|
|
|
assert changed_files == {f"{target_path}1650x1050.png": "D",
|
|
f"{target_path}1024x768.png": "D",
|
|
f"{target_path.strip('_-.')}.md5sum": "N",
|
|
f"{target_path}1440x1080.png": "N",
|
|
f"{target_path}1280x960.png": "N"}
|
|
|
|
|
|
@pytest.mark.formats
|
|
@pytest.mark.backgrounds
|
|
def test_if_template_s_name_parameter_is_the_empty_line_and_its_text_contents_two_or_more_resolution_values__the_output_files_name_will_contains_its_resolutions_only():
|
|
target_path = os.path.join(TMP_DIR, "result_14-")
|
|
source_path = 'tests/templates/format/testfiles/backgrounds/picture_1.jpg'
|
|
parameters = ParametersContainer({'source': source_path,
|
|
'convert': False,
|
|
'stretch': False,
|
|
'name': ''})
|
|
backgrounds_object = BackgroundsFormat("100x100\n60x60",
|
|
"path/to/template",
|
|
parameters=parameters,
|
|
datavars=datavars)
|
|
backgrounds_object.execute_format(target_path)
|
|
|
|
assert os.path.exists(os.path.join(TMP_DIR, "100x100.jpeg"))
|
|
assert os.path.exists(os.path.join(TMP_DIR, "60x60.jpeg"))
|
|
assert os.path.exists(os.path.join(TMP_DIR, "md5sum"))
|
|
|
|
|
|
@pytest.mark.formats
|
|
@pytest.mark.backgrounds
|
|
def test_if_template_s_name_parameter_is_the_empty_line_and_its_text_contents_one_resolution_value__the_format_will_raise_FormatError_exception():
|
|
target_path = os.path.join(TMP_DIR, "result_15-")
|
|
source_path = 'tests/templates/format/testfiles/backgrounds/picture_1.jpg'
|
|
parameters = ParametersContainer({'source': source_path,
|
|
'convert': False,
|
|
'stretch': False,
|
|
'name': ''})
|
|
backgrounds_object = BackgroundsFormat("100x100",
|
|
"path/to/template",
|
|
parameters=parameters,
|
|
datavars=datavars)
|
|
with pytest.raises(FormatError):
|
|
backgrounds_object.execute_format(target_path)
|
|
|
|
|
|
@pytest.mark.formats
|
|
@pytest.mark.backgrounds
|
|
def test_remove_tmp():
|
|
if os.path.exists(TMP_DIR):
|
|
shutil.rmtree(TMP_DIR)
|