diff options
author | Georg Brandl <georg@python.org> | 2007-08-30 10:38:56 (GMT) |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2007-08-30 10:38:56 (GMT) |
commit | 27d9ee32abac7a580b1ffc980522535bdd20f09b (patch) | |
tree | 5ffc48061df1fcdb8e5b9792cf227d7530a28bf9 /Lib | |
parent | f11ed159f3c580c7b4d07dd1ce1d385f0efd9e09 (diff) | |
download | cpython-27d9ee32abac7a580b1ffc980522535bdd20f09b.zip cpython-27d9ee32abac7a580b1ffc980522535bdd20f09b.tar.gz cpython-27d9ee32abac7a580b1ffc980522535bdd20f09b.tar.bz2 |
Patch #1680959: add test suite for pipes module.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/pipes.py | 16 | ||||
-rwxr-xr-x | Lib/test/regrtest.py | 1 | ||||
-rw-r--r-- | Lib/test/test_pipes.py | 184 | ||||
-rw-r--r-- | Lib/test/test_sundry.py | 1 |
4 files changed, 185 insertions, 17 deletions
diff --git a/Lib/pipes.py b/Lib/pipes.py index 295d9c8..6dcc997 100644 --- a/Lib/pipes.py +++ b/Lib/pipes.py @@ -60,7 +60,6 @@ For an example, see the function test() at the end of the file. import re - import os import tempfile import string @@ -281,18 +280,3 @@ def quote(file): c = '\\' + c res = res + c return '"' + res + '"' - - -# Small test program and example - -def test(): - print 'Testing...' - t = Template() - t.append('togif $IN $OUT', 'ff') - t.append('giftoppm', '--') - t.append('ppmtogif >$OUT', '-f') - t.append('fromgif $IN $OUT', 'ff') - t.debug(1) - FILE = '/usr/local/images/rgb/rogues/guido.rgb' - t.copy(FILE, '@temp') - print 'Done.' diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py index a20ba15..99803ff 100755 --- a/Lib/test/regrtest.py +++ b/Lib/test/regrtest.py @@ -830,6 +830,7 @@ _expectations = { test_mhlib test_openpty test_ossaudiodev + test_pipes test_poll test_posix test_pty diff --git a/Lib/test/test_pipes.py b/Lib/test/test_pipes.py new file mode 100644 index 0000000..70d1ec2 --- /dev/null +++ b/Lib/test/test_pipes.py @@ -0,0 +1,184 @@ +import pipes +import os +import string +import unittest +from test.test_support import TESTFN, run_unittest, unlink + +TESTFN2 = TESTFN + "2" + +class SimplePipeTests(unittest.TestCase): + def tearDown(self): + for f in (TESTFN, TESTFN2): + unlink(f) + + def testSimplePipe1(self): + t = pipes.Template() + t.append('tr a-z A-Z', pipes.STDIN_STDOUT) + f = t.open(TESTFN, 'w') + f.write('hello world #1') + f.close() + self.assertEqual(open(TESTFN).read(), 'HELLO WORLD #1') + + def testSimplePipe2(self): + file(TESTFN, 'w').write('hello world #2') + t = pipes.Template() + t.append('tr a-z A-Z < $IN > $OUT', pipes.FILEIN_FILEOUT) + t.copy(TESTFN, TESTFN2) + self.assertEqual(open(TESTFN2).read(), 'HELLO WORLD #2') + + def testSimplePipe3(self): + file(TESTFN, 'w').write('hello world #2') + t = pipes.Template() + t.append('tr a-z A-Z < $IN', pipes.FILEIN_STDOUT) + self.assertEqual(t.open(TESTFN, 'r').read(), 'HELLO WORLD #2') + + def testEmptyPipeline1(self): + # copy through empty pipe + d = 'empty pipeline test COPY' + file(TESTFN, 'w').write(d) + file(TESTFN2, 'w').write('') + t=pipes.Template() + t.copy(TESTFN, TESTFN2) + self.assertEqual(open(TESTFN2).read(), d) + + def testEmptyPipeline2(self): + # read through empty pipe + d = 'empty pipeline test READ' + file(TESTFN, 'w').write(d) + t=pipes.Template() + self.assertEqual(t.open(TESTFN, 'r').read(), d) + + def testEmptyPipeline3(self): + # write through empty pipe + d = 'empty pipeline test WRITE' + t = pipes.Template() + t.open(TESTFN, 'w').write(d) + self.assertEqual(open(TESTFN).read(), d) + + def testQuoting(self): + safeunquoted = string.ascii_letters + string.digits + '!@%_-+=:,./' + unsafe = '"`$\\' + + self.assertEqual(pipes.quote(safeunquoted), safeunquoted) + self.assertEqual(pipes.quote('test file name'), "'test file name'") + for u in unsafe: + self.assertEqual(pipes.quote('test%sname' % u), + "'test%sname'" % u) + for u in unsafe: + self.assertEqual(pipes.quote("test%s'name'" % u), + '"test\\%s\'name\'"' % u) + + def testRepr(self): + t = pipes.Template() + self.assertEqual(repr(t), "<Template instance, steps=[]>") + t.append('tr a-z A-Z', pipes.STDIN_STDOUT) + self.assertEqual(repr(t), + "<Template instance, steps=[('tr a-z A-Z', '--')]>") + + def testSetDebug(self): + t = pipes.Template() + t.debug(False) + self.assertEqual(t.debugging, False) + t.debug(True) + self.assertEqual(t.debugging, True) + + def testReadOpenSink(self): + # check calling open('r') on a pipe ending with + # a sink raises ValueError + t = pipes.Template() + t.append('boguscmd', pipes.SINK) + self.assertRaises(ValueError, t.open, 'bogusfile', 'r') + + def testWriteOpenSource(self): + # check calling open('w') on a pipe ending with + # a source raises ValueError + t = pipes.Template() + t.prepend('boguscmd', pipes.SOURCE) + self.assertRaises(ValueError, t.open, 'bogusfile', 'w') + + def testBadAppendOptions(self): + t = pipes.Template() + + # try a non-string command + self.assertRaises(TypeError, t.append, 7, pipes.STDIN_STDOUT) + + # try a type that isn't recognized + self.assertRaises(ValueError, t.append, 'boguscmd', 'xx') + + # shouldn't be able to append a source + self.assertRaises(ValueError, t.append, 'boguscmd', pipes.SOURCE) + + # check appending two sinks + t = pipes.Template() + t.append('boguscmd', pipes.SINK) + self.assertRaises(ValueError, t.append, 'boguscmd', pipes.SINK) + + # command needing file input but with no $IN + t = pipes.Template() + self.assertRaises(ValueError, t.append, 'boguscmd $OUT', + pipes.FILEIN_FILEOUT) + t = pipes.Template() + self.assertRaises(ValueError, t.append, 'boguscmd', + pipes.FILEIN_STDOUT) + + # command needing file output but with no $OUT + t = pipes.Template() + self.assertRaises(ValueError, t.append, 'boguscmd $IN', + pipes.FILEIN_FILEOUT) + t = pipes.Template() + self.assertRaises(ValueError, t.append, 'boguscmd', + pipes.STDIN_FILEOUT) + + + def testBadPrependOptions(self): + t = pipes.Template() + + # try a non-string command + self.assertRaises(TypeError, t.prepend, 7, pipes.STDIN_STDOUT) + + # try a type that isn't recognized + self.assertRaises(ValueError, t.prepend, 'tr a-z A-Z', 'xx') + + # shouldn't be able to prepend a sink + self.assertRaises(ValueError, t.prepend, 'boguscmd', pipes.SINK) + + # check prepending two sources + t = pipes.Template() + t.prepend('boguscmd', pipes.SOURCE) + self.assertRaises(ValueError, t.prepend, 'boguscmd', pipes.SOURCE) + + # command needing file input but with no $IN + t = pipes.Template() + self.assertRaises(ValueError, t.prepend, 'boguscmd $OUT', + pipes.FILEIN_FILEOUT) + t = pipes.Template() + self.assertRaises(ValueError, t.prepend, 'boguscmd', + pipes.FILEIN_STDOUT) + + # command needing file output but with no $OUT + t = pipes.Template() + self.assertRaises(ValueError, t.prepend, 'boguscmd $IN', + pipes.FILEIN_FILEOUT) + t = pipes.Template() + self.assertRaises(ValueError, t.prepend, 'boguscmd', + pipes.STDIN_FILEOUT) + + def testBadOpenMode(self): + t = pipes.Template() + self.assertRaises(ValueError, t.open, 'bogusfile', 'x') + + def testClone(self): + t = pipes.Template() + t.append('tr a-z A-Z', pipes.STDIN_STDOUT) + + u = t.clone() + self.assertNotEqual(id(t), id(u)) + self.assertEqual(t.steps, u.steps) + self.assertNotEqual(id(t.steps), id(u.steps)) + self.assertEqual(t.debugging, u.debugging) + +def test_main(): + run_unittest(SimplePipeTests) + +if __name__ == "__main__": + test_main() diff --git a/Lib/test/test_sundry.py b/Lib/test/test_sundry.py index 7609385..dd1d2f6 100644 --- a/Lib/test/test_sundry.py +++ b/Lib/test/test_sundry.py @@ -89,7 +89,6 @@ with catch_warning(): import opcode import os2emxpath import pdb - import pipes import posixfile import pstats import py_compile |