Hi all,

I'm building a tool that will be run in a shell and depends heavily on
raw_input. I'm also using doctest (mostly via doctest.testfile) to
create unit tests for it.

After thinking a while about how to use doctest for invocations of
raw_input, I came up with the general sort of idea shown in the toy
code below.

I have two questions:

1) As I've never really made generators `mine,' I'm not sure if this is
the best (read `best' as `easiest and simplest') way to use a generator
for this task. Should I be doing it differently?

2) Is there some better way to enable doctesting of code that uses
raw_input? All I found when googling was the suggestion that in place of:

def myfunc():
   # code employing raw_input here

one could write:

def myfunc(input_meth=raw_input):
   # code with raw_input calls replaced with input_meth calls

but that seems like complicating my code for the non-doctest case.
Perhaps that worries me too much, though---I've yet to become test
infected ;-)

Thanks for any input,

Brian vdB



import  sys

class myraw(object):
    def __init__(self, values):
        self.values = values
        self.stream = self.mygen()
    def mygen(self):
        for i in self.values:
            yield i
    def readline(self):
        return str(self.stream.next())

def double_user_input():
    """A silly example to illustrate my method for testing.

    >>> sys.stdin = myraw([1,21,12.5,3.1415])
    >>> double_user_input()
    2
    >>> double_user_input()
    42
    >>> double_user_input()
    25
    >>> double_user_input()  # doctest: +ELLIPSIS
    6.28300...
    >>> sys.stdin = sys.__stdin__
    """
    val = float(raw_input()) * 2
    val = [val, int(val)][val == int(val)]
    return val

def __test():
    import doctest
    doctest.testmod()

if __name__ == "__main__":
    __test()

_______________________________________________
Tutor maillist  -  [email protected]
http://mail.python.org/mailman/listinfo/tutor

Reply via email to