def test_pygame2_sdl_time_remove_timer(self):

        # __doc__ (as of 2010-01-06) for pygame2.sdl.time.remove_timer:

        # remove_timer (timerobj) -> None
        #
        # Removes a previously added timer callback.
        #
        # Removes a previously added timer callback and throws an
        # exception, if the passed object is not a matching timer
        # object.

        def _timercb(flag):
            flag.append(1)
            return 10

        self.assertRaises(pygame2.Error, sdltime.remove_timer, _timercb)
        sdltime.init()
        self.assertRaises(TypeError, sdltime.remove_timer, None)

        flag1 = []
        tobj = sdltime.add_timer(10, _timercb, (flag1,))
        self.assertTrue(tobj != None)
        t1 = t2 = sdltime.get_ticks()
        while t2 - t1 < 50:
            sdltime.delay(1)
            t2 = sdltime.get_ticks()
        sdltime.remove_timer(tobj)
        self.assertRaises(ValueError, sdltime.remove_timer, tobj)

        flag2 = []
        tobj = sdltime.add_timer(100, _timercb, (flag2,))
        sdltime.remove_timer(tobj)
        self.assertRaises(ValueError, sdltime.remove_timer, tobj)
        self.assertTrue(tobj != None)
        t1 = t2 = sdltime.get_ticks()
        while t2 - t1 < 50:
            sdltime.delay(1)
            t2 = sdltime.get_ticks()
        sdltime.quit()
        self.assertRaises(pygame2.Error, sdltime.remove_timer, _timercb)

        # This is important. If the test
        self.assertTrue(len(flag1) != 0)
        self.assertTrue(len(flag2) == 0)
    def test_pygame2_sdl_time_add_timer(self):

        # __doc__ (as of 2010-01-06) for pygame2.sdl.time.add_timer:

        # add_timer (interval, callable[, data]) -> CObject
        #
        # Adds a timer callback to be called periodically.
        #
        # Adds a timer callback to be called periodically using the
        # specified *interval*. *callable* can be any callable objet,
        # method or function. On invocation, the optional *data* will be
        # passed to the callable.
        #
        # This will return an CObject that acts as unique id for the
        # timer callback.
        setargs = []

        def _timercb(l, arg1, arg2):
            l.append(arg1)
            l.append(arg2)
            return 10

        self.assertRaises(pygame2.Error, sdltime.add_timer, _timercb)

        sdltime.init()
        tobj = sdltime.add_timer(10, _timercb, (setargs, "Hello", "World"))
        if tobj is None:
            sdltime.quit()
            self.fail()
        t1 = t2 = sdltime.get_ticks()
        while t2 - t1 < 50:
            sdltime.delay(1)
            t2 = sdltime.get_ticks()
        sdltime.quit()
        self.assertRaises(pygame2.Error, sdltime.add_timer, _timercb)

        # This is important - if we run the assertion test before quitting,
        # the time module won't be quitted and the timers will still exist,
        # causing thread issues in other tests.
        self.assertTrue(len(setargs) > 5)