summaryrefslogtreecommitdiff
path: root/tests/test_parsing.py
diff options
context:
space:
mode:
authorKevin Van Brunt <kmvanbrunt@gmail.com>2019-05-13 23:59:03 -0400
committerGitHub <noreply@github.com>2019-05-13 23:59:03 -0400
commit3ee97d121887d3055fc6326b1d9bc290f5235866 (patch)
treef5695aece2c4e6173513da3f436df73099b88c09 /tests/test_parsing.py
parentcbf0313306c99c02f3c503f60d70df4bda2cce64 (diff)
parent6c051808d83b75108c0549acbc97fe2201f8de63 (diff)
downloadcmd2-git-3ee97d121887d3055fc6326b1d9bc290f5235866.tar.gz
Merge pull request #676 from python-cmd2/pipe_chaining
Pipe chaining
Diffstat (limited to 'tests/test_parsing.py')
-rw-r--r--tests/test_parsing.py161
1 files changed, 143 insertions, 18 deletions
diff --git a/tests/test_parsing.py b/tests/test_parsing.py
index 09215804..de8d67af 100644
--- a/tests/test_parsing.py
+++ b/tests/test_parsing.py
@@ -11,7 +11,6 @@ import pytest
import cmd2
from cmd2 import constants, utils
-from cmd2.constants import MULTILINE_TERMINATOR
from cmd2.parsing import StatementParser, shlex_split
@pytest.fixture
@@ -46,7 +45,7 @@ def test_parse_empty_string(parser):
assert statement.multiline_command == ''
assert statement.terminator == ''
assert statement.suffix == ''
- assert statement.pipe_to == []
+ assert statement.pipe_to == ''
assert statement.output == ''
assert statement.output_to == ''
assert statement.command_and_args == line
@@ -63,7 +62,7 @@ def test_parse_empty_string_default(default_parser):
assert statement.multiline_command == ''
assert statement.terminator == ''
assert statement.suffix == ''
- assert statement.pipe_to == []
+ assert statement.pipe_to == ''
assert statement.output == ''
assert statement.output_to == ''
assert statement.command_and_args == line
@@ -130,7 +129,7 @@ def test_parse_single_word(parser, line):
assert statement.multiline_command == ''
assert statement.terminator == ''
assert statement.suffix == ''
- assert statement.pipe_to == []
+ assert statement.pipe_to == ''
assert statement.output == ''
assert statement.output_to == ''
assert statement.command_and_args == line
@@ -224,8 +223,8 @@ def test_parse_simple_pipe(parser, line):
assert statement.args == statement
assert statement.argv == ['simple']
assert not statement.arg_list
- assert statement.pipe_to == ['piped']
- assert statement.expanded_command_line == statement.command + ' | ' + ' '.join(statement.pipe_to)
+ assert statement.pipe_to == 'piped'
+ assert statement.expanded_command_line == statement.command + ' | ' + statement.pipe_to
def test_parse_double_pipe_is_not_a_pipe(parser):
line = 'double-pipe || is not a pipe'
@@ -247,7 +246,7 @@ def test_parse_complex_pipe(parser):
assert statement.arg_list == statement.argv[1:]
assert statement.terminator == '&'
assert statement.suffix == 'sufx'
- assert statement.pipe_to == ['piped']
+ assert statement.pipe_to == 'piped'
@pytest.mark.parametrize('line,output', [
('help > out.txt', '>'),
@@ -297,7 +296,7 @@ def test_parse_redirect_append(parser):
assert statement.output == '>>'
assert statement.output_to == '/tmp/afile.txt'
-def test_parse_pipe_and_redirect(parser):
+def test_parse_pipe_then_redirect(parser):
line = 'output into;sufx | pipethrume plz > afile.txt'
statement = parser.parse(line)
assert statement.command == 'output'
@@ -307,10 +306,136 @@ def test_parse_pipe_and_redirect(parser):
assert statement.arg_list == statement.argv[1:]
assert statement.terminator == ';'
assert statement.suffix == 'sufx'
- assert statement.pipe_to == ['pipethrume', 'plz', '>', 'afile.txt']
+ assert statement.pipe_to == 'pipethrume plz > afile.txt'
assert statement.output == ''
assert statement.output_to == ''
+def test_parse_multiple_pipes(parser):
+ line = 'output into;sufx | pipethrume plz | grep blah'
+ statement = parser.parse(line)
+ assert statement.command == 'output'
+ assert statement == 'into'
+ assert statement.args == statement
+ assert statement.argv == ['output', 'into']
+ assert statement.arg_list == statement.argv[1:]
+ assert statement.terminator == ';'
+ assert statement.suffix == 'sufx'
+ assert statement.pipe_to == 'pipethrume plz | grep blah'
+ assert statement.output == ''
+ assert statement.output_to == ''
+
+def test_redirect_then_pipe(parser):
+ line = 'help alias > file.txt | grep blah'
+ statement = parser.parse(line)
+ assert statement.command == 'help'
+ assert statement == 'alias'
+ assert statement.args == statement
+ assert statement.argv == ['help', 'alias']
+ assert statement.arg_list == statement.argv[1:]
+ assert statement.terminator == ''
+ assert statement.suffix == ''
+ assert statement.pipe_to == ''
+ assert statement.output == '>'
+ assert statement.output_to == 'file.txt'
+
+def test_append_then_pipe(parser):
+ line = 'help alias >> file.txt | grep blah'
+ statement = parser.parse(line)
+ assert statement.command == 'help'
+ assert statement == 'alias'
+ assert statement.args == statement
+ assert statement.argv == ['help', 'alias']
+ assert statement.arg_list == statement.argv[1:]
+ assert statement.terminator == ''
+ assert statement.suffix == ''
+ assert statement.pipe_to == ''
+ assert statement.output == '>>'
+ assert statement.output_to == 'file.txt'
+
+def test_append_then_redirect(parser):
+ line = 'help alias >> file.txt > file2.txt'
+ statement = parser.parse(line)
+ assert statement.command == 'help'
+ assert statement == 'alias'
+ assert statement.args == statement
+ assert statement.argv == ['help', 'alias']
+ assert statement.arg_list == statement.argv[1:]
+ assert statement.terminator == ''
+ assert statement.suffix == ''
+ assert statement.pipe_to == ''
+ assert statement.output == '>>'
+ assert statement.output_to == 'file.txt'
+
+def test_redirect_then_append(parser):
+ line = 'help alias > file.txt >> file2.txt'
+ statement = parser.parse(line)
+ assert statement.command == 'help'
+ assert statement == 'alias'
+ assert statement.args == statement
+ assert statement.argv == ['help', 'alias']
+ assert statement.arg_list == statement.argv[1:]
+ assert statement.terminator == ''
+ assert statement.suffix == ''
+ assert statement.pipe_to == ''
+ assert statement.output == '>'
+ assert statement.output_to == 'file.txt'
+
+def test_redirect_to_quoted_string(parser):
+ line = 'help alias > "file.txt"'
+ statement = parser.parse(line)
+ assert statement.command == 'help'
+ assert statement == 'alias'
+ assert statement.args == statement
+ assert statement.argv == ['help', 'alias']
+ assert statement.arg_list == statement.argv[1:]
+ assert statement.terminator == ''
+ assert statement.suffix == ''
+ assert statement.pipe_to == ''
+ assert statement.output == '>'
+ assert statement.output_to == '"file.txt"'
+
+def test_redirect_to_single_quoted_string(parser):
+ line = "help alias > 'file.txt'"
+ statement = parser.parse(line)
+ assert statement.command == 'help'
+ assert statement == 'alias'
+ assert statement.args == statement
+ assert statement.argv == ['help', 'alias']
+ assert statement.arg_list == statement.argv[1:]
+ assert statement.terminator == ''
+ assert statement.suffix == ''
+ assert statement.pipe_to == ''
+ assert statement.output == '>'
+ assert statement.output_to == "'file.txt'"
+
+def test_redirect_to_empty_quoted_string(parser):
+ line = 'help alias > ""'
+ statement = parser.parse(line)
+ assert statement.command == 'help'
+ assert statement == 'alias'
+ assert statement.args == statement
+ assert statement.argv == ['help', 'alias']
+ assert statement.arg_list == statement.argv[1:]
+ assert statement.terminator == ''
+ assert statement.suffix == ''
+ assert statement.pipe_to == ''
+ assert statement.output == '>'
+ assert statement.output_to == ''
+
+def test_redirect_to_empty_single_quoted_string(parser):
+ line = "help alias > ''"
+ statement = parser.parse(line)
+ assert statement.command == 'help'
+ assert statement == 'alias'
+ assert statement.args == statement
+ assert statement.argv == ['help', 'alias']
+ assert statement.arg_list == statement.argv[1:]
+ assert statement.terminator == ''
+ assert statement.suffix == ''
+ assert statement.pipe_to == ''
+ assert statement.output == '>'
+ assert statement.output_to == ''
+
def test_parse_output_to_paste_buffer(parser):
line = 'output to paste buffer >> '
statement = parser.parse(line)
@@ -516,7 +641,7 @@ def test_parse_alias_pipe(parser, line):
assert statement.command == 'help'
assert statement == ''
assert statement.args == statement
- assert statement.pipe_to == ['less']
+ assert statement.pipe_to == 'less'
@pytest.mark.parametrize('line', [
'helpalias;',
@@ -545,7 +670,7 @@ def test_parse_command_only_command_and_args(parser):
assert statement.raw == line
assert statement.terminator == ''
assert statement.suffix == ''
- assert statement.pipe_to == []
+ assert statement.pipe_to == ''
assert statement.output == ''
assert statement.output_to == ''
@@ -561,7 +686,7 @@ def test_parse_command_only_strips_line(parser):
assert statement.raw == line
assert statement.terminator == ''
assert statement.suffix == ''
- assert statement.pipe_to == []
+ assert statement.pipe_to == ''
assert statement.output == ''
assert statement.output_to == ''
@@ -577,7 +702,7 @@ def test_parse_command_only_expands_alias(parser):
assert statement.raw == line
assert statement.terminator == ''
assert statement.suffix == ''
- assert statement.pipe_to == []
+ assert statement.pipe_to == ''
assert statement.output == ''
assert statement.output_to == ''
@@ -594,7 +719,7 @@ def test_parse_command_only_expands_shortcuts(parser):
assert statement.multiline_command == ''
assert statement.terminator == ''
assert statement.suffix == ''
- assert statement.pipe_to == []
+ assert statement.pipe_to == ''
assert statement.output == ''
assert statement.output_to == ''
@@ -611,7 +736,7 @@ def test_parse_command_only_quoted_args(parser):
assert statement.multiline_command == ''
assert statement.terminator == ''
assert statement.suffix == ''
- assert statement.pipe_to == []
+ assert statement.pipe_to == ''
assert statement.output == ''
assert statement.output_to == ''
@@ -635,7 +760,7 @@ def test_parse_command_only_specialchars(parser, line, args):
assert statement.multiline_command == ''
assert statement.terminator == ''
assert statement.suffix == ''
- assert statement.pipe_to == []
+ assert statement.pipe_to == ''
assert statement.output == ''
assert statement.output_to == ''
@@ -664,7 +789,7 @@ def test_parse_command_only_empty(parser, line):
assert statement.multiline_command == ''
assert statement.terminator == ''
assert statement.suffix == ''
- assert statement.pipe_to == []
+ assert statement.pipe_to == ''
assert statement.output == ''
assert statement.output_to == ''
@@ -692,7 +817,7 @@ def test_statement_initialization():
assert statement.multiline_command == ''
assert statement.terminator == ''
assert statement.suffix == ''
- assert isinstance(statement.pipe_to, list)
+ assert isinstance(statement.pipe_to, str)
assert not statement.pipe_to
assert statement.output == ''
assert statement.output_to == ''