def tryDo(states, tymth, tock=0.0, **opts): """ Generator function test example non-class based generator. Calling this function returns generator """ feed = "Default" count = 0 try: # enter context states.append(State(tyme=tymth(), context="enter", feed=feed, count=count)) while (True): # recur context feed = (yield (count)) # yields tock then waits for next send count += 1 states.append(State(tyme=tymth(), context="recur", feed=feed, count = count)) if count > 3: break # normal exit except GeneratorExit: # close context, forced exit due to .close count += 1 states.append(State(tyme=tymth(), context='close', feed=feed, count=count)) except Exception: # abort context, forced exit due to uncaught exception count += 1 states.append(State(tyme=tymth(), context='abort', feed=feed, count=count)) raise finally: # exit context, unforced exit due to normal exit of try count += 1 states.append(State(tyme=tymth(), context='exit', feed=feed, count=count)) return (True) # return value of yield from, or yield ex.value of StopIteration
def enter(self): """ """ feed = "Default" self.count = 0 self.states.append(State(tyme=self.tyme, context="enter", feed=feed, count=self.count))
def recur(self, tyme): """ """ self.count += 1 self.states.append(State(tyme=self.tyme, context="recur", feed=tyme, count=self.count)) if self.count > self.stop: return True # complete return False # incomplete
def close(self): """ """ self.count += 1 self.states.append(State(tyme=self.tyme, context='close', feed=None, count=self.count))
def test_trydo_break(): """ Test trydo testing function example with break to normal exit """ assert inspect.isgeneratorfunction(tryDo) assert hasattr(tryDo, "tock") assert hasattr(tryDo, "opts") tymist = tyming.Tymist(tock=0.125) assert tymist.tyme == 0.0 states = [] do = tryDo(tymth=tymist.tymen(), states=states, tock=0.25) assert inspect.isgenerator(do) result = do.send(None) assert result == 0 assert states == [State(tyme=0.0, context='enter', feed='Default', count=0)] result = do.send("Hello") assert result == 1 assert states == [State(tyme=0.0, context='enter', feed='Default', count=0), State(tyme=0.0, context='recur', feed='Hello', count=1)] tymist.tick() result = do.send("Hi") assert result == 2 assert states == [State(tyme=0.0, context='enter', feed='Default', count=0), State(tyme=0.0, context='recur', feed='Hello', count=1), State(tyme=0.125, context='recur', feed='Hi', count=2)] tymist.tick() result = do.send("Blue") assert result == 3 assert states == [State(tyme=0.0, context='enter', feed='Default', count=0), State(tyme=0.0, context='recur', feed='Hello', count=1), State(tyme=0.125, context='recur', feed='Hi', count=2), State(tyme=0.25, context='recur', feed='Blue', count=3)] tymist.tick() try: result = do.send("Red") except StopIteration as ex: assert ex.value == True # clean return assert states == [State(tyme=0.0, context='enter', feed='Default', count=0), State(tyme=0.0, context='recur', feed='Hello', count=1), State(tyme=0.125, context='recur', feed='Hi', count=2), State(tyme=0.25, context='recur', feed='Blue', count=3), State(tyme=0.375, context='recur', feed='Red', count=4), State(tyme=0.375, context='exit', feed='Red', count=5)] # send after break tymist.tick() try: result = do.send("Red") except StopIteration as ex: assert ex.value == None # no value after already finished assert states == [State(tyme=0.0, context='enter', feed='Default', count=0), State(tyme=0.0, context='recur', feed='Hello', count=1), State(tyme=0.125, context='recur', feed='Hi', count=2), State(tyme=0.25, context='recur', feed='Blue', count=3), State(tyme=0.375, context='recur', feed='Red', count=4), State(tyme=0.375, context='exit', feed='Red', count=5)] """End Test """
def test_trydoer_throw(): """ Test TryDoer testing class with throw to force exit """ tymist = tyming.Tymist(tock=0.125) doer = TryDoer(tymth=tymist.tymen(), tock=0.25) assert doer.tock == 0.25 assert doer.states == [] assert tymist.tyme == 0.0 do = doer(tymth=doer.tymth, tock=doer.tock) assert inspect.isgenerator(do) result = do.send(None) assert result == 0.25 assert doer.states == [State(tyme=0.0, context='enter', feed='Default', count=0)] result = do.send("Hello") assert result == 0.25 assert doer.states == [State(tyme=0.0, context='enter', feed='Default', count=0), State(tyme=0.0, context='recur', feed='Hello', count=1)] tymist.tick() result = do.send("Hi") assert result == 0.25 assert doer.states == [State(tyme=0.0, context='enter', feed='Default', count=0), State(tyme=0.0, context='recur', feed='Hello', count=1), State(tyme=0.125, context='recur', feed='Hi', count=2)] tymist.tick() try: result = do.throw(ValueError, "Bad") except ValueError as ex: assert ex.args[0] == "Bad" # exception alue is thrown value assert doer.states == [State(tyme=0.0, context='enter', feed='Default', count=0), State(tyme=0.0, context='recur', feed='Hello', count=1), State(tyme=0.125, context='recur', feed='Hi', count=2), State(tyme=0.25, context='abort', feed='Bad', count=3), State(tyme=0.25, context='exit', feed=None, count=4)] # send after throw tymist.tick() try: result = do.send("what?") except StopIteration as ex: assert ex.value == None # after throw no StopIteration value assert doer.states == [State(tyme=0.0, context='enter', feed='Default', count=0), State(tyme=0.0, context='recur', feed='Hello', count=1), State(tyme=0.125, context='recur', feed='Hi', count=2), State(tyme=0.25, context='abort', feed='Bad', count=3), State(tyme=0.25, context='exit', feed=None, count=4)]
def exit(self): """ """ self.count += 1 self.states.append(State(tyme=self.tyme, context='exit', feed=None, count=self.count))
def test_trydoer_close(): """ Test TryDoer testing class with close to force exit """ tymist = tyming.Tymist(tock=0.125) doer = TryDoer(tymth=tymist.tymen(), tock=0.25) assert doer.tock == 0.25 assert doer.states == [] assert tymist.tyme == 0.0 do = doer(tymth=doer.tymth, tock=doer.tock) assert inspect.isgenerator(do) result = do.send(None) assert result == 0.25 assert doer.states == [State(tyme=0.0, context='enter', feed='Default', count=0)] result = do.send("Hello") assert result == 0.25 assert doer.states == [State(tyme=0.0, context='enter', feed='Default', count=0), State(tyme=0.0, context='recur', feed='Hello', count=1)] tymist.tick() result = do.send("Hi") assert result == 0.25 assert doer.states == [State(tyme=0.0, context='enter', feed='Default', count=0), State(tyme=0.0, context='recur', feed='Hello', count=1), State(tyme=0.125, context='recur', feed='Hi', count=2)] tymist.tick() result = do.close() assert result == None # not clean return no return from close assert doer.states == [State(tyme=0.0, context='enter', feed='Default', count=0), State(tyme=0.0, context='recur', feed='Hello', count=1), State(tyme=0.125, context='recur', feed='Hi', count=2), State(tyme=0.25, context='close', feed=None, count=3), State(tyme=0.25, context='exit', feed=None, count=4)] # send after close tymist.tick() try: result = do.send("what?") except StopIteration as ex: assert ex.value == None # after close no StopIteration value assert doer.states == [State(tyme=0.0, context='enter', feed='Default', count=0), State(tyme=0.0, context='recur', feed='Hello', count=1), State(tyme=0.125, context='recur', feed='Hi', count=2), State(tyme=0.25, context='close', feed=None, count=3), State(tyme=0.25, context='exit', feed=None, count=4)] """End Test """
def test_trydoer_break(): """ Test TryDoer testing class with break to normal exit """ tymist = tyming.Tymist(tock=0.125) doer = TryDoer(tymth=tymist.tymen(), tock=0.25) assert doer.tock == 0.25 assert doer.states == [] assert tymist.tyme == 0.0 do = doer(tymth=doer.tymth, tock=doer.tock) assert inspect.isgenerator(do) result = do.send(None) assert result == 0.25 assert doer.states == [State(tyme=0.0, context='enter', feed='Default', count=0)] result = do.send("Hello") assert result == 0.25 assert doer.states == [State(tyme=0.0, context='enter', feed='Default', count=0), State(tyme=0.0, context='recur', feed='Hello', count=1)] tymist.tick() result = do.send("Hi") assert result == 0.25 assert doer.states == [State(tyme=0.0, context='enter', feed='Default', count=0), State(tyme=0.0, context='recur', feed='Hello', count=1), State(tyme=0.125, context='recur', feed='Hi', count=2)] tymist.tick() result = do.send("Blue") assert result == 0.25 assert doer.states == [State(tyme=0.0, context='enter', feed='Default', count=0), State(tyme=0.0, context='recur', feed='Hello', count=1), State(tyme=0.125, context='recur', feed='Hi', count=2), State(tyme=0.25, context='recur', feed='Blue', count=3)] tymist.tick() try: result = do.send("Red") except StopIteration as ex: assert ex.value == True # clean return assert doer.states == [State(tyme=0.0, context='enter', feed='Default', count=0), State(tyme=0.0, context='recur', feed='Hello', count=1), State(tyme=0.125, context='recur', feed='Hi', count=2), State(tyme=0.25, context='recur', feed='Blue', count=3), State(tyme=0.375, context='recur', feed='Red', count=4), State(tyme=0.375, context='exit', feed=None, count=5)] # send after break tymist.tick() try: result = do.send("Red") except StopIteration as ex: assert ex.value == None # after break no StopIteration value assert doer.states == [State(tyme=0.0, context='enter', feed='Default', count=0), State(tyme=0.0, context='recur', feed='Hello', count=1), State(tyme=0.125, context='recur', feed='Hi', count=2), State(tyme=0.25, context='recur', feed='Blue', count=3), State(tyme=0.375, context='recur', feed='Red', count=4), State(tyme=0.375, context='exit', feed=None, count=5)] """End Test """
def test_exDo(): """ Test exDo generator function non-class based """ doizeExDo = doing.doizeExDo assert inspect.isgeneratorfunction(doizeExDo) assert hasattr(doizeExDo, "tock") assert hasattr(doizeExDo, "opts") assert "states" in doizeExDo.opts assert doizeExDo.opts["states"] == None doizeExDo.opts["states"] = [] tymist = tyming.Tymist() dog = doizeExDo(tymth=tymist.tymen(), tock=doizeExDo.tock, **doizeExDo.opts) assert inspect.isgenerator(dog) tock = dog.send(None) assert tock == 0.0 tock = dog.send("Hello") assert tock == 0.0 tock = dog.send("Hi") assert tock == 0.0 tock = dog.close() assert tock == None with pytest.raises(StopIteration): tock = dog.send("what?") assert doizeExDo.opts["states"] == [State(tyme=0.0, context='enter', feed=0.0, count=0), State(tyme=0.0, context='recur', feed='Hello', count=1), State(tyme=0.0, context='recur', feed='Hi', count=2), State(tyme=0.0, context='close', feed=None, count=3), State(tyme=0.0, context='exit', feed=None, count=4)] doizeExDo.opts["states"] = [] dog = doizeExDo(tymth=tymist.tymen(), tock=1.0, **doizeExDo.opts) assert inspect.isgenerator(dog) tock = dog.send(None) assert tock == 1.0 tock = dog.send("Hello") assert tock == 1.0 tock = dog.send("Hi") assert tock == 1.0 tock = dog.close() assert tock == None with pytest.raises(StopIteration): tock = dog.send("what?") assert doizeExDo.opts["states"] == [State(tyme=0.0, context='enter', feed=0.0, count=0), State(tyme=0.0, context='recur', feed='Hello', count=1), State(tyme=0.0, context='recur', feed='Hi', count=2), State(tyme=0.0, context='close', feed=None, count=3), State(tyme=0.0, context='exit', feed=None, count=4)] doizeExDo.opts["states"] = [] dog = doizeExDo(tymth=tymist.tymen(), tock=1.0, **doizeExDo.opts) assert inspect.isgenerator(dog) tock = next(dog) assert tock == 1.0 tock = next(dog) assert tock == 1.0 tock = next(dog) assert tock == 1.0 tock = dog.close() assert tock == None with pytest.raises(StopIteration): tock = dog.send("what?") assert doizeExDo.opts["states"] == [State(tyme=0.0, context='enter', feed=0.0, count=0), State(tyme=0.0, context='recur', feed=None, count=1), State(tyme=0.0, context='recur', feed=None, count=2), State(tyme=0.0, context='close', feed=None, count=3), State(tyme=0.0, context='exit', feed=None, count=4)] """End Test """
def test_trydo_throw(): """ Test trydo testing function example with throw to force exit """ tymist = tyming.Tymist(tock=0.125) assert tymist.tyme == 0.0 states = [] do = tryDo(tymth=tymist.tymen(), states=states, tock=0.25) assert inspect.isgenerator(do) result = do.send(None) assert result == 0 assert states == [State(tyme=0.0, context='enter', feed='Default', count=0)] result = do.send("Hello") assert result == 1 assert states == [State(tyme=0.0, context='enter', feed='Default', count=0), State(tyme=0.0, context='recur', feed='Hello', count=1)] tymist.tick() result = do.send("Hi") assert result == 2 assert states == [State(tyme=0.0, context='enter', feed='Default', count=0), State(tyme=0.0, context='recur', feed='Hello', count=1), State(tyme=0.125, context='recur', feed='Hi', count=2)] tymist.tick() try: result = do.throw(ValueError, "Bad") except ValueError as ex: assert ex.args[0] == "Bad" assert states == [State(tyme=0.0, context='enter', feed='Default', count=0), State(tyme=0.0, context='recur', feed='Hello', count=1), State(tyme=0.125, context='recur', feed='Hi', count=2), State(tyme=0.25, context='abort', feed='Hi', count=3), State(tyme=0.25, context='exit', feed='Hi', count=4)] tymist.tick() try: result = do.send("what?") except StopIteration as ex: assert ex.value == None # not clean return assert states == [State(tyme=0.0, context='enter', feed='Default', count=0), State(tyme=0.0, context='recur', feed='Hello', count=1), State(tyme=0.125, context='recur', feed='Hi', count=2), State(tyme=0.25, context='abort', feed='Hi', count=3), State(tyme=0.25, context='exit', feed='Hi', count=4)]
def abort(self, ex): """ """ self.count += 1 self.states.append(State(tyme=self.tyme, context='abort', feed=ex.args[0], count=self.count))