treasurehunting2/PySDL2-0.9.5/sdl2/test/rect_test.py
2017-05-13 11:00:53 +02:00

440 lines
16 KiB
Python

import sys
import copy
import unittest
from ctypes import byref, c_int
from .. import rect
to_ctypes = lambda seq, dtype: (dtype * len(seq))(*seq)
class SDLRectTest(unittest.TestCase):
__tags__ = ["sdl"]
def test_SDL_Point(self):
pt = rect.SDL_Point()
self.assertEqual((pt.x, pt.y), (0, 0))
for x in range(-100, 100):
for y in range(-100, 100):
pt = rect.SDL_Point(x, y)
self.assertEqual((pt.x, pt.y), (x, y))
def test_SDL_Point_x(self):
pt = rect.SDL_Point()
def setx(point, val):
point.x = val
for x in range(-1000, 1000):
pt.x = x
self.assertEqual((pt.x, pt.y), (x, 0))
self.assertRaises(TypeError, setx, pt, 10.4)
self.assertRaises(TypeError, setx, pt, "Test")
self.assertRaises(TypeError, setx, pt, None)
def test_SDL_Point_y(self):
pt = rect.SDL_Point()
def sety(point, val):
point.y = val
for x in range(-1000, 1000):
pt.y = x
self.assertEqual((pt.x, pt.y), (0, x))
self.assertRaises(TypeError, sety, pt, 10.4)
self.assertRaises(TypeError, sety, pt, "Test")
self.assertRaises(TypeError, sety, pt, None)
def test_SDL_Point__repr__(self):
pt = rect.SDL_Point()
pt2 = eval("rect.%s" % repr(pt))
self.assertEqual(pt, pt2)
self.assertEqual((pt.x, pt.y), (pt2.x, pt2.y))
pt = rect.SDL_Point(10, 12)
pt2 = eval("rect.%s" % repr(pt))
self.assertEqual(pt, pt2)
self.assertEqual((pt.x, pt.y), (pt2.x, pt2.y))
def test_SDL_Point__copy__(self):
pt = rect.SDL_Point()
pt2 = copy.copy(pt)
self.assertEqual(pt, pt2)
self.assertEqual((pt.x, pt.y), (pt2.x, pt2.y))
pt2.x = 7
pt2.y = 9
pt3 = copy.copy(pt2)
self.assertNotEqual(pt, pt2)
self.assertEqual(pt3, pt2)
def test_SDL_Point__eq__(self):
self.assertTrue(rect.SDL_Point() == rect.SDL_Point())
self.assertTrue(rect.SDL_Point(0, 0) == rect.SDL_Point(0, 0))
self.assertTrue(rect.SDL_Point(10, 0) == rect.SDL_Point(10, 0))
self.assertTrue(rect.SDL_Point(0, 10) == rect.SDL_Point(0, 10))
self.assertTrue(rect.SDL_Point(12, 10) == rect.SDL_Point(12, 10))
self.assertFalse(rect.SDL_Point(0, 0) == rect.SDL_Point(0, 1))
self.assertFalse(rect.SDL_Point(0, 0) == rect.SDL_Point(1, 0))
self.assertFalse(rect.SDL_Point(0, 0) == rect.SDL_Point(1, 1))
self.assertFalse(rect.SDL_Point(10, 10) == rect.SDL_Point(10, 0))
self.assertFalse(rect.SDL_Point(7, 10) == rect.SDL_Point(0, 10))
self.assertFalse(rect.SDL_Point(12, 10) == rect.SDL_Point(12, 11))
def test_SDL_Point__ne__(self):
self.assertFalse(rect.SDL_Point() != rect.SDL_Point())
self.assertFalse(rect.SDL_Point(0, 0) != rect.SDL_Point(0, 0))
self.assertFalse(rect.SDL_Point(10, 0) != rect.SDL_Point(10, 0))
self.assertFalse(rect.SDL_Point(0, 10) != rect.SDL_Point(0, 10))
self.assertFalse(rect.SDL_Point(12, 10) != rect.SDL_Point(12, 10))
self.assertTrue(rect.SDL_Point(0, 0) != rect.SDL_Point(0, 1))
self.assertTrue(rect.SDL_Point(0, 0) != rect.SDL_Point(1, 0))
self.assertTrue(rect.SDL_Point(0, 0) != rect.SDL_Point(1, 1))
self.assertTrue(rect.SDL_Point(10, 10) != rect.SDL_Point(10, 0))
self.assertTrue(rect.SDL_Point(7, 10) != rect.SDL_Point(0, 10))
self.assertTrue(rect.SDL_Point(12, 10) != rect.SDL_Point(12, 11))
def test_SDL_Rect(self):
rt = rect.SDL_Rect()
self.assertEqual((rt.x, rt.y, rt.w, rt.h), (0, 0, 0, 0))
for x in range(-10, 10):
for y in range(-10, 10):
for w in range(-10, 10):
for h in range(-10, 10):
rt = rect.SDL_Rect(x, y, w, h)
self.assertEqual((rt.x, rt.y, rt.w, rt.h),
(x, y, w, h))
def test_SDL_Rect__repr__(self):
rt = rect.SDL_Rect(1, 2, 3, 4)
rt2 = eval("rect.%s" % repr(rt))
self.assertEqual((rt.x, rt.y, rt.w, rt.h),
(rt2.x, rt2.y, rt2.w, rt2.h))
self.assertEqual(rt, rt2)
def test_SDL_Rect__copy__(self):
rt = rect.SDL_Rect()
rt2 = copy.copy(rt)
self.assertEqual(rt, rt2)
self.assertEqual((rt.x, rt.y, rt.w, rt.h),
(rt2.x, rt2.y, rt2.w, rt2.h))
rt2.x = 5
rt2.y = 33
rt2.w = 17
rt2.w = 212
rt3 = copy.copy(rt2)
self.assertNotEqual(rt, rt2)
self.assertEqual(rt3, rt2)
def test_SDL_Rect__eq__(self):
sdlr = rect.SDL_Rect
self.assertTrue(sdlr() == sdlr())
self.assertTrue(sdlr(0, 0, 0, 0) == sdlr(0, 0, 0, 0))
self.assertTrue(sdlr(1, 2, 3, 4) == sdlr(1, 2, 3, 4))
self.assertTrue(sdlr(-1, -2, -3, -4) == sdlr(-1, -2, -3, -4))
self.assertTrue(sdlr(10, 0, 0, 0) == sdlr(10, 0, 0, 0))
self.assertTrue(sdlr(0, 10, 0, 0) == sdlr(0, 10, 0, 0))
self.assertTrue(sdlr(0, 0, 10, 0) == sdlr(0, 0, 10, 0))
self.assertTrue(sdlr(0, 0, 0, 10) == sdlr(0, 0, 0, 10))
self.assertTrue(sdlr(10, 10, 0, 0) == sdlr(10, 10, 0, 0))
self.assertTrue(sdlr(0, 10, 10, 0) == sdlr(0, 10, 10, 0))
self.assertTrue(sdlr(0, 0, 10, 10) == sdlr(0, 0, 10, 10))
self.assertTrue(sdlr(10, 0, 0, 10) == sdlr(10, 0, 0, 10))
self.assertTrue(sdlr(10, 10, 10, 0) == sdlr(10, 10, 10, 0))
self.assertTrue(sdlr(0, 10, 10, 10) == sdlr(0, 10, 10, 10))
self.assertFalse(sdlr() == sdlr(0, 0, 0, 1))
self.assertFalse(sdlr(10, 0, 0, 0) == sdlr(0, 0, 0, 0))
self.assertFalse(sdlr(10, 10, 0, 0) == sdlr(0, 10, 0, 0))
self.assertFalse(sdlr(10, 0, 10, 0) == sdlr(0, 0, 10, 0))
self.assertFalse(sdlr(10, 0, 0, 10) == sdlr(0, 0, 0, 10))
self.assertFalse(sdlr(1, 2, 3, 4) == sdlr(-1, -2, -3, -4))
def test_SDL_Rect__ne__(self):
sdlr = rect.SDL_Rect
self.assertTrue(sdlr() != sdlr(0, 0, 0, 1))
self.assertTrue(sdlr(10, 0, 0, 0) != sdlr(0, 0, 0, 0))
self.assertTrue(sdlr(10, 10, 0, 0) != sdlr(0, 10, 0, 0))
self.assertTrue(sdlr(10, 0, 10, 0) != sdlr(0, 0, 10, 0))
self.assertTrue(sdlr(10, 0, 0, 10) != sdlr(0, 0, 0, 10))
self.assertTrue(sdlr(1, 2, 3, 4) != sdlr(-1, -2, -3, -4))
self.assertFalse(sdlr() != sdlr())
self.assertFalse(sdlr(0, 0, 0, 0) != sdlr(0, 0, 0, 0))
self.assertFalse(sdlr(1, 2, 3, 4) != sdlr(1, 2, 3, 4))
self.assertFalse(sdlr(-1, -2, -3, -4) != sdlr(-1, -2, -3, -4))
self.assertFalse(sdlr(10, 0, 0, 0) != sdlr(10, 0, 0, 0))
self.assertFalse(sdlr(0, 10, 0, 0) != sdlr(0, 10, 0, 0))
self.assertFalse(sdlr(0, 0, 10, 0) != sdlr(0, 0, 10, 0))
self.assertFalse(sdlr(0, 0, 0, 10) != sdlr(0, 0, 0, 10))
self.assertFalse(sdlr(10, 10, 0, 0) != sdlr(10, 10, 0, 0))
self.assertFalse(sdlr(0, 10, 10, 0) != sdlr(0, 10, 10, 0))
self.assertFalse(sdlr(0, 0, 10, 10) != sdlr(0, 0, 10, 10))
self.assertFalse(sdlr(10, 0, 0, 10) != sdlr(10, 0, 0, 10))
self.assertFalse(sdlr(10, 10, 10, 0) != sdlr(10, 10, 10, 0))
self.assertFalse(sdlr(0, 10, 10, 10) != sdlr(0, 10, 10, 10))
def test_SDL_Rect_x(self):
rt = rect.SDL_Rect()
def setx(r, val):
r.x = val
for x in range(-1000, 1000):
rt.x = x
self.assertEqual((rt.x, rt.y, rt.w, rt.h), (x, 0, 0, 0))
self.assertRaises(TypeError, setx, rt, 10.4)
self.assertRaises(TypeError, setx, rt, "Test")
self.assertRaises(TypeError, setx, rt, None)
def test_SDL_Rect_y(self):
rt = rect.SDL_Rect()
def sety(r, val):
r.y = val
for x in range(-1000, 1000):
rt.y = x
self.assertEqual((rt.x, rt.y, rt.w, rt.h), (0, x, 0, 0))
self.assertRaises(TypeError, sety, rt, 10.4)
self.assertRaises(TypeError, sety, rt, "Test")
self.assertRaises(TypeError, sety, rt, None)
def test_SDL_Rect_w(self):
rt = rect.SDL_Rect()
def setw(r, val):
r.w = val
for x in range(-1000, 1000):
rt.w = x
self.assertEqual((rt.x, rt.y, rt.w, rt.h), (0, 0, x, 0))
self.assertRaises(TypeError, setw, rt, 10.4)
self.assertRaises(TypeError, setw, rt, "Test")
self.assertRaises(TypeError, setw, rt, None)
def test_SDL_Rect_h(self):
rt = rect.SDL_Rect()
def seth(r, val):
r.h = val
for x in range(-1000, 1000):
rt.h = x
self.assertEqual((rt.x, rt.y, rt.w, rt.h), (0, 0, 0, x))
self.assertRaises(TypeError, seth, rt, 10.4)
self.assertRaises(TypeError, seth, rt, "Test")
self.assertRaises(TypeError, seth, rt, None)
def test_SDL_RectEmpty(self):
for w in range(-100, 100):
for h in range(-100, 100):
r = rect.SDL_Rect(0, 0, w, h)
if w > 0 and h > 0:
self.assertFalse(rect.SDL_RectEmpty(r))
else:
self.assertTrue(rect.SDL_RectEmpty(r))
self.assertRaises(AttributeError, rect.SDL_RectEmpty, "Test")
def test_SDL_RectEquals(self):
r1 = rect.SDL_Rect(0, 0, 0, 0)
r2 = rect.SDL_Rect(0, 0, 0, 0)
self.assertTrue(rect.SDL_RectEquals(r1, r2))
self.assertEqual(r1, r2)
r2 = rect.SDL_Rect(-1, 2, 0, 0)
self.assertFalse(rect.SDL_RectEquals(r1, r2))
self.assertNotEqual(r1, r2)
r2 = rect.SDL_Rect(0, 0, 1, 2)
self.assertFalse(rect.SDL_RectEquals(r1, r2))
self.assertNotEqual(r1, r2)
self.assertRaises(AttributeError, rect.SDL_RectEquals, "Test", r2)
self.assertRaises(AttributeError, rect.SDL_RectEquals, r1, None)
self.assertRaises(AttributeError, rect.SDL_RectEquals, r1, "Test")
def test_SDL_UnionRect(self):
r1 = rect.SDL_Rect(0, 0, 10, 10)
r2 = rect.SDL_Rect(20, 20, 10, 10)
r3 = rect.SDL_Rect()
rect.SDL_UnionRect(r1, r2, byref(r3))
self.assertEqual((r3.x, r3.y, r3.w, r3.h), (0, 0, 30, 30))
r1 = rect.SDL_Rect(0, 0, 0, 0)
r2 = rect.SDL_Rect(20, 20, 10, 10)
rect.SDL_UnionRect(r1, r2, byref(r3))
self.assertEqual((r3.x, r3.y, r3.w, r3.h), (20, 20, 10, 10))
r1 = rect.SDL_Rect(-200, -4, 450, 33)
r2 = rect.SDL_Rect(20, 20, 10, 10)
rect.SDL_UnionRect(r1, r2, byref(r3))
self.assertEqual((r3.x, r3.y, r3.w, r3.h), (-200, -4, 450, 34))
r1 = rect.SDL_Rect(0, 0, 15, 16)
r2 = rect.SDL_Rect(20, 20, 0, 0)
rect.SDL_UnionRect(r1, r2, byref(r3))
self.assertEqual((r3.x, r3.y, r3.w, r3.h), (0, 0, 15, 16))
self.assertRaises((AttributeError, TypeError),
rect.SDL_UnionRect, None, None)
self.assertRaises((AttributeError, TypeError),
rect.SDL_UnionRect, "Test", r2)
self.assertRaises((AttributeError, TypeError),
rect.SDL_UnionRect, r1, None)
self.assertRaises((AttributeError, TypeError),
rect.SDL_UnionRect, r1, "Test")
def test_SDL_IntersectRectAndLine(self):
r = rect.SDL_Rect()
x1, y1, x2, y2 = c_int(-5), c_int(-5), c_int(5), c_int(5)
ret = rect.SDL_IntersectRectAndLine(r, byref(x1), byref(y1),
byref(x2), byref(y2))
self.assertFalse(ret)
r = rect.SDL_Rect(0, 0, 2, 2)
x1, y1, x2, y2 = c_int(-1), c_int(-1), c_int(3), c_int(3)
ret = rect.SDL_IntersectRectAndLine(r, byref(x1), byref(y1),
byref(x2), byref(y2))
self.assertTrue(ret)
self.assertEqual((x1.value, y1.value, x2.value, y2.value),
(0, 0, 1, 1))
r = rect.SDL_Rect(-4, -4, 14, 14)
x1, y1, x2, y2 = c_int(8), c_int(22), c_int(8), c_int(33)
ret = rect.SDL_IntersectRectAndLine(r, byref(x1), byref(y1),
byref(x2), byref(y2))
self.assertFalse(ret)
# TODO
def test_SDL_EnclosePoints(self):
pt1 = rect.SDL_Point(0, 0)
pt2 = rect.SDL_Point(5, 7)
clip = rect.SDL_Rect(0, 0, 10, 10)
res = rect.SDL_Rect()
ret = rect.SDL_EnclosePoints(to_ctypes([pt1, pt2], rect.SDL_Point), 2,
byref(clip), byref(res))
self.assertTrue(ret)
self.assertEqual(res, rect.SDL_Rect(0, 0, 6, 8))
clip = rect.SDL_Rect(-10, -10, 3, 3)
ret = rect.SDL_EnclosePoints(to_ctypes([pt1, pt2], rect.SDL_Point), 2,
byref(clip), byref(res))
self.assertFalse(ret)
self.assertNotEqual(res, rect.SDL_Rect(0, 0, 0, 0))
ret = rect.SDL_EnclosePoints(to_ctypes([pt1, pt2], rect.SDL_Point), 2,
None, byref(res))
self.assertTrue(ret)
self.assertEqual(res, rect.SDL_Rect(0, 0, 6, 8))
ret = rect.SDL_EnclosePoints(None, 0, None, byref(res))
self.assertFalse(ret)
self.assertNotEqual(res, rect.SDL_Rect())
self.assertRaises(TypeError, rect.SDL_EnclosePoints, None, None)
self.assertRaises(TypeError, rect.SDL_EnclosePoints, "Test", None)
self.assertRaises(TypeError, rect.SDL_EnclosePoints, (1, 2, 3), None)
self.assertRaises(TypeError, rect.SDL_EnclosePoints, (None,), None)
def test_SDL_HasIntersection(self):
r1 = rect.SDL_Rect()
r2 = rect.SDL_Rect()
self.assertFalse(rect.SDL_HasIntersection(r1, r2))
r1 = rect.SDL_Rect(0, 0, -200, 200)
r2 = rect.SDL_Rect(0, 0, -100, 200)
self.assertFalse(rect.SDL_HasIntersection(r1, r2))
r1 = rect.SDL_Rect(0, 0, 10, 10)
r2 = rect.SDL_Rect(-5, 5, 10, 2)
self.assertTrue(rect.SDL_HasIntersection(r1, r2))
r1 = rect.SDL_Rect(0, 0, 10, 10)
r2 = rect.SDL_Rect(-5, -5, 10, 2)
self.assertFalse(rect.SDL_HasIntersection(r1, r2))
r1 = rect.SDL_Rect(0, 0, 10, 10)
r2 = rect.SDL_Rect(-5, -5, 2, 10)
self.assertFalse(rect.SDL_HasIntersection(r1, r2))
r1 = rect.SDL_Rect(0, 0, 10, 10)
r2 = rect.SDL_Rect(-5, -5, 5, 5)
self.assertFalse(rect.SDL_HasIntersection(r1, r2))
r1 = rect.SDL_Rect(0, 0, 10, 10)
r2 = rect.SDL_Rect(-5, -5, 6, 6)
self.assertTrue(rect.SDL_HasIntersection(r1, r2))
def test_SDL_IntersectRect(self):
r1 = rect.SDL_Rect()
r2 = rect.SDL_Rect()
res = rect.SDL_Rect()
ret = rect.SDL_IntersectRect(r1, r2, byref(res))
self.assertFalse(ret)
r1 = rect.SDL_Rect(0, 0, -200, 200)
r2 = rect.SDL_Rect(0, 0, -100, 200)
ret = rect.SDL_IntersectRect(r1, r2, byref(res))
self.assertFalse(ret)
r1 = rect.SDL_Rect(0, 0, 10, 10)
r2 = rect.SDL_Rect(-5, 5, 10, 2)
ret = rect.SDL_IntersectRect(r1, r2, byref(res))
self.assertTrue(ret)
self.assertEqual(res, rect.SDL_Rect(0, 5, 5, 2))
r1 = rect.SDL_Rect(0, 0, 10, 10)
r2 = rect.SDL_Rect(-5, -5, 10, 2)
ret = rect.SDL_IntersectRect(r1, r2, byref(res))
self.assertFalse(ret)
r1 = rect.SDL_Rect(0, 0, 10, 10)
r2 = rect.SDL_Rect(-5, -5, 2, 10)
ret = rect.SDL_IntersectRect(r1, r2, byref(res))
self.assertFalse(ret)
r1 = rect.SDL_Rect(0, 0, 10, 10)
r2 = rect.SDL_Rect(-5, -5, 5, 5)
ret = rect.SDL_IntersectRect(r1, r2, byref(res))
self.assertFalse(ret)
r1 = rect.SDL_Rect(0, 0, 10, 10)
r2 = rect.SDL_Rect(-5, -5, 6, 6)
ret = rect.SDL_IntersectRect(r1, r2, byref(res))
self.assertTrue(ret)
self.assertEqual(res, rect.SDL_Rect(0, 0, 1, 1))
def test_SDL_PointInRect(self):
r1 = rect.SDL_Rect(0, 0, 10, 10)
p = rect.SDL_Point(0, 0)
self.assertTrue(rect.SDL_PointInRect(p, r1))
p = rect.SDL_Point(10, 10)
self.assertFalse(rect.SDL_PointInRect(p, r1))
p = rect.SDL_Point(10, 3)
self.assertFalse(rect.SDL_PointInRect(p, r1))
p = rect.SDL_Point(3, 10)
self.assertFalse(rect.SDL_PointInRect(p, r1))
p = rect.SDL_Point(4, 2)
self.assertTrue(rect.SDL_PointInRect(p, r1))
if __name__ == '__main__':
sys.exit(unittest.main())