##// END OF EJS Templates
Delete irrelevant tests.
Itamar Turner-Trauring -
Show More
@@ -1,211 +1,189 b''
1 # encoding: utf-8
1 # encoding: utf-8
2 """
2 """
3 Tests for platutils.py
3 Tests for platutils.py
4 """
4 """
5
5
6 #-----------------------------------------------------------------------------
6 #-----------------------------------------------------------------------------
7 # Copyright (C) 2008-2011 The IPython Development Team
7 # Copyright (C) 2008-2011 The IPython Development Team
8 #
8 #
9 # Distributed under the terms of the BSD License. The full license is in
9 # Distributed under the terms of the BSD License. The full license is in
10 # the file COPYING, distributed as part of this software.
10 # the file COPYING, distributed as part of this software.
11 #-----------------------------------------------------------------------------
11 #-----------------------------------------------------------------------------
12
12
13 #-----------------------------------------------------------------------------
13 #-----------------------------------------------------------------------------
14 # Imports
14 # Imports
15 #-----------------------------------------------------------------------------
15 #-----------------------------------------------------------------------------
16
16
17 import sys
17 import sys
18 import os
18 import os
19 import time
19 import time
20 from _thread import interrupt_main # Py 3
20 from _thread import interrupt_main # Py 3
21 import threading
21 import threading
22 from unittest import SkipTest
22 from unittest import SkipTest
23
23
24 import nose.tools as nt
24 import nose.tools as nt
25
25
26 from IPython.utils.process import (find_cmd, FindCmdError, arg_split,
26 from IPython.utils.process import (find_cmd, FindCmdError, arg_split,
27 system, getoutput, getoutputerror,
27 system, getoutput, getoutputerror,
28 get_output_error_code)
28 get_output_error_code)
29 from IPython.utils.capture import capture_output
29 from IPython.utils.capture import capture_output
30 from IPython.testing import decorators as dec
30 from IPython.testing import decorators as dec
31 from IPython.testing import tools as tt
31 from IPython.testing import tools as tt
32
32
33 python = os.path.basename(sys.executable)
33 python = os.path.basename(sys.executable)
34
34
35 #-----------------------------------------------------------------------------
35 #-----------------------------------------------------------------------------
36 # Tests
36 # Tests
37 #-----------------------------------------------------------------------------
37 #-----------------------------------------------------------------------------
38
38
39
39
40 @dec.skip_win32
40 @dec.skip_win32
41 def test_find_cmd_ls():
41 def test_find_cmd_ls():
42 """Make sure we can find the full path to ls."""
42 """Make sure we can find the full path to ls."""
43 path = find_cmd('ls')
43 path = find_cmd('ls')
44 nt.assert_true(path.endswith('ls'))
44 nt.assert_true(path.endswith('ls'))
45
45
46
46
47 def has_pywin32():
47 def has_pywin32():
48 try:
48 try:
49 import win32api
49 import win32api
50 except ImportError:
50 except ImportError:
51 return False
51 return False
52 return True
52 return True
53
53
54
54
55 @dec.onlyif(has_pywin32, "This test requires win32api to run")
55 @dec.onlyif(has_pywin32, "This test requires win32api to run")
56 def test_find_cmd_pythonw():
56 def test_find_cmd_pythonw():
57 """Try to find pythonw on Windows."""
57 """Try to find pythonw on Windows."""
58 path = find_cmd('pythonw')
58 path = find_cmd('pythonw')
59 assert path.lower().endswith('pythonw.exe'), path
59 assert path.lower().endswith('pythonw.exe'), path
60
60
61
61
62 @dec.onlyif(lambda : sys.platform != 'win32' or has_pywin32(),
62 @dec.onlyif(lambda : sys.platform != 'win32' or has_pywin32(),
63 "This test runs on posix or in win32 with win32api installed")
63 "This test runs on posix or in win32 with win32api installed")
64 def test_find_cmd_fail():
64 def test_find_cmd_fail():
65 """Make sure that FindCmdError is raised if we can't find the cmd."""
65 """Make sure that FindCmdError is raised if we can't find the cmd."""
66 nt.assert_raises(FindCmdError,find_cmd,'asdfasdf')
66 nt.assert_raises(FindCmdError,find_cmd,'asdfasdf')
67
67
68
68
69 @dec.skip_win32
69 @dec.skip_win32
70 def test_arg_split():
70 def test_arg_split():
71 """Ensure that argument lines are correctly split like in a shell."""
71 """Ensure that argument lines are correctly split like in a shell."""
72 tests = [['hi', ['hi']],
72 tests = [['hi', ['hi']],
73 [u'hi', [u'hi']],
73 [u'hi', [u'hi']],
74 ['hello there', ['hello', 'there']],
74 ['hello there', ['hello', 'there']],
75 # \u01ce == \N{LATIN SMALL LETTER A WITH CARON}
75 # \u01ce == \N{LATIN SMALL LETTER A WITH CARON}
76 # Do not use \N because the tests crash with syntax error in
76 # Do not use \N because the tests crash with syntax error in
77 # some cases, for example windows python2.6.
77 # some cases, for example windows python2.6.
78 [u'h\u01cello', [u'h\u01cello']],
78 [u'h\u01cello', [u'h\u01cello']],
79 ['something "with quotes"', ['something', '"with quotes"']],
79 ['something "with quotes"', ['something', '"with quotes"']],
80 ]
80 ]
81 for argstr, argv in tests:
81 for argstr, argv in tests:
82 nt.assert_equal(arg_split(argstr), argv)
82 nt.assert_equal(arg_split(argstr), argv)
83
83
84 @dec.skip_if_not_win32
84 @dec.skip_if_not_win32
85 def test_arg_split_win32():
85 def test_arg_split_win32():
86 """Ensure that argument lines are correctly split like in a shell."""
86 """Ensure that argument lines are correctly split like in a shell."""
87 tests = [['hi', ['hi']],
87 tests = [['hi', ['hi']],
88 [u'hi', [u'hi']],
88 [u'hi', [u'hi']],
89 ['hello there', ['hello', 'there']],
89 ['hello there', ['hello', 'there']],
90 [u'h\u01cello', [u'h\u01cello']],
90 [u'h\u01cello', [u'h\u01cello']],
91 ['something "with quotes"', ['something', 'with quotes']],
91 ['something "with quotes"', ['something', 'with quotes']],
92 ]
92 ]
93 for argstr, argv in tests:
93 for argstr, argv in tests:
94 nt.assert_equal(arg_split(argstr), argv)
94 nt.assert_equal(arg_split(argstr), argv)
95
95
96
96
97 class SubProcessTestCase(tt.TempFileMixin):
97 class SubProcessTestCase(tt.TempFileMixin):
98 def setUp(self):
98 def setUp(self):
99 """Make a valid python temp file."""
99 """Make a valid python temp file."""
100 lines = [ "import sys",
100 lines = [ "import sys",
101 "print('on stdout', end='', file=sys.stdout)",
101 "print('on stdout', end='', file=sys.stdout)",
102 "print('on stderr', end='', file=sys.stderr)",
102 "print('on stderr', end='', file=sys.stderr)",
103 "sys.stdout.flush()",
103 "sys.stdout.flush()",
104 "sys.stderr.flush()"]
104 "sys.stderr.flush()"]
105 self.mktmp('\n'.join(lines))
105 self.mktmp('\n'.join(lines))
106
106
107 def test_system(self):
107 def test_system(self):
108 status = system('%s "%s"' % (python, self.fname))
108 status = system('%s "%s"' % (python, self.fname))
109 self.assertEqual(status, 0)
109 self.assertEqual(status, 0)
110
110
111 def test_system_quotes(self):
111 def test_system_quotes(self):
112 status = system('%s -c "import sys"' % python)
112 status = system('%s -c "import sys"' % python)
113 self.assertEqual(status, 0)
113 self.assertEqual(status, 0)
114
114
115 def assert_interrupts(self, command):
115 def assert_interrupts(self, command):
116 """
116 """
117 Interrupt a subprocess after a second.
117 Interrupt a subprocess after a second.
118 """
118 """
119 if threading.main_thread() != threading.current_thread():
119 if threading.main_thread() != threading.current_thread():
120 raise nt.SkipTest("Can't run this test if not in main thread.")
120 raise nt.SkipTest("Can't run this test if not in main thread.")
121
121
122 def interrupt():
122 def interrupt():
123 # Wait for subprocess to start:
123 # Wait for subprocess to start:
124 time.sleep(0.5)
124 time.sleep(0.5)
125 interrupt_main()
125 interrupt_main()
126
126
127 threading.Thread(target=interrupt).start()
127 threading.Thread(target=interrupt).start()
128 start = time.time()
128 start = time.time()
129 try:
129 try:
130 result = command()
130 result = command()
131 except KeyboardInterrupt:
131 except KeyboardInterrupt:
132 # Success!
132 # Success!
133 return
133 return
134 end = time.time()
134 end = time.time()
135 self.assertTrue(
135 self.assertTrue(
136 end - start < 2, "Process didn't die quickly: %s" % (end - start)
136 end - start < 2, "Process didn't die quickly: %s" % (end - start)
137 )
137 )
138 return result
138 return result
139
139
140 def test_system_interrupt(self):
140 def test_system_interrupt(self):
141 """
141 """
142 When interrupted in the way ipykernel interrupts IPython, the
142 When interrupted in the way ipykernel interrupts IPython, the
143 subprocess is interrupted.
143 subprocess is interrupted.
144 """
144 """
145 def command():
145 def command():
146 return system('%s -c "import time; time.sleep(5)"' % python)
146 return system('%s -c "import time; time.sleep(5)"' % python)
147
147
148 status = self.assert_interrupts(command)
148 status = self.assert_interrupts(command)
149 self.assertNotEqual(
149 self.assertNotEqual(
150 status, 0, "The process wasn't interrupted. Status: %s" % (status,)
150 status, 0, "The process wasn't interrupted. Status: %s" % (status,)
151 )
151 )
152
152
153 def test_stderr_while_stdout_open(self):
154 """
155 If lots of data is written to stderr while stdout is still open, enough
156 data to fill the pipe buffer in fact, the process still exits (i.e.
157 there is no deadlock).
158 """
159 with capture_output(display=False):
160 status = system(("%s -c \"import sys\nfor i in range(20000): " +
161 "sys.stderr.write('b' * 100)\"") % (python,))
162 self.assertEqual(status, 0)
163
164 def test_getoutput(self):
153 def test_getoutput(self):
165 out = getoutput('%s "%s"' % (python, self.fname))
154 out = getoutput('%s "%s"' % (python, self.fname))
166 # we can't rely on the order the line buffered streams are flushed
155 # we can't rely on the order the line buffered streams are flushed
167 try:
156 try:
168 self.assertEqual(out, 'on stderron stdout')
157 self.assertEqual(out, 'on stderron stdout')
169 except AssertionError:
158 except AssertionError:
170 self.assertEqual(out, 'on stdouton stderr')
159 self.assertEqual(out, 'on stdouton stderr')
171
160
172 def test_getoutput_interrupt(self):
173 """
174 When interrupted in the way ipykernel interrupts IPython, the
175 subprocess is interrupted.
176 """
177 raise SkipTest("This fails on POSIX too, revisit in future.")
178 def command():
179 return getoutput('%s -c "import time; time.sleep(5)"' % (python, ))
180
181 self.assert_interrupts(command)
182
183 def test_getoutput_quoted(self):
161 def test_getoutput_quoted(self):
184 out = getoutput('%s -c "print (1)"' % python)
162 out = getoutput('%s -c "print (1)"' % python)
185 self.assertEqual(out.strip(), '1')
163 self.assertEqual(out.strip(), '1')
186
164
187 #Invalid quoting on windows
165 #Invalid quoting on windows
188 @dec.skip_win32
166 @dec.skip_win32
189 def test_getoutput_quoted2(self):
167 def test_getoutput_quoted2(self):
190 out = getoutput("%s -c 'print (1)'" % python)
168 out = getoutput("%s -c 'print (1)'" % python)
191 self.assertEqual(out.strip(), '1')
169 self.assertEqual(out.strip(), '1')
192 out = getoutput("%s -c 'print (\"1\")'" % python)
170 out = getoutput("%s -c 'print (\"1\")'" % python)
193 self.assertEqual(out.strip(), '1')
171 self.assertEqual(out.strip(), '1')
194
172
195 def test_getoutput_error(self):
173 def test_getoutput_error(self):
196 out, err = getoutputerror('%s "%s"' % (python, self.fname))
174 out, err = getoutputerror('%s "%s"' % (python, self.fname))
197 self.assertEqual(out, 'on stdout')
175 self.assertEqual(out, 'on stdout')
198 self.assertEqual(err, 'on stderr')
176 self.assertEqual(err, 'on stderr')
199
177
200 def test_get_output_error_code(self):
178 def test_get_output_error_code(self):
201 quiet_exit = '%s -c "import sys; sys.exit(1)"' % python
179 quiet_exit = '%s -c "import sys; sys.exit(1)"' % python
202 out, err, code = get_output_error_code(quiet_exit)
180 out, err, code = get_output_error_code(quiet_exit)
203 self.assertEqual(out, '')
181 self.assertEqual(out, '')
204 self.assertEqual(err, '')
182 self.assertEqual(err, '')
205 self.assertEqual(code, 1)
183 self.assertEqual(code, 1)
206 out, err, code = get_output_error_code('%s "%s"' % (python, self.fname))
184 out, err, code = get_output_error_code('%s "%s"' % (python, self.fname))
207 self.assertEqual(out, 'on stdout')
185 self.assertEqual(out, 'on stdout')
208 self.assertEqual(err, 'on stderr')
186 self.assertEqual(err, 'on stderr')
209 self.assertEqual(code, 0)
187 self.assertEqual(code, 0)
210
188
211
189
General Comments 0
You need to be logged in to leave comments. Login now