Пример #1
0
def test_getpixelvalue():

    surf = NumpySurface(width=50, height=50, fill=[255, 0, 0])
    assert surf.get_pixel_value((1, 1)) == (255, 0, 0, 255)

    with pytest.raises(ValueError):
        surf.get_pixel_value((1, 100))
Пример #2
0
def test_copy():

    surf = NumpySurface(width=100, height=100, fill=[0, 0, 0])
    surf_copy = surf.copy()
    assert isinstance(surf_copy, NumpySurface)

    surf.content[0][0][0] = 255
    assert surf.content[0][0][0] != surf_copy.content[0][0][0]
Пример #3
0
def test_scale():

    surface = NumpySurface(width=200, height=100, fill=[0, 0, 0])
    red_box = NumpySurface(width=100, height=50, fill=[255, 0, 0])
    surface.blit(red_box, location=(0, 0), blend=False)

    surf = surface.copy()
    surf.scale(width=300)
    assert surf.height == 150
    assert surf.content[0][149][0] > 128 and surf.content[74][0][0] > 128
    assert surf.content[0][150][0] < 64 and surf.content[75][0][0] < 64

    surf = surface.copy()
    surf.scale(height=50)
    assert surf.width == 100
    assert surf.content[0][49][0] > 128 and surf.content[24][0][0] > 128
    assert surf.content[0][50][0] < 64 and surf.content[25][0][0] < 64

    surf = surface.copy()
    surf.scale(width=500, height=500)
    assert surf.height == 500 and surf.width == 500
    assert surf.content[0][249][0] > 128 and surf.content[249][0][0] > 128
    assert surf.content[0][250][0] < 128 and surf.content[250][0][0] < 128

    with pytest.raises(ValueError):
        surf.scale()
Пример #4
0
def test_trim():

    surf = NumpySurface(maketestsurface())
    surf.trim()
    assert surf.height == 50 and surf.width == 50

    surf = NumpySurface(width=50, height=50, fill=(0, 0, 0, 0))
    with pytest.raises(RuntimeError):
        surf.trim()
Пример #5
0
def test_flip_right():

    surf = NumpySurface(maketestsurface())
    surf.flip_right()
    assert surf.content[0][0][0] == 0
    assert surf.content[0][-1][0] == 255

    surf.flip_right()
    assert surf.content[0][-1][0] == 0
    assert surf.content[-1][-1][0] == 255
Пример #6
0
 def test_init_err(self):
     with pytest.raises(TypeError):
         surf = NumpySurface(0)
Пример #7
0
 def test_init_file(self):
     logo_file_path = resource_filename('klibs', 'resources/splash.png')
     surf = NumpySurface(logo_file_path)
     assert surf.height == 123 and surf.width == 746
     assert surf.content[0][0][0] == 0
     assert surf.content[12][12][2] == 163  # Blue part of 'K'
Пример #8
0
 def test_init_aggdraw(self):
     aggsurf = Draw("RGBA", [100, 100], (255, 0, 0))
     surf = NumpySurface(aggsurf)
     assert surf.height == 100 and surf.width == 100
     assert surf.content[0][0][0] == 255
Пример #9
0
 def test_init_kldraw(self):
     d = kld.Ellipse(100, fill=(255, 255, 255))
     surf = NumpySurface(d)
     assert d.surface_height == surf.height and d.surface_width == surf.width
     assert surf.content[50][50][0] == 255
Пример #10
0
 def test_init_pillow_oddball(self):
     img = Image.new('L', (100, 100), color=255)
     surf = NumpySurface(img)
     assert surf.height == 100 and surf.width == 100
     assert surf.content[0][0][0] == 255
Пример #11
0
 def test_init_pillow_rgb(self):
     img = Image.new('RGB', (100, 100), color=(255, 0, 0))
     surf = NumpySurface(img)
     assert surf.height == 100 and surf.width == 100
     assert surf.content[0][0][0] == 255
Пример #12
0
def test_mask():

    # Initialize test surface and masks
    # NOTE: Testing KLDraw objects further down, since KLD rectangles have 1px
    # transparent padding that breaks this test loop's logic
    surface = NumpySurface(width=100, height=100, fill=[255, 0, 0])
    nps_mask = NumpySurface(width=50, height=50, fill=[255, 255, 255])
    np_mask = nps_mask.render()
    greyscale_mask = Image.new('L', (50, 50), 0)
    ImageDraw.Draw(greyscale_mask).rectangle((0, 0, 50, 50), fill=255)
    rgb_mask = Image.new('RGB', (50, 50), (0, 0, 0))
    ImageDraw.Draw(rgb_mask).rectangle((0, 0, 50, 50), fill=(255, 0, 0))

    # Test different mask types
    for mask in [nps_mask, np_mask, greyscale_mask, rgb_mask]:
        surf = surface.copy()
        surf.mask(mask, registration=7, location=(0, 0))
        assert surf.content[49][49][3] == 0
        assert surf.content[50][50][3] == 255

    # Test legacy positioning
    surf = surface.copy()
    surf.mask(nps_mask, (25, 25))
    assert surf.content[0][0][3] == 255 and surf.content[25][25][3] == 0

    # Test with mask partially off surface
    surf = surface.copy()
    surf.mask(nps_mask, registration=3, location=(25, 25))
    assert surf.content[24][24][3] == 0 and surf.content[25][25][3] == 255
    surf.mask(nps_mask, registration=7, location=(75, 75))
    assert surf.content[74][74][3] == 255 and surf.content[75][75][3] == 0

    # Test inverse/non-inverse modes and complete masking
    circle_mask = kld.Ellipse(50, fill=(255, 255, 255))
    for complete in [True, False]:
        surf = surface.copy()
        surf.mask(circle_mask, location=(0, 0), invert=True, complete=complete)
        assert surf.content[0][0][3] == 255 and surf.content[25][25][3] == 0
        assert surf.content[-1][-1][3] == (0 if complete else 255)
        surf = surface.copy()
        surf.mask(circle_mask,
                  location=(0, 0),
                  invert=False,
                  complete=complete)
        assert surf.content[0][0][3] == 0 and surf.content[25][25][3] == 255
        assert surf.content[-1][-1][3] == (0 if complete else 255)

    # Test exception for invalid mask type
    with pytest.raises(TypeError):
        surf = surface.copy()
        surf.mask("hello")
Пример #13
0
def test_avg_colour():

    surf1 = NumpySurface(width=100, height=100, fill=[200, 0, 0])
    surf2 = NumpySurface(width=50, height=100, fill=[0, 200, 0])
    surf1.blit(surf2)
    assert surf1.average_color == (100, 100, 0, 255)
Пример #14
0
 def test_init_ndarray(self):
     nparr = maketestsurface()
     surf = NumpySurface(nparr)
     assert surf.height == 100 and surf.width == 100
     assert surf.content[0][0][0] == 255
Пример #15
0
 def test_init_empty(self):
     surf = NumpySurface(width=50, height=100, fill=[255, 0, 0])
     assert surf.height == 100 and surf.width == 50
     assert surf.content[0][0][0] == 255
Пример #16
0
def test_render():

    surf = NumpySurface(width=100, height=100, fill=[255, 0, 0])
    rendered = surf.render()
    assert rendered.dtype == np.uint8
    assert rendered[0][0][0] == 255 and rendered[0][0][1] == 0
Пример #17
0
 def test_init_nps(self):
     nps = NumpySurface(width=100, height=100, fill=[255, 0, 0])
     surf = NumpySurface(nps)
     assert surf.height == 100 and surf.width == 100
     assert surf.content[0][0][0] == 255
Пример #18
0
def test_blit():

    # Initialize different test surfaces
    surf_clear = NumpySurface(width=100, height=100, fill=[0, 0, 0, 0])
    surf_black = NumpySurface(width=100, height=100, fill=[0, 0, 0, 255])
    test_surf = maketestsurface()
    test_square = NumpySurface(width=50, height=50, fill=(255, 255, 255))

    # Test registrations
    expected_bounds = {
        '1': (50, 0, 100, 50),
        '2': (25, 0, 75, 50),
        '3': (0, 0, 50, 50),
        '4': (50, 25, 100, 75),
        '5': (25, 25, 75, 75),
        '6': (0, 25, 50, 75),
        '7': (50, 50, 100, 100),
        '8': (25, 50, 75, 100),
        '9': (0, 50, 50, 100),
    }
    for r in [1, 2, 3, 4, 5, 6, 7, 8, 9]:
        for blendmode in [True, False]:
            surf = surf_clear.copy()
            sc = surf.surface_c
            surf.blit(test_square,
                      registration=r,
                      location=sc,
                      blend=blendmode)
            img = Image.fromarray(surf.content)
            assert expected_bounds[str(r)] == img.getbbox()

    # Test blending behaviour
    surf = surf_black.copy()
    surf.blit(test_surf, registration=7, location=(0, 0), blend=True)
    assert surf.content[0][0][3] == 255 and surf.content[-1][-1][3] == 255
    surf = surf_black.copy()
    surf.blit(test_surf, registration=7, location=(0, 0), blend=False)
    assert surf.content[0][0][3] == 255 and surf.content[-1][-1][3] == 0

    # Test clipping behaviour
    for blendmode in [True, False]:
        surf = surf_clear.copy()
        surf.blit(test_square, location=(75, 75), blend=blendmode, clip=True)
        surf.blit(test_square, location=(-25, -25), blend=blendmode, clip=True)
        assert surf.content[24][24][0] == 255 and surf.content[25][25][0] == 0
        assert surf.content[75][75][0] == 255 and surf.content[74][74][0] == 0

    # Test blit exceptions
    with pytest.raises(TypeError):
        surf = surf_clear.copy()
        surf.blit(1, location=(0, 0))
    with pytest.raises(ValueError):
        surf = surf_clear.copy()
        surf.blit(test_square, location=(150, 150))
    with pytest.raises(ValueError):
        surf = surf_clear.copy()
        surf.blit(test_square, location=(75, 75), clip=False)
    with pytest.raises(ValueError):
        surf = test_square.copy()
        surf.blit(surf_clear, location=(0, 0), clip=False)