Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > unitest with python curses app

Reply
Thread Tools

unitest with python curses app

 
 
Brian
Guest
Posts: n/a
 
      02-20-2004
Hello;

I'm writing a program with curses in python and having a bit of trouble
understanding how to use unittest. So far, I have used testing
successfully -- as long as the report goes to stdout (or does unittest
write to stderr?)

The curses part of the program seems to affect unittest's writing of the
report. The screen is not what the report expects, so a lot of
information is in the wrong place after the program exits. (I actually wrap
the calls into the
curses library with curses.wrapper() in an attempt to restore the display
properly after the program exits -- to no avail. I guess the problem is
that unittest writes to the display while curses has control, not just
just afterwards.

How do I handle test reporting for a graphical (curses) application? I
would really like to read or capture the report on screen after the
program exits.

Many thanks,

Brian.
 
Reply With Quote
 
 
 
 
David M. Cooke
Guest
Posts: n/a
 
      02-20-2004
At some point, Brian <(E-Mail Removed)> wrote:

> Hello;
>
> I'm writing a program with curses in python and having a bit of trouble
> understanding how to use unittest. So far, I have used testing
> successfully -- as long as the report goes to stdout (or does unittest
> write to stderr?)


I'm interested: how are you unit testing curses routines? Are you
testing just the output routines, or are other non-curses routines
being called?

> The curses part of the program seems to affect unittest's writing of the
> report. The screen is not what the report expects, so a lot of
> information is in the wrong place after the program exits. (I actually wrap
> the calls into the
> curses library with curses.wrapper() in an attempt to restore the display
> properly after the program exits -- to no avail. I guess the problem is
> that unittest writes to the display while curses has control, not just
> just afterwards.


Right. Pain in the ass to debug that stuff too.

> How do I handle test reporting for a graphical (curses) application? I
> would really like to read or capture the report on screen after the
> program exits.


Probably setting sys.stdout and sys.stderr to your own file objects
would work before calling unittest.main(). Something like this would
give the output after it runs:

import sys
from cStringIO import StringIO
import unittest

....test cases...

if __name__ == '__main__':
old_stdout, old_stderr = sys.stdout, sys.stderr
sys.stdout = StringIO()
sys.stderr = StringIO()
unittest.main()
old_stdout.write(sys.stdout.getvalue())
old_stderr.write(sys.stderr.getvalue())

--
|>|\/|<
/--------------------------------------------------------------------------\
|David M. Cooke
|cookedm(at)physics(dot)mcmaster(dot)ca
 
Reply With Quote
 
 
 
 
Brian
Guest
Posts: n/a
 
      02-21-2004
On Fri, 20 Feb 2004 16:52:07 -0500, David M. Cooke wrote:


>> I'm writing a program with curses in python and having a bit of trouble
>> understanding how to use unittest. So far, I have used testing
>> successfully -- as long as the report goes to stdout (or does unittest
>> write to stderr?)

>
> I'm interested: how are you unit testing curses routines? Are you
> testing just the output routines, or are other non-curses routines being
> called?
>


Unfortunately, only the routines that did not involve the curses module were
easy to test. Judging from your message, I think you inferred this.
(Indeed, you seem to have lived it.)

However, I did build a dump-to-text feature into an object that wraps
all curses newwin objects. When <obj>.dumpCells() is called, a text record for
each cell in the newwin is generated. It looks something like this:

t 5 5 -acharset +abold ... (other attribute codes follow)
h 5 6 -acharset +abold ... (other attribute codes follow)
.... (other cell records follow)

With respect to the first record: "t" is the character at [y ,x] ==
[5,5]. It is not from the alternate
character set (-acharset). It is rendered in bold (+abold). Other
attributes follow the same pattern: +attrName for on and -attrName for
off. Foreground and background colour numbers (or names -- I can't
remember) appear at the end.

These human readable-records could be used to build test cases for the
screen outputs. I haven't done it yet, though. I imagine such a test
comparing the results of a call to .cellDump() to some stored (and
correct, hopefully) result in a file.

Brian.
 
Reply With Quote
 
David M. Cooke
Guest
Posts: n/a
 
      02-22-2004
At some point, Brian <(E-Mail Removed)> wrote:
> On Fri, 20 Feb 2004 16:52:07 -0500, David M. Cooke wrote:
>>> I'm writing a program with curses in python and having a bit of trouble
>>> understanding how to use unittest. So far, I have used testing
>>> successfully -- as long as the report goes to stdout (or does unittest
>>> write to stderr?)

>>
>> I'm interested: how are you unit testing curses routines? Are you
>> testing just the output routines, or are other non-curses routines being
>> called?

>
> Unfortunately, only the routines that did not involve the curses module were
> easy to test. Judging from your message, I think you inferred this.
> (Indeed, you seem to have lived it.)


Only recently -- I've been trying to port a DOS-era game written in
Turbo Pascal to run under Unix with ncurses. Debugging is a pain --
nevermind curses, but gdb doesn't work nicely with GNU Pascal.

> However, I did build a dump-to-text feature into an object that wraps
> all curses newwin objects. When <obj>.dumpCells() is called, a text record for
> each cell in the newwin is generated. It looks something like this:

[snip]
> These human readable-records could be used to build test cases for the
> screen outputs. I haven't done it yet, though. I imagine such a test
> comparing the results of a call to .cellDump() to some stored (and
> correct, hopefully) result in a file.


Good idea. You could make a 'screen painter' to mock up what the
screen should be, to make it easier to generate the correct screens.

--
|>|\/|<
/--------------------------------------------------------------------------\
|David M. Cooke
|cookedm(at)physics(dot)mcmaster(dot)ca
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: Replacing curses (Was: Re: Problem with curses and UTF-8) Jean-Paul Calderone Python 2 02-09-2006 08:29 AM
scripting a curses app Zebee Johnstone Perl Misc 2 03-03-2005 10:37 AM
Can't get curses to work in python Scott Chapman Python 0 10-08-2004 03:48 PM
Serious Python/Curses Wierdness Matthew Alton Python 0 09-18-2004 03:18 PM
curses and python (linux, debian) Guido Python 6 05-05-2004 07:10 AM



Advertisments