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