From b5e5a3068e042713b011e967313e478e061eb482 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Mond=C3=A9jar?= Date: Thu, 15 Apr 2021 21:22:41 +0200 Subject: [PATCH] Test 'rotate' FX supported arguments by PIL version (#1545) * Add test for supported 'rotate' kwargs by PIL version --- moviepy/video/fx/rotate.py | 7 ++-- tests/test_fx.py | 69 +++++++++++++++++++++++++++++++++++++- 2 files changed, 72 insertions(+), 4 deletions(-) diff --git a/moviepy/video/fx/rotate.py b/moviepy/video/fx/rotate.py index d30b6c451..592553cfe 100644 --- a/moviepy/video/fx/rotate.py +++ b/moviepy/video/fx/rotate.py @@ -137,9 +137,10 @@ def filter(get_frame, t): else: if kw_value is not None: # if not default value warnings.warn( - f"rotate '{kw_name}' argument not supported by your" - " Pillow version and is being ignored. Minimum Pillow version" - f" required: v{'.'.join(str(n) for n in min_version)}", + f"rotate '{kw_name}' argument is not supported" + " by your Pillow version and is being ignored. Minimum" + " Pillow version required:" + f" v{'.'.join(str(n) for n in min_version)}", UserWarning, ) diff --git a/tests/test_fx.py b/tests/test_fx.py index 2fabf11af..c06823692 100644 --- a/tests/test_fx.py +++ b/tests/test_fx.py @@ -759,7 +759,6 @@ def test_resize( assert len(mask_frame) == expected_height -# Run several times to ensure that adding 360 to rotation angles has no effect @pytest.mark.parametrize("PIL_installed", (True, False)) @pytest.mark.parametrize("angle_offset", [-360, 0, 360, 720]) @pytest.mark.parametrize("unit", ["deg", "rad"]) @@ -934,6 +933,74 @@ def test_rotate_mask(): assert clip.get_frame(0)[1][1] != 0 +@pytest.mark.parametrize( + ("unsupported_kwargs",), + ( + (["bg_color"],), + (["center"],), + (["translate"],), + (["translate", "center"],), + (["center", "bg_color", "translate"],), + ), + ids=( + "bg_color", + "center", + "translate", + "translate,center", + "center,bg_color,translate", + ), +) +def test_rotate_supported_PIL_kwargs( + unsupported_kwargs, + monkeypatch, +): + """Test supported 'rotate' FX arguments by PIL version.""" + rotate_module = importlib.import_module("moviepy.video.fx.rotate") + + # patch supported kwargs data by PIL version + new_PIL_rotate_kwargs_supported, min_version_by_kwarg_name = ({}, {}) + for kwarg, ( + kw_name, + supported, + min_version, + ) in rotate_module.PIL_rotate_kwargs_supported.items(): + supported = kw_name not in unsupported_kwargs + new_PIL_rotate_kwargs_supported[kwarg] = [kw_name, supported, min_version] + + min_version_by_kwarg_name[kw_name] = ".".join(str(n) for n in min_version) + + monkeypatch.setattr( + rotate_module, + "PIL_rotate_kwargs_supported", + new_PIL_rotate_kwargs_supported, + ) + + with pytest.warns(UserWarning) as record: + BitmapClip([["R", "G", "B"]], fps=1).fx( + rotate_module.rotate, + 45, + bg_color=(10, 10, 10), + center=(1, 1), + translate=(1, 0), + ) + + # assert number of warnings + assert len(record.list) == len(unsupported_kwargs) + + # assert messages contents + messages = [] + for warning in record.list: + messages.append(warning.message.args[0]) + + for unsupported_kwarg in unsupported_kwargs: + expected_message = ( + f"rotate '{unsupported_kwarg}' argument is not supported by your" + " Pillow version and is being ignored. Minimum Pillow version" + f" required: v{min_version_by_kwarg_name[unsupported_kwarg]}" + ) + assert expected_message in messages + + def test_scroll(): pass