Pillow

Форк
0
/
test_imageshow.py 
121 строка · 2.7 Кб
1
from __future__ import annotations
2

3
import os
4
from typing import Any
5

6
import pytest
7

8
from PIL import Image, ImageShow
9

10
from .helper import hopper, is_win32, on_ci
11

12

13
def test_sanity() -> None:
14
    dir(Image)
15
    dir(ImageShow)
16

17

18
def test_register() -> None:
19
    # Test registering a viewer that is an instance
20
    class TestViewer(ImageShow.Viewer):
21
        pass
22

23
    ImageShow.register(TestViewer())
24

25
    # Restore original state
26
    ImageShow._viewers.pop()
27

28

29
@pytest.mark.parametrize(
30
    "order",
31
    [-1, 0],
32
)
33
def test_viewer_show(order: int) -> None:
34
    class TestViewer(ImageShow.Viewer):
35
        def show_image(self, image: Image.Image, **options: Any) -> bool:
36
            self.methodCalled = True
37
            return True
38

39
    viewer = TestViewer()
40
    ImageShow.register(viewer, order)
41

42
    for mode in ("1", "I;16", "LA", "RGB", "RGBA"):
43
        viewer.methodCalled = False
44
        with hopper(mode) as im:
45
            assert ImageShow.show(im)
46
        assert viewer.methodCalled
47

48
    # Restore original state
49
    ImageShow._viewers.pop(0)
50

51

52
@pytest.mark.skipif(
53
    not on_ci() or is_win32(),
54
    reason="Only run on CIs; hangs on Windows CIs",
55
)
56
@pytest.mark.parametrize("mode", ("1", "I;16", "LA", "RGB", "RGBA"))
57
def test_show(mode: str) -> None:
58
    im = hopper(mode)
59
    assert ImageShow.show(im)
60

61

62
def test_show_without_viewers() -> None:
63
    viewers = ImageShow._viewers
64
    ImageShow._viewers = []
65

66
    with hopper() as im:
67
        assert not ImageShow.show(im)
68

69
    ImageShow._viewers = viewers
70

71

72
@pytest.mark.parametrize(
73
    "viewer",
74
    (
75
        ImageShow.Viewer(),
76
        ImageShow.WindowsViewer(),
77
        ImageShow.MacViewer(),
78
        ImageShow.XDGViewer(),
79
        ImageShow.DisplayViewer(),
80
        ImageShow.GmDisplayViewer(),
81
        ImageShow.EogViewer(),
82
        ImageShow.XVViewer(),
83
        ImageShow.IPythonViewer(),
84
    ),
85
)
86
def test_show_file(viewer: ImageShow.Viewer) -> None:
87
    assert not os.path.exists("missing.png")
88

89
    with pytest.raises(FileNotFoundError):
90
        viewer.show_file("missing.png")
91

92

93
def test_viewer() -> None:
94
    viewer = ImageShow.Viewer()
95

96
    im = Image.new("L", (1, 1))
97
    assert viewer.get_format(im) is None
98

99
    with pytest.raises(NotImplementedError):
100
        viewer.get_command("")
101

102

103
@pytest.mark.parametrize("viewer", ImageShow._viewers)
104
def test_viewers(viewer: ImageShow.Viewer) -> None:
105
    try:
106
        viewer.get_command("test.jpg")
107
    except NotImplementedError:
108
        pass
109

110

111
def test_ipythonviewer() -> None:
112
    pytest.importorskip("IPython", reason="IPython not installed")
113
    for viewer in ImageShow._viewers:
114
        if isinstance(viewer, ImageShow.IPythonViewer):
115
            test_viewer = viewer
116
            break
117
    else:
118
        pytest.fail()
119

120
    im = hopper()
121
    assert test_viewer.show(im) == 1
122

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.