208 lines
6.2 KiB
Python
208 lines
6.2 KiB
Python
import sys
|
|
import unittest
|
|
try:
|
|
import multiprocessing
|
|
_HASMP = True
|
|
except ImportError:
|
|
_HASMP = False
|
|
from ..ext import events
|
|
|
|
|
|
def mp_do_nothing(sender, *args):
|
|
# Does nothing
|
|
pass
|
|
|
|
|
|
class SDL2ExtEventsTest(unittest.TestCase):
|
|
__tags__ = ["sdl2ext"]
|
|
|
|
def test_EventHandler(self):
|
|
self.assertRaises(TypeError, events.EventHandler)
|
|
self.assertIsInstance(events.EventHandler(None), events.EventHandler)
|
|
self.assertIsInstance(events.EventHandler(132), events.EventHandler)
|
|
self.assertIsInstance(events.EventHandler("Test"), events.EventHandler)
|
|
|
|
ev = events.EventHandler(None)
|
|
self.assertEqual(ev.sender, None)
|
|
ev = events.EventHandler("Test")
|
|
self.assertEqual(ev.sender, "Test")
|
|
self.assertEqual(len(ev), 0)
|
|
self.assertEqual(len(ev.callbacks), 0)
|
|
|
|
def test_EventHandler_add__iadd__(self):
|
|
ev = events.EventHandler(None)
|
|
|
|
def doadd(ev, cb):
|
|
ev += cb
|
|
|
|
def callback():
|
|
pass
|
|
|
|
self.assertRaises(TypeError, doadd, ev, None)
|
|
self.assertRaises(TypeError, doadd, ev, "Test")
|
|
self.assertRaises(TypeError, doadd, ev, 1234)
|
|
|
|
self.assertEqual(len(ev), 0)
|
|
ev += callback
|
|
self.assertEqual(len(ev), 1)
|
|
for x in range(4):
|
|
ev += callback
|
|
self.assertEqual(len(ev), 5)
|
|
|
|
self.assertRaises(TypeError, ev.add, None)
|
|
self.assertRaises(TypeError, ev.add, "Test")
|
|
self.assertRaises(TypeError, ev.add, 1234)
|
|
|
|
self.assertEqual(len(ev), 5)
|
|
ev.add(callback)
|
|
self.assertEqual(len(ev), 6)
|
|
for x in range(4):
|
|
ev.add(callback)
|
|
self.assertEqual(len(ev), 10)
|
|
|
|
def test_EventHandler_remove__isub__(self):
|
|
ev = events.EventHandler(None)
|
|
|
|
def doremove(ev, cb):
|
|
ev -= cb
|
|
|
|
def callback():
|
|
pass
|
|
|
|
for x in range(10):
|
|
ev += callback
|
|
self.assertEqual(len(ev), 10)
|
|
|
|
self.assertRaises(TypeError, ev.remove)
|
|
for invval in ("Test", None, 1234, self.assertEqual):
|
|
self.assertRaises(ValueError, ev.remove, invval)
|
|
self.assertRaises(ValueError, doremove, ev, invval)
|
|
self.assertEqual(len(ev), 10)
|
|
ev.remove(callback)
|
|
self.assertEqual(len(ev), 9)
|
|
ev -= callback
|
|
self.assertEqual(len(ev), 8)
|
|
for x in range(3):
|
|
ev.remove(callback)
|
|
ev -= callback
|
|
self.assertEqual(len(ev), 2)
|
|
|
|
def test_EventHandler__call__(self):
|
|
ev = events.EventHandler("Test")
|
|
testsum = []
|
|
|
|
def callback(sender, sumval):
|
|
self.assertEqual(sender, "Test")
|
|
sumval.append(1)
|
|
|
|
for x in range(10):
|
|
ev += callback
|
|
self.assertEqual(len(ev), 10)
|
|
results = ev(testsum)
|
|
self.assertEqual(len(testsum), 10)
|
|
for v in testsum:
|
|
self.assertEqual(v, 1)
|
|
self.assertEqual(len(results), 10)
|
|
for v in results:
|
|
self.assertIsNone(v)
|
|
|
|
@unittest.skipIf(not _HASMP, "multiprocessing is not supported")
|
|
def test_MPEventHandler(self):
|
|
self.assertRaises(TypeError, events.MPEventHandler)
|
|
self.assertIsInstance(events.MPEventHandler(None),
|
|
events.MPEventHandler)
|
|
self.assertIsInstance(events.MPEventHandler(132),
|
|
events.MPEventHandler)
|
|
self.assertIsInstance(events.MPEventHandler("Test"),
|
|
events.MPEventHandler)
|
|
|
|
ev = events.MPEventHandler(None)
|
|
self.assertEqual(ev.sender, None)
|
|
ev = events.MPEventHandler("Test")
|
|
self.assertEqual(ev.sender, "Test")
|
|
self.assertEqual(len(ev), 0)
|
|
self.assertEqual(len(ev.callbacks), 0)
|
|
|
|
@unittest.skipIf(not _HASMP, "multiprocessing is not supported")
|
|
def test_MPEventHandler_add__iadd__(self):
|
|
ev = events.MPEventHandler(None)
|
|
|
|
def doadd(ev, cb):
|
|
ev += cb
|
|
|
|
def callback():
|
|
pass
|
|
|
|
self.assertRaises(TypeError, doadd, ev, None)
|
|
self.assertRaises(TypeError, doadd, ev, "Test")
|
|
self.assertRaises(TypeError, doadd, ev, 1234)
|
|
|
|
self.assertEqual(len(ev), 0)
|
|
ev += callback
|
|
self.assertEqual(len(ev), 1)
|
|
for x in range(4):
|
|
ev += callback
|
|
self.assertEqual(len(ev), 5)
|
|
|
|
self.assertRaises(TypeError, ev.add, None)
|
|
self.assertRaises(TypeError, ev.add, "Test")
|
|
self.assertRaises(TypeError, ev.add, 1234)
|
|
|
|
self.assertEqual(len(ev), 5)
|
|
ev.add(callback)
|
|
self.assertEqual(len(ev), 6)
|
|
for x in range(4):
|
|
ev.add(callback)
|
|
self.assertEqual(len(ev), 10)
|
|
|
|
@unittest.skipIf(not _HASMP, "multiprocessing is not supported")
|
|
def test_MPEventHandler_remove__isub__(self):
|
|
ev = events.MPEventHandler(None)
|
|
|
|
def doremove(ev, cb):
|
|
ev -= cb
|
|
|
|
def callback():
|
|
pass
|
|
|
|
for x in range(10):
|
|
ev += callback
|
|
self.assertEqual(len(ev), 10)
|
|
|
|
self.assertRaises(TypeError, ev.remove)
|
|
for invval in ("Test", None, 1234, self.assertEqual):
|
|
self.assertRaises(ValueError, ev.remove, invval)
|
|
self.assertRaises(ValueError, doremove, ev, invval)
|
|
self.assertEqual(len(ev), 10)
|
|
ev.remove(callback)
|
|
self.assertEqual(len(ev), 9)
|
|
ev -= callback
|
|
self.assertEqual(len(ev), 8)
|
|
for x in range(3):
|
|
ev.remove(callback)
|
|
ev -= callback
|
|
self.assertEqual(len(ev), 2)
|
|
|
|
@unittest.skipIf(not _HASMP, "multiprocessing is not supported")
|
|
@unittest.skipIf(sys.platform == "win32",
|
|
"relative import will create a fork bomb")
|
|
def test_MPEventHandler__call__(self):
|
|
ev = events.MPEventHandler("Test")
|
|
|
|
for x in range(10):
|
|
ev += mp_do_nothing
|
|
self.assertEqual(len(ev), 10)
|
|
results = ev().get(timeout=1)
|
|
self.assertEqual(len(results), 10)
|
|
for v in results:
|
|
self.assertIsNone(v)
|
|
|
|
results = ev("Test", 1234, "MoreArgs").get(timeout=1)
|
|
self.assertEqual(len(results), 10)
|
|
for v in results:
|
|
self.assertIsNone(v)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(unittest.main())
|