mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-11-04 01:47:47 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			128 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from __future__ import annotations
 | 
						|
 | 
						|
import pytest
 | 
						|
 | 
						|
from PIL import ImageWin
 | 
						|
 | 
						|
from .helper import hopper, is_win32
 | 
						|
 | 
						|
 | 
						|
class TestImageWin:
 | 
						|
    def test_sanity(self) -> None:
 | 
						|
        dir(ImageWin)
 | 
						|
 | 
						|
    def test_hdc(self) -> None:
 | 
						|
        # Arrange
 | 
						|
        dc = 50
 | 
						|
 | 
						|
        # Act
 | 
						|
        hdc = ImageWin.HDC(dc)
 | 
						|
        dc2 = int(hdc)
 | 
						|
 | 
						|
        # Assert
 | 
						|
        assert dc2 == 50
 | 
						|
 | 
						|
    def test_hwnd(self) -> None:
 | 
						|
        # Arrange
 | 
						|
        wnd = 50
 | 
						|
 | 
						|
        # Act
 | 
						|
        hwnd = ImageWin.HWND(wnd)
 | 
						|
        wnd2 = int(hwnd)
 | 
						|
 | 
						|
        # Assert
 | 
						|
        assert wnd2 == 50
 | 
						|
 | 
						|
 | 
						|
@pytest.mark.skipif(not is_win32(), reason="Windows only")
 | 
						|
class TestImageWinDib:
 | 
						|
    def test_dib_image(self) -> None:
 | 
						|
        # Arrange
 | 
						|
        im = hopper()
 | 
						|
 | 
						|
        # Act
 | 
						|
        dib = ImageWin.Dib(im)
 | 
						|
 | 
						|
        # Assert
 | 
						|
        assert dib.size == im.size
 | 
						|
 | 
						|
    def test_dib_mode_string(self) -> None:
 | 
						|
        # Arrange
 | 
						|
        mode = "RGBA"
 | 
						|
        size = (128, 128)
 | 
						|
 | 
						|
        # Act
 | 
						|
        dib = ImageWin.Dib(mode, size)
 | 
						|
 | 
						|
        # Assert
 | 
						|
        assert dib.size == (128, 128)
 | 
						|
 | 
						|
        with pytest.raises(ValueError):
 | 
						|
            ImageWin.Dib(mode)
 | 
						|
 | 
						|
    def test_dib_hwnd(self) -> None:
 | 
						|
        mode = "RGBA"
 | 
						|
        size = (128, 128)
 | 
						|
        wnd = 0
 | 
						|
 | 
						|
        dib = ImageWin.Dib(mode, size)
 | 
						|
        hwnd = ImageWin.HWND(wnd)
 | 
						|
 | 
						|
        dib.expose(hwnd)
 | 
						|
        dib.draw(hwnd, (0, 0) + size)
 | 
						|
        assert isinstance(dib.query_palette(hwnd), int)
 | 
						|
 | 
						|
    def test_dib_paste(self) -> None:
 | 
						|
        # Arrange
 | 
						|
        im = hopper()
 | 
						|
 | 
						|
        mode = "RGBA"
 | 
						|
        size = (128, 128)
 | 
						|
        dib = ImageWin.Dib(mode, size)
 | 
						|
 | 
						|
        # Act
 | 
						|
        dib.paste(im)
 | 
						|
 | 
						|
        # Assert
 | 
						|
        assert dib.size == (128, 128)
 | 
						|
 | 
						|
    def test_dib_paste_bbox(self) -> None:
 | 
						|
        # Arrange
 | 
						|
        im = hopper()
 | 
						|
        bbox = (0, 0, 10, 10)
 | 
						|
 | 
						|
        mode = "RGBA"
 | 
						|
        size = (128, 128)
 | 
						|
        dib = ImageWin.Dib(mode, size)
 | 
						|
 | 
						|
        # Act
 | 
						|
        dib.paste(im, bbox)
 | 
						|
 | 
						|
        # Assert
 | 
						|
        assert dib.size == (128, 128)
 | 
						|
 | 
						|
    def test_dib_frombytes_tobytes_roundtrip(self) -> None:
 | 
						|
        # Arrange
 | 
						|
        # Make two different DIB images
 | 
						|
        im = hopper()
 | 
						|
        dib1 = ImageWin.Dib(im)
 | 
						|
 | 
						|
        mode = "RGB"
 | 
						|
        size = (128, 128)
 | 
						|
        dib2 = ImageWin.Dib(mode, size)
 | 
						|
 | 
						|
        # Confirm they're different
 | 
						|
        assert dib1.tobytes() != dib2.tobytes()
 | 
						|
 | 
						|
        # Act
 | 
						|
        # Make one the same as the using tobytes()/frombytes()
 | 
						|
        test_buffer = dib1.tobytes()
 | 
						|
        for datatype in ("bytes", "memoryview"):
 | 
						|
            if datatype == "memoryview":
 | 
						|
                test_buffer = memoryview(test_buffer)
 | 
						|
            dib2.frombytes(test_buffer)
 | 
						|
 | 
						|
            # Assert
 | 
						|
            # Confirm they're the same
 | 
						|
            assert dib1.tobytes() == dib2.tobytes()
 |