def test_subprocess(self): """Instead of the ``argv`` shortcut, subclasses can also use the ``subprocess`` helper manually. """ class Filter(ExternalTool): pass # Without stdin data self.popen.return_value.returncode = 0 self.popen.return_value.communicate.return_value = ['stdout', 'stderr'] out = StringIO() Filter.subprocess(['test'], out) assert out.getvalue() == 'stdout' self.popen.return_value.communicate.assert_called_with(None) # With stdin data self.popen.reset_mock() self.popen.return_value.returncode = 0 self.popen.return_value.communicate.return_value = ['stdout', 'stderr'] out = StringIO() Filter.subprocess(['test'], out, data='data') assert out.getvalue() == 'stdout' self.popen.return_value.communicate.assert_called_with('data') # With error self.popen.return_value.returncode = 1 self.popen.return_value.communicate.return_value = ['stdout', 'stderr'] assert_raises(FilterError, Filter.subprocess, ['test'], StringIO())
def test_subprocess(self): """Instead of the ``argv`` shortcut, subclasses can also use the ``subprocess`` helper manually. """ class Filter(ExternalTool): pass # Without stdin data self.popen.return_value.returncode = 0 self.popen.return_value.communicate.return_value = ['stdout', 'stderr'] out = StringIO() Filter.subprocess(['test'], out) assert out.getvalue() == 'stdout' self.popen.return_value.communicate.assert_called_with(None) # With stdin data self.popen.reset_mock() self.popen.return_value.returncode = 0 self.popen.return_value.communicate.return_value = ['stdout', 'stderr'] out = StringIO() Filter.subprocess(['test'], out, data='data') assert out.getvalue() == 'stdout' self.popen.return_value.communicate.assert_called_with('data') # With error self.popen.return_value.returncode = 1 self.popen.return_value.communicate.return_value = ['stdout', 'stderr'] assert_raises(FilterError, Filter.subprocess, ['test'], StringIO())
def test_output_moved(self): class Filter(ExternalTool): pass self.popen.return_value.returncode = 0 self.popen.return_value.communicate.return_value = ["stdout", "stderr"] # {output} creates an output # this test *moves* the file into the target location, and # tests the fix to issue #286 intercepted = {} def fake_output_file(argv, **kw): intercepted["filename"] = argv[0] with open(argv[0] + ".tmp", "w") as f: f.write("bat") import shutil shutil.move(argv[0] + ".tmp", argv[0]) return DEFAULT self.popen.side_effect = fake_output_file # We get the result we generated in the hook above out = StringIO() Filter.subprocess(["{output}"], out) assert out.getvalue() == "bat" # File has been deleted assert not os.path.exists(intercepted["filename"])
def test_input_var(self): """Test {input} variable.""" class Filter(ExternalTool): pass self.popen.return_value.returncode = 0 self.popen.return_value.communicate.return_value = [b"stdout", b"stderr"] # {input} creates an input file intercepted = {} def check_input_file(argv, **kw): intercepted["filename"] = argv[0] with open(argv[0], "r") as f: # File has been generated with input data assert f.read() == "foo" return DEFAULT self.popen.side_effect = check_input_file Filter.subprocess(["{input}"], StringIO(), data="foo") # No stdin was passed self.popen.return_value.communicate.assert_called_with(None) # File has been deleted assert not os.path.exists(intercepted["filename"]) # {input} requires input data assert_raises(ValueError, Filter.subprocess, ["{input}"], StringIO())
def test_output_moved(self): class Filter(ExternalTool): pass self.popen.return_value.returncode = 0 self.popen.return_value.communicate.return_value = ['stdout', 'stderr'] # {output} creates an output # this test *moves* the file into the target location, and # tests the fix to issue #286 intercepted = {} def fake_output_file(argv, **kw): intercepted['filename'] = argv[0] with open(argv[0] + '.tmp', 'w') as f: f.write('bat') import shutil shutil.move(argv[0] + '.tmp', argv[0]) return DEFAULT self.popen.side_effect = fake_output_file # We get the result we generated in the hook above out = StringIO() Filter.subprocess(['{output}'], out) assert out.getvalue() == 'bat' # File has been deleted assert not os.path.exists(intercepted['filename'])
def test_input_var(self): """Test {input} variable.""" class Filter(ExternalTool): pass self.popen.return_value.returncode = 0 self.popen.return_value.communicate.return_value = [ b'stdout', b'stderr' ] # {input} creates an input file intercepted = {} def check_input_file(argv, **kw): intercepted['filename'] = argv[0] with open(argv[0], 'r') as f: # File has been generated with input data assert f.read().decode('utf-8') == u'fooñ' return DEFAULT self.popen.side_effect = check_input_file Filter.subprocess(['{input}'], StringIO(), data=u'fooñ') # No stdin was passed self.popen.return_value.communicate.assert_called_with(None) # File has been deleted assert not os.path.exists(intercepted['filename']) # {input} requires input data assert_raises(ValueError, Filter.subprocess, ['{input}'], StringIO())
def test_output_var(self): class Filter(ExternalTool): pass self.popen.return_value.returncode = 0 self.popen.return_value.communicate.return_value = ['stdout', 'stderr'] # {input} creates an input file intercepted = {} def fake_output_file(argv, **kw): intercepted['filename'] = argv[0] with open(argv[0], 'w') as f: f.write('bat') return DEFAULT self.popen.side_effect = fake_output_file # We get the result we generated in the hook above out = StringIO() Filter.subprocess(['{output}'], out) assert out.getvalue() == 'bat' # File has been deleted assert not os.path.exists(intercepted['filename'])
def test_output_var(self): class Filter(ExternalTool): pass self.popen.return_value.returncode = 0 self.popen.return_value.communicate.return_value = ['stdout', 'stderr'] # {input} creates an input file intercepted = {} def fake_output_file(argv, **kw): intercepted['filename'] = argv[0] with open(argv[0], 'w') as f: f.write('bat') return DEFAULT self.popen.side_effect = fake_output_file # We get the result we generated in the hook above out = StringIO() Filter.subprocess(['{output}'], out) assert out.getvalue() == 'bat' # File has been deleted assert not os.path.exists(intercepted['filename'])
def test_output_var(self): class Filter(ExternalTool): pass self.popen.return_value.returncode = 0 self.popen.return_value.communicate.return_value = ["stdout", "stderr"] # {output} creates an output file intercepted = {} def fake_output_file(argv, **kw): intercepted["filename"] = argv[0] with open(argv[0], "w") as f: f.write("bat") return DEFAULT self.popen.side_effect = fake_output_file # We get the result we generated in the hook above out = StringIO() Filter.subprocess(["{output}"], out) assert out.getvalue() == "bat" # File has been deleted assert not os.path.exists(intercepted["filename"])