PageRenderTime 253ms CodeModel.GetById 161ms app.highlight 4ms RepoModel.GetById 87ms app.codeStats 0ms

/Lib/test/test_popen.py

http://unladen-swallow.googlecode.com/
Python | 47 lines | 31 code | 6 blank | 10 comment | 3 complexity | 2a435d759eb5d2968bb6c6c6bc8cdc99 MD5 | raw file
 1#! /usr/bin/env python
 2"""Basic tests for os.popen()
 3
 4  Particularly useful for platforms that fake popen.
 5"""
 6
 7import unittest
 8from test import test_support
 9import os, sys
10
11# Test that command-lines get down as we expect.
12# To do this we execute:
13#    python -c "import sys;print sys.argv" {rest_of_commandline}
14# This results in Python being spawned and printing the sys.argv list.
15# We can then eval() the result of this, and see what each argv was.
16python = sys.executable
17if ' ' in python:
18    python = '"' + python + '"'     # quote embedded space for cmdline
19
20class PopenTest(unittest.TestCase):
21    def _do_test_commandline(self, cmdline, expected):
22        cmd = '%s -c "import sys;print sys.argv" %s' % (python, cmdline)
23        data = os.popen(cmd).read()
24        got = eval(data)[1:] # strip off argv[0]
25        self.assertEqual(got, expected)
26
27    def test_popen(self):
28        self.assertRaises(TypeError, os.popen)
29        self._do_test_commandline(
30            "foo bar",
31            ["foo", "bar"]
32        )
33        self._do_test_commandline(
34            'foo "spam and eggs" "silly walk"',
35            ["foo", "spam and eggs", "silly walk"]
36        )
37        self._do_test_commandline(
38            'foo "a \\"quoted\\" arg" bar',
39            ["foo", 'a "quoted" arg', "bar"]
40        )
41        test_support.reap_children()
42
43def test_main():
44    test_support.run_unittest(PopenTest)
45
46if __name__ == "__main__":
47    test_main()