~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to testbzr

  • Committer: Martin Pool
  • Date: 2005-04-28 09:34:49 UTC
  • Revision ID: mbp@sourcefrog.net-20050428093449-527fde04df3bcb29
testbzr: new backtick() helper

Show diffs side-by-side

added added

removed removed

Lines of Context:
39
39
    pass
40
40
 
41
41
 
42
 
def runcmd(cmd, retcode=0, catchstdout=False):
 
42
def formcmd(cmd):
 
43
    if isinstance(cmd, basestring):
 
44
        logfile.write('$ %s\n' % cmd)
 
45
        cmd = cmd.split()
 
46
    else:
 
47
        logfile.write('$ %r\n' % cmd)
 
48
 
 
49
    return cmd
 
50
 
 
51
 
 
52
def runcmd(cmd, retcode=0):
43
53
    """Run one command and check the return code.
44
54
 
45
55
    Returns a tuple of (stdout,stderr) strings.
47
57
    If a single string is based, it is split into words.
48
58
    For commands that are not simple space-separated words, please
49
59
    pass a list instead."""
50
 
    
51
 
    if isinstance(cmd, basestring):
52
 
        logfile.write('$ %s\n' % cmd)
53
 
        cmd = cmd.split()
54
 
    else:
55
 
        logfile.write('$ %r\n' % cmd)
56
 
    log_linenumber()
57
 
 
58
 
    if catchstdout:
59
 
        stdout = PIPE
60
 
    else:
61
 
        stdout = logfile
62
 
        
63
 
    child = Popen(cmd, stdout=stdout, stderr=logfile)
 
60
    cmd = formcmd(cmd)
 
61
    log_linenumber()
 
62
    
 
63
    actual_retcode = call(cmd, stdout=logfile, stderr=logfile)
 
64
    
 
65
    if retcode != actual_retcode:
 
66
        raise CommandFailed("test failed: %r returned %d, expected %d"
 
67
                            % (cmd, actual_retcode, retcode))
 
68
 
 
69
 
 
70
 
 
71
def backtick(cmd, retcode=0):
 
72
    cmd = formcmd(cmd)
 
73
    log_linenumber()
 
74
    child = Popen(cmd, stdout=PIPE, stderr=logfile)
64
75
    outd, errd = child.communicate()
65
 
 
 
76
    logfile.write(outd)
66
77
    actual_retcode = child.wait()
67
78
    
68
79
    if retcode != actual_retcode:
69
80
        raise CommandFailed("test failed: %r returned %d, expected %d"
70
81
                            % (cmd, actual_retcode, retcode))
71
82
 
72
 
    return outd, errd
 
83
    return outd
 
84
 
73
85
 
74
86
 
75
87
def progress(msg):
113
125
    # this should always identify something, if only "john@localhost"
114
126
    runcmd("bzr whoami")
115
127
    runcmd("bzr whoami --email")
116
 
    assert runcmd("bzr whoami --email", catchstdout=True)[0].count('@') == 1
 
128
    assert backtick("bzr whoami --email").count('@') == 1
117
129
 
118
130
    progress("invalid commands")
119
131
    runcmd("bzr pants", retcode=1)
128
140
    f.write('hello world!\n')
129
141
    f.close()
130
142
 
131
 
    
 
143
    unknowns = backtick("bzr unknowns").rstrip('\r\n')
 
144
    assert unknowns == 'test.txt'
132
145
 
133
146
    cd('..')
134
147
 
136
149
except Exception, e:
137
150
    sys.stderr.write('*' * 50 + '\n'
138
151
                     + 'testbzr: tests failed\n'
139
 
                     + 'see bzr-test.log for more information\n'
 
152
                     + 'see testbzr.log for more information\n'
140
153
                     + '*' * 50 + '\n')
141
154
    logfile.write('tests failed!\n')
142
155
    traceback.print_exc(None, logfile)