forked from mttu-developers/konabot
74 lines
2.3 KiB
Python
74 lines
2.3 KiB
Python
from importlib.util import module_from_spec, spec_from_file_location
|
|
from pathlib import Path
|
|
|
|
import nonebot
|
|
from PIL import Image
|
|
|
|
|
|
nonebot.init()
|
|
|
|
MODULE_PATH = Path(__file__).resolve().parents[1] / "konabot/plugins/fx_process/fx_handle.py"
|
|
SPEC = spec_from_file_location("test_fx_handle_module", MODULE_PATH)
|
|
assert SPEC is not None and SPEC.loader is not None
|
|
fx_handle = module_from_spec(SPEC)
|
|
SPEC.loader.exec_module(fx_handle)
|
|
ImageFilterImplement = fx_handle.ImageFilterImplement
|
|
|
|
|
|
def test_apply_jpeg_damage_keeps_size_and_rgba_mode():
|
|
image = Image.new("RGBA", (32, 24), (255, 0, 0, 128))
|
|
|
|
result = ImageFilterImplement.apply_jpeg_damage(image, 5)
|
|
|
|
assert result.size == image.size
|
|
assert result.mode == "RGBA"
|
|
assert result.getchannel("A").getextrema() == (128, 128)
|
|
|
|
|
|
def test_apply_jpeg_damage_clamps_quality_range():
|
|
image = Image.new("RGB", (16, 16), (123, 222, 111))
|
|
|
|
low = ImageFilterImplement.apply_jpeg_damage(image, -10)
|
|
high = ImageFilterImplement.apply_jpeg_damage(image, 999)
|
|
|
|
assert low.size == image.size
|
|
assert high.size == image.size
|
|
assert low.mode == "RGBA"
|
|
assert high.mode == "RGBA"
|
|
|
|
|
|
def test_apply_resize_clamps_small_result_to_at_least_one_pixel():
|
|
image = Image.new("RGBA", (10, 10), (255, 0, 0, 255))
|
|
|
|
result = ImageFilterImplement.apply_resize(image, 0.01)
|
|
|
|
assert result.size == (1, 1)
|
|
|
|
|
|
def test_apply_resize_negative_x_with_positive_y_only_mirrors_horizontally():
|
|
image = Image.new("RGBA", (2, 1))
|
|
image.putpixel((0, 0), (255, 0, 0, 255))
|
|
image.putpixel((1, 0), (0, 0, 255, 255))
|
|
|
|
result = ImageFilterImplement.apply_resize(image, -1, 1)
|
|
|
|
assert result.size == (2, 1)
|
|
assert result.getpixel((0, 0)) == (0, 0, 255, 255)
|
|
assert result.getpixel((1, 0)) == (255, 0, 0, 255)
|
|
|
|
|
|
def test_apply_resize_negative_scale_without_y_flips_both_axes():
|
|
image = Image.new("RGBA", (2, 2))
|
|
image.putpixel((0, 0), (255, 0, 0, 255))
|
|
image.putpixel((1, 0), (0, 255, 0, 255))
|
|
image.putpixel((0, 1), (0, 0, 255, 255))
|
|
image.putpixel((1, 1), (255, 255, 0, 255))
|
|
|
|
result = ImageFilterImplement.apply_resize(image, -1)
|
|
|
|
assert result.size == (2, 2)
|
|
assert result.getpixel((0, 0)) == (255, 255, 0, 255)
|
|
assert result.getpixel((1, 0)) == (0, 0, 255, 255)
|
|
assert result.getpixel((0, 1)) == (0, 255, 0, 255)
|
|
assert result.getpixel((1, 1)) == (255, 0, 0, 255)
|