hmmm, something say like:

def unittests():
    """
    test the ability to run unittests
    """
    import os
    import sys
    import glob
    import cStringIO

    from gluon.shell import env

    #save stdout so we can capture data and reset it.
    stdout = sys.stdout
    stderr = sys.stderr

    #get a list of the modules to test
    cdir = os.path.join('applications', request.application, 'tests')
    if not os.path.isdir(cdir):
        die(errmsg)
    files = glob.glob(os.path.join(cdir, '*.py'))


    html = ''
    test_count = 0
    pass_count = 0
    fail_count = 0
    for testfile in files:
        test_count += 1
        html += '<h2>Running Test "%s.py" ... done.</h2><br/>\n' % testfile
        # Reload environment before each test.
        globs = env(request.application, c='default', f='index',
                    import_models=True, extra_request={'test_db':True})

        sys.stdout = cStringIO.StringIO()
        execfile(testfile, globs)
        report = sys.stdout.getvalue().strip()
        if report.find('FAIL') >= 0:
            fail_count += 1
            html += '<h3 class="failed">FAILED</h3>\n'
            html += CODE(report, language='web2py', \
                         link='/examples/global/vars/').xml()
        else:
            pass_count += 1
            html += '<h3 class="passed">PASSED</h3>\n'

                    
    sys.stdout = stdout

    return dict(html=XML(html),
                test_count = test_count,
                pass_count = pass_count,
                fail_count = fail_count)

I'm in the process of creating some functions that will allow me to run some 
doctests and unittests from the browser on google app engine.  the above is 
the start of my method for unit testing.  i think it basically does what 
bruno suggests, but just not in an interactive shell environment.

i'll post a slice when i get my testing tools together.

christian

Reply via email to