mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-11-04 18:07:51 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			122 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			122 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from __future__ import annotations
 | 
						|
 | 
						|
import os
 | 
						|
from typing import Any
 | 
						|
 | 
						|
import pytest
 | 
						|
 | 
						|
from PIL import Image, ImageShow
 | 
						|
 | 
						|
from .helper import hopper, is_win32, on_ci
 | 
						|
 | 
						|
 | 
						|
def test_sanity() -> None:
 | 
						|
    dir(Image)
 | 
						|
    dir(ImageShow)
 | 
						|
 | 
						|
 | 
						|
def test_register() -> None:
 | 
						|
    # Test registering a viewer that is an instance
 | 
						|
    class TestViewer(ImageShow.Viewer):
 | 
						|
        pass
 | 
						|
 | 
						|
    ImageShow.register(TestViewer())
 | 
						|
 | 
						|
    # Restore original state
 | 
						|
    ImageShow._viewers.pop()
 | 
						|
 | 
						|
 | 
						|
@pytest.mark.parametrize(
 | 
						|
    "order",
 | 
						|
    [-1, 0],
 | 
						|
)
 | 
						|
def test_viewer_show(order: int) -> None:
 | 
						|
    class TestViewer(ImageShow.Viewer):
 | 
						|
        def show_image(self, image: Image.Image, **options: Any) -> bool:
 | 
						|
            self.methodCalled = True
 | 
						|
            return True
 | 
						|
 | 
						|
    viewer = TestViewer()
 | 
						|
    ImageShow.register(viewer, order)
 | 
						|
 | 
						|
    for mode in ("1", "I;16", "LA", "RGB", "RGBA"):
 | 
						|
        viewer.methodCalled = False
 | 
						|
        with hopper(mode) as im:
 | 
						|
            assert ImageShow.show(im)
 | 
						|
        assert viewer.methodCalled
 | 
						|
 | 
						|
    # Restore original state
 | 
						|
    ImageShow._viewers.pop(0)
 | 
						|
 | 
						|
 | 
						|
@pytest.mark.skipif(
 | 
						|
    not on_ci() or is_win32(),
 | 
						|
    reason="Only run on CIs; hangs on Windows CIs",
 | 
						|
)
 | 
						|
@pytest.mark.parametrize("mode", ("1", "I;16", "LA", "RGB", "RGBA"))
 | 
						|
def test_show(mode: str) -> None:
 | 
						|
    im = hopper(mode)
 | 
						|
    assert ImageShow.show(im)
 | 
						|
 | 
						|
 | 
						|
def test_show_without_viewers() -> None:
 | 
						|
    viewers = ImageShow._viewers
 | 
						|
    ImageShow._viewers = []
 | 
						|
 | 
						|
    with hopper() as im:
 | 
						|
        assert not ImageShow.show(im)
 | 
						|
 | 
						|
    ImageShow._viewers = viewers
 | 
						|
 | 
						|
 | 
						|
@pytest.mark.parametrize(
 | 
						|
    "viewer",
 | 
						|
    (
 | 
						|
        ImageShow.Viewer(),
 | 
						|
        ImageShow.WindowsViewer(),
 | 
						|
        ImageShow.MacViewer(),
 | 
						|
        ImageShow.XDGViewer(),
 | 
						|
        ImageShow.DisplayViewer(),
 | 
						|
        ImageShow.GmDisplayViewer(),
 | 
						|
        ImageShow.EogViewer(),
 | 
						|
        ImageShow.XVViewer(),
 | 
						|
        ImageShow.IPythonViewer(),
 | 
						|
    ),
 | 
						|
)
 | 
						|
def test_show_file(viewer: ImageShow.Viewer) -> None:
 | 
						|
    assert not os.path.exists("missing.png")
 | 
						|
 | 
						|
    with pytest.raises(FileNotFoundError):
 | 
						|
        viewer.show_file("missing.png")
 | 
						|
 | 
						|
 | 
						|
def test_viewer() -> None:
 | 
						|
    viewer = ImageShow.Viewer()
 | 
						|
 | 
						|
    im = Image.new("L", (1, 1))
 | 
						|
    assert viewer.get_format(im) is None
 | 
						|
 | 
						|
    with pytest.raises(NotImplementedError):
 | 
						|
        viewer.get_command("")
 | 
						|
 | 
						|
 | 
						|
@pytest.mark.parametrize("viewer", ImageShow._viewers)
 | 
						|
def test_viewers(viewer: ImageShow.Viewer) -> None:
 | 
						|
    try:
 | 
						|
        viewer.get_command("test.jpg")
 | 
						|
    except NotImplementedError:
 | 
						|
        pass
 | 
						|
 | 
						|
 | 
						|
def test_ipythonviewer() -> None:
 | 
						|
    pytest.importorskip("IPython", reason="IPython not installed")
 | 
						|
    for viewer in ImageShow._viewers:
 | 
						|
        if isinstance(viewer, ImageShow.IPythonViewer):
 | 
						|
            test_viewer = viewer
 | 
						|
            break
 | 
						|
    else:
 | 
						|
        pytest.fail("IPythonViewer not found")
 | 
						|
 | 
						|
    with hopper() as im:
 | 
						|
        assert test_viewer.show(im) == 1
 |