~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to testbzr

  • Committer: Martin Pool
  • Date: 2005-04-28 09:26:28 UTC
  • Revision ID: mbp@sourcefrog.net-20050428092628-30826cc8aa874876
- provide for catching output from shell commands

Show diffs side-by-side

added added

removed removed

Lines of Context:
28
28
 
29
29
try:
30
30
    import shutil
31
 
    from subprocess import call, Popen
 
31
    from subprocess import call, Popen, PIPE
32
32
except ImportError, e:
33
33
    sys.stderr.write("testbzr: sorry, this test suite requires modules from python2.4\n"
34
34
                     + '    ' + str(e))
39
39
    pass
40
40
 
41
41
 
42
 
def runcmd(cmd, retcode=0):
 
42
def runcmd(cmd, retcode=0, catchstdout=False):
43
43
    """Run one command and check the return code.
44
44
 
 
45
    Returns a tuple of (stdout,stderr) strings.
 
46
 
45
47
    If a single string is based, it is split into words.
46
48
    For commands that are not simple space-separated words, please
47
49
    pass a list instead."""
52
54
    else:
53
55
        logfile.write('$ %r\n' % cmd)
54
56
    log_linenumber()
55
 
    actual_retcode = call(cmd, stdout=logfile, stderr=logfile)
 
57
 
 
58
    if catchstdout:
 
59
        stdout = PIPE
 
60
    else:
 
61
        stdout = logfile
 
62
        
 
63
    child = Popen(cmd, stdout=stdout, stderr=logfile)
 
64
    outd, errd = child.communicate()
 
65
 
 
66
    actual_retcode = child.wait()
 
67
    
56
68
    if retcode != actual_retcode:
57
69
        raise CommandFailed("test failed: %r returned %d, expected %d"
58
70
                            % (cmd, actual_retcode, retcode))
59
71
 
 
72
    return outd, errd
 
73
 
60
74
 
61
75
def progress(msg):
62
76
    print '* ' + msg
99
113
    # this should always identify something, if only "john@localhost"
100
114
    runcmd("bzr whoami")
101
115
    runcmd("bzr whoami --email")
 
116
    assert runcmd("bzr whoami --email", catchstdout=True)[0].count('@') == 1
102
117
 
103
118
    progress("invalid commands")
104
119
    runcmd("bzr pants", retcode=1)