[prev in list] [next in list] [prev in thread] [next in thread]
List: python-edu-sig
Subject: [Edu-sig] testing interactive loops
From: aharrin () luc ! edu (Andrew Harrington)
Date: 2006-05-23 17:58:13
Message-ID: 44734D35.2030603 () luc ! edu
[Download RAW message or body]
For testing keyboard input loops in a tutorial, the issue with
__builtin__ should not arise with Crunchy Frog code snippet testing,
because the snippet is copied into a main module! I like the idea of
some marker for the main engine that a doctest is interactive. Instead
of the current doctest marker
<pre vlam="doctest">
we might use
<pre vlam="doctestInteractive">
or to indicate delimiters and their replacements we might use
<pre vlam="doctest" inputAfter="'??':'?','::':':'">
and have the engine then change :: and ?? to : and ? and extract the
input that follows them, and do the input redirection so doctest then works.
Andy
Andre Roberge wrote:
> On 5/16/06, *Andrew Harrington* <aharrin at luc.edu
> <mailto:aharrin at luc.edu>> wrote:
>
> We have been discussing testing in tutorials with doctest.
> There is one place that does not work, I think: testing an
> interactive
> loop, which is a construction I teach in introductory programming.
>
> It appears that doctest cannot handle interactive input. I would
> still
> like to be able to illustrate a session with interactive input and
> explicit output at the end, and check it automatically.
>
> If you just do input redirection and compare the actual output to the
> desired input, you get messed up because the input is not echoed when
> you redirect from a file.
>
> The following does not work, but is the idea you want, to force
> the echo
> when stdin become a file:
>
> orig_raw_input = raw_input
>
> def raw_input_echo(prompt=""):
> s = orig_raw_input(prompt)
> print s
> return s
>
> raw_input = raw_input_echo
>
> def input_echo(prompt=""):
> return eval(raw_input(prompt))
>
> This fails because it makes raw_input a global for the current
> module,
> but not a built_in, so it fails when you import and use a module using
> raw_input.
>
>
> How about: (something totally untested)
> import ah # module named after you :-)
> ah.raw_input = raw_input_echo
>
> And then you run your tests?...
>
> Andr?
>
> I guess we could make it work in little code fragment tests, where
> you
> append the user's fragment to the code above, in the same module,
> but it
> is not a general solution.
>
> Is there any better way to do this?
>
> A kludge for tutorial doc tests would be to mark the prompt strings
> somehow in the tutorial source, for instance making it always end with
> :: or ?? so the test string can be parsed to find the responses that
> come after the prompts, and put them in the input file and not in the
> output file. For example, the test string
> ... Sum numbers!
> ... Enter a number (or 0 to quit):: 3
> ... Enter a number (or 0 to quit):: 4
> ... Enter a number (or 0 to quit):: 8
> ... Enter a number (or 0 to quit):: 0
> ... The sum is 15!
>
> might be processed for web display in the tutorial undoubling the ::
>
> ... Sum numbers!
> ... Enter a number (or 0 to quit): 3
> ... Enter a number (or 0 to quit): 4
> ... Enter a number (or 0 to quit): 8
> ... Enter a number (or 0 to quit): 0
> ... The sum is 15!
>
> and the tutorial parser would also generate an input file
> 3
> 4
> 8
> 0
>
> and output file
>
> Sum numbers!
> Enter a number (or 0 to quit):
> Enter a number (or 0 to quit):
> Enter a number (or 0 to quit):
> Enter a number (or 0 to quit):
> The sum is 15!
>
> Then run the code with redirection and compare the desired and actual
> output. There still is the issue of the program hanging with the
> given
> input ...
>
> How does regular doctest deal with infinite loops or waiting for
> nonexistent keyboard input?
>
>
> ??
>
>
> Better ideas?
>
> --
> Andrew N. Harrington
> Computer Science Department Undergraduate Program Director
> Loyola University Chicago http://www.cs.luc.edu/~anh
> <http://www.cs.luc.edu/%7Eanh>
> 512B Lewis Towers (office) Office Phone: 312-915-7982
> Snail mail to Lewis Towers 416 Dept. Fax: 312-915-7998
> 820 North Michigan Avenue aharrin at luc.edu
> <mailto:aharrin at luc.edu>
> Chicago, Illinois 60611
>
> _______________________________________________
> Edu-sig mailing list
> Edu-sig at python.org <mailto:Edu-sig at python.org>
> http://mail.python.org/mailman/listinfo/edu-sig
>
>
--
Andrew N. Harrington
Computer Science Department Undergraduate Program Director
Loyola University Chicago http://www.cs.luc.edu/~anh
512B Lewis Towers (office) Office Phone: 312-915-7982
Snail mail to Lewis Towers 416 Dept. Fax: 312-915-7998
820 North Michigan Avenue aharrin at luc.edu
Chicago, Illinois 60611
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic