mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-06-30 18:03:07 +03:00
imagetk.py testing imp draft
This commit is contained in:
parent
f206a1c617
commit
293ea08ece
|
@ -698,28 +698,3 @@ def test_deprecation() -> None:
|
|||
assert ImageCms.VERSION == "1.0.0 pil"
|
||||
with pytest.warns(DeprecationWarning):
|
||||
assert isinstance(ImageCms.FLAGS, dict)
|
||||
|
||||
|
||||
class TestGetOpenProfile:
|
||||
def test_get_open_profile_with_string_path(self, tmp_path: Path) -> None:
|
||||
# Create a dummy profile file
|
||||
dummy_profile_path = tmp_path / "dummy.icc"
|
||||
dummy_profile_path.write_bytes(b"Dummy ICC content")
|
||||
|
||||
# Test with a string path
|
||||
profile = ImageCms.getOpenProfile(str(dummy_profile_path))
|
||||
assert isinstance(profile, ImageCms.ImageCmsProfile)
|
||||
|
||||
def test_get_open_profile_with_file_object(self, tmp_path: Path) -> None:
|
||||
# Create a dummy profile file content
|
||||
dummy_profile_content = b"Dummy ICC content"
|
||||
dummy_profile_file = BytesIO(dummy_profile_content)
|
||||
|
||||
# Test with a file-like object
|
||||
profile = ImageCms.getOpenProfile(dummy_profile_file)
|
||||
assert isinstance(profile, ImageCms.ImageCmsProfile)
|
||||
|
||||
def test_get_open_profile_with_invalid_input(self) -> None:
|
||||
# Test with invalid input
|
||||
with pytest.raises(TypeError):
|
||||
ImageCms.getOpenProfile(123) # Assuming passing an integer is invalid
|
|
@ -215,13 +215,13 @@ class MockPyDecoder(ImageFile.PyDecoder):
|
|||
|
||||
|
||||
class MockPyEncoder(ImageFile.PyEncoder):
|
||||
last = None # Add this line
|
||||
last = None
|
||||
|
||||
def __init__(self, mode: str, *args: Any) -> None:
|
||||
super().__init__(mode, *args)
|
||||
self._pushes_fd = False
|
||||
self.cleanup_called = False
|
||||
MockPyEncoder.last = self # Update this line
|
||||
MockPyEncoder.last = self
|
||||
|
||||
def encode(self, buffer):
|
||||
# Simulate encoding
|
||||
|
|
|
@ -1,25 +1,23 @@
|
|||
from __future__ import annotations
|
||||
|
||||
import gc
|
||||
import pytest
|
||||
import tkinter as tk
|
||||
from unittest import mock
|
||||
|
||||
from PIL import Image
|
||||
from PIL import ImageTk
|
||||
|
||||
from .helper import assert_image_equal, hopper
|
||||
|
||||
TK_MODES = ("1", "L", "P", "RGB", "RGBA")
|
||||
|
||||
try:
|
||||
import tkinter as tk
|
||||
|
||||
from PIL import ImageTk
|
||||
|
||||
dir(ImageTk)
|
||||
HAS_TK = True
|
||||
except (OSError, ImportError):
|
||||
# Skipped via pytestmark
|
||||
HAS_TK = False
|
||||
|
||||
TK_MODES = ("1", "L", "P", "RGB", "RGBA")
|
||||
|
||||
|
||||
pytestmark = pytest.mark.skipif(not HAS_TK, reason="Tk not installed")
|
||||
|
||||
|
||||
|
@ -27,7 +25,6 @@ def setup_module() -> None:
|
|||
try:
|
||||
# setup tk
|
||||
tk.Frame()
|
||||
# root = tk.Tk()
|
||||
except RuntimeError as v:
|
||||
pytest.skip(f"RuntimeError: {v}")
|
||||
except tk.TclError as v:
|
||||
|
@ -102,3 +99,28 @@ def test_bitmapimage() -> None:
|
|||
|
||||
# reloaded = ImageTk.getimage(im_tk)
|
||||
# assert_image_equal(reloaded, im)
|
||||
|
||||
|
||||
def test_bitmapimage_del() -> None:
|
||||
# Set up an image
|
||||
im = Image.new("1", (10, 10))
|
||||
|
||||
# Mock the tkinter PhotoImage to track calls
|
||||
with mock.patch.object(tk, 'BitmapImage', wraps=tk.BitmapImage) as mock_bitmapimage:
|
||||
# Create an instance of BitmapImage
|
||||
bitmap_image = ImageTk.BitmapImage(im)
|
||||
|
||||
# Ensure the BitmapImage was created
|
||||
assert mock_bitmapimage.call_count == 1
|
||||
|
||||
# Get the internal Tkinter image object
|
||||
tk_image = bitmap_image._BitmapImage__photo
|
||||
|
||||
# Mock the tk.call method to track the 'image delete' call
|
||||
with mock.patch.object(tk_image.tk, 'call', wraps=tk_image.tk.call) as mock_tk_call:
|
||||
# Delete the instance and force garbage collection
|
||||
del bitmap_image
|
||||
gc.collect()
|
||||
|
||||
# Check that the 'image delete' command was called
|
||||
mock_tk_call.assert_any_call("image", "delete", tk_image.name)
|
||||
|
|
|
@ -4,8 +4,7 @@ import sys
|
|||
|
||||
from PIL import Image
|
||||
from PIL import PdfParser
|
||||
from PIL import ImageCms
|
||||
from PIL import McIdasImagePlugin
|
||||
from PIL import ImageTk
|
||||
from PIL import ImageFile
|
||||
|
||||
pytest_plugins = ["Tests.helper"]
|
||||
|
@ -15,9 +14,8 @@ def calculate_coverage(test_name):
|
|||
all_branches = {
|
||||
"branches1": Image.branches,
|
||||
"branches2": PdfParser.XrefTable.branches,
|
||||
"branches3": ImageCms.PyCMSError.branches,
|
||||
"branches4": McIdasImagePlugin.McIdasImageFile.branches,
|
||||
"branches5": ImageFile.PyEncoder.branches,
|
||||
"branches3": ImageTk.BitmapImage.branches,
|
||||
"branches4": ImageFile.PyEncoder.branches,
|
||||
# Add more
|
||||
}
|
||||
|
||||
|
|
|
@ -31,6 +31,10 @@ from io import BytesIO
|
|||
|
||||
from . import Image
|
||||
|
||||
branches = {
|
||||
"1": False,
|
||||
"2": False,
|
||||
}
|
||||
# --------------------------------------------------------------------
|
||||
# Check for Tkinter interface hooks
|
||||
|
||||
|
@ -188,6 +192,10 @@ class PhotoImage:
|
|||
|
||||
|
||||
class BitmapImage:
|
||||
branches = {
|
||||
"1": False,
|
||||
"2": False,
|
||||
}
|
||||
"""
|
||||
A Tkinter-compatible bitmap image. This can be used everywhere Tkinter
|
||||
expects an image object.
|
||||
|
@ -223,8 +231,10 @@ class BitmapImage:
|
|||
name = self.__photo.name
|
||||
self.__photo.name = None
|
||||
try:
|
||||
BitmapImage.branches["1"] = True
|
||||
self.__photo.tk.call("image", "delete", name)
|
||||
except Exception:
|
||||
BitmapImage
|
||||
pass # ignore internal errors
|
||||
|
||||
def width(self) -> int:
|
||||
|
|
|
@ -21,14 +21,6 @@ import struct
|
|||
|
||||
from . import Image, ImageFile
|
||||
|
||||
branches = {
|
||||
"1": False,
|
||||
"2": False,
|
||||
"3": False,
|
||||
"4": False,
|
||||
"5": False,
|
||||
}
|
||||
|
||||
def _accept(prefix: bytes) -> bool:
|
||||
return prefix[:8] == b"\x00\x00\x00\x00\x00\x00\x00\x04"
|
||||
|
||||
|
@ -38,14 +30,6 @@ def _accept(prefix: bytes) -> bool:
|
|||
|
||||
|
||||
class McIdasImageFile(ImageFile.ImageFile):
|
||||
branches = {
|
||||
"1": False,
|
||||
"2": False,
|
||||
"3": False,
|
||||
"4": False,
|
||||
"5": False,
|
||||
}
|
||||
|
||||
format = "MCIDAS"
|
||||
format_description = "McIdas area file"
|
||||
|
||||
|
@ -55,7 +39,6 @@ class McIdasImageFile(ImageFile.ImageFile):
|
|||
|
||||
s = self.fp.read(256)
|
||||
if not _accept(s) or len(s) != 256:
|
||||
McIdasImageFile.branches["1"] = True
|
||||
msg = "not an McIdas area file"
|
||||
raise SyntaxError(msg)
|
||||
|
||||
|
@ -64,20 +47,16 @@ class McIdasImageFile(ImageFile.ImageFile):
|
|||
|
||||
# get mode
|
||||
if w[11] == 1:
|
||||
McIdasImageFile.branches["2"] = True
|
||||
mode = rawmode = "L"
|
||||
elif w[11] == 2:
|
||||
McIdasImageFile.branches["3"] = True
|
||||
# FIXME: add memory map support
|
||||
mode = "I"
|
||||
rawmode = "I;16B"
|
||||
elif w[11] == 4:
|
||||
McIdasImageFile.branches["4"] = True
|
||||
# FIXME: add memory map support
|
||||
mode = "I"
|
||||
rawmode = "I;32B"
|
||||
else:
|
||||
McIdasImageFile.branches["5"] = True
|
||||
msg = "unsupported McIdas format"
|
||||
raise SyntaxError(msg)
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user