blob: 1cd8b8b59cfd86fe1e275eac4b9ed11fb6b7d25a [file] [log] [blame]
Fred Drake4c81d602001-07-23 04:08:01 +00001'''
2 Tests for commands module
3 Nick Mathewson
4'''
5import unittest
6import os, tempfile, re
7
8from test_support import TestSkipped, run_unittest
9from commands import *
10
11# The module says:
12# "NB This only works (and is only relevant) for UNIX."
13#
14# Actually, getoutput should work on any platform with an os.popen, but
15# I'll take the comment as given, and skip this suite.
16
17if os.name != 'posix':
18 raise TestSkipped('Not posix; skipping test_commands')
19
20
21class CommandTests(unittest.TestCase):
22
23 def test_getoutput(self):
24 self.assertEquals(getoutput('echo xyzzy'), 'xyzzy')
25 self.assertEquals(getstatusoutput('echo xyzzy'), (0, 'xyzzy'))
26
27 # we use mktemp in the next line to get a filename which we
28 # _know_ won't exist. This is guaranteed to fail.
29 status, output = getstatusoutput('cat ' + tempfile.mktemp())
30 self.assertNotEquals(status, 0)
31
32 def test_getstatus(self):
33 # This pattern should match 'ls -ld /bin/ls' on any posix
34 # system, however perversely configured.
Guido van Rossumfa699122001-10-30 03:17:30 +000035 pat = r'''[l-]..x..x..x # It is executable. (May be a symlink.)
Fred Drake4c81d602001-07-23 04:08:01 +000036 \s+\d+ # It has some number of links.
37 \s+\w+\s+\w+ # It has a user and group, which may
38 # be named anything.
39 [^/]* # Skip the date.
40 /bin/ls # and end with the name of the file.
41 '''
42
43 self.assert_(re.match(pat, getstatus("/bin/ls"), re.VERBOSE))
44
Fred Drake2e2be372001-09-20 21:33:42 +000045
46def test_main():
47 run_unittest(CommandTests)
48
49
50if __name__ == "__main__":
51 test_main()