143
143
self._check('foo', None, None, ['bar', 'baz'], ['bar', '<foo', 'baz'])
145
145
def test_output_redirection(self):
146
self._check(None, 'foo', 'wb+', [], ['>foo'])
147
self._check(None, 'foo', 'wb+', ['bar'], ['bar', '>foo'])
148
self._check(None, 'foo', 'wb+', ['bar'], ['bar', '>', 'foo'])
149
self._check(None, 'foo', 'ab+', [], ['>>foo'])
150
self._check(None, 'foo', 'ab+', ['bar'], ['bar', '>>foo'])
151
self._check(None, 'foo', 'ab+', ['bar'], ['bar', '>>', 'foo'])
146
self._check(None, 'foo', 'w+', [], ['>foo'])
147
self._check(None, 'foo', 'w+', ['bar'], ['bar', '>foo'])
148
self._check(None, 'foo', 'w+', ['bar'], ['bar', '>', 'foo'])
149
self._check(None, 'foo', 'a+', [], ['>>foo'])
150
self._check(None, 'foo', 'a+', ['bar'], ['bar', '>>foo'])
151
self._check(None, 'foo', 'a+', ['bar'], ['bar', '>>', 'foo'])
153
153
def test_redirection_syntax_errors(self):
154
154
self._check('', None, None, [], ['<'])
155
self._check(None, '', 'wb+', [], ['>'])
156
self._check(None, '', 'ab+', [], ['>>'])
157
self._check('>', '', 'ab+', [], ['<', '>', '>>'])
155
self._check(None, '', 'w+', [], ['>'])
156
self._check(None, '', 'a+', [], ['>>'])
157
self._check('>', '', 'a+', [], ['<', '>', '>>'])
323
323
def test_cat_input_to_file(self):
324
324
retcode, out, err = self.run_command(['cat', '>file'],
325
325
'content\n', None, None)
326
self.assertFileEqual('content\n', 'file')
326
self.assertFileEqual(b'content\n', 'file')
327
327
self.assertEqual(None, out)
328
328
self.assertEqual(None, err)
329
329
retcode, out, err = self.run_command(['cat', '>>file'],
330
330
'more\n', None, None)
331
self.assertFileEqual('content\nmore\n', 'file')
331
self.assertFileEqual(b'content\nmore\n', 'file')
332
332
self.assertEqual(None, out)
333
333
self.assertEqual(None, err)
336
336
self.build_tree_contents([('file', b'content\n')])
337
337
retcode, out, err = self.run_command(['cat', 'file', '>file2'],
338
338
None, None, None)
339
self.assertFileEqual('content\n', 'file2')
339
self.assertFileEqual(b'content\n', 'file2')
341
341
def test_cat_files_to_file(self):
342
342
self.build_tree_contents([('cat', b'cat\n')])
343
343
self.build_tree_contents([('dog', b'dog\n')])
344
344
retcode, out, err = self.run_command(['cat', 'cat', 'dog', '>file'],
345
345
None, None, None)
346
self.assertFileEqual('cat\ndog\n', 'file')
346
self.assertFileEqual(b'cat\ndog\n', 'file')
348
348
def test_cat_bogus_input_file(self):
349
349
self.run_script("""
456
456
None, None, None)
457
457
self.assertEqual(None, out)
458
458
self.assertEqual(None, err)
459
self.assertFileEqual('hello\n', 'file')
459
self.assertFileEqual(b'hello\n', 'file')
460
460
retcode, out, err = self.run_command(['echo', 'happy', '>>file'],
461
461
None, None, None)
462
462
self.assertEqual(None, out)
463
463
self.assertEqual(None, err)
464
self.assertFileEqual('hello\nhappy\n', 'file')
464
self.assertFileEqual(b'hello\nhappy\n', 'file')
466
466
def test_empty_line_in_output_is_respected(self):
467
467
self.run_script("""