summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmd2/cmd2.py2
-rw-r--r--tests/test_cmd2.py125
2 files changed, 103 insertions, 24 deletions
diff --git a/cmd2/cmd2.py b/cmd2/cmd2.py
index bc4b9c8c..4fceab87 100644
--- a/cmd2/cmd2.py
+++ b/cmd2/cmd2.py
@@ -2477,7 +2477,7 @@ class Cmd(cmd.Cmd):
for cur_arg in macros_to_delete:
if cur_arg in self.macros:
del self.macros[cur_arg]
- self.poutput("Macro {!r} cleared".format(cur_arg))
+ self.poutput("Macro {!r} deleted".format(cur_arg))
else:
self.perror("Macro {!r} does not exist".format(cur_arg), traceback_war=False)
diff --git a/tests/test_cmd2.py b/tests/test_cmd2.py
index f1280f9e..9665baeb 100644
--- a/tests/test_cmd2.py
+++ b/tests/test_cmd2.py
@@ -1765,6 +1765,20 @@ def test_poutput_color_never(base_app):
assert out == expected
+# These are invalid targets for aliases and macros
+invalid_alias_and_macro_targets = [
+ '""', # Blank name
+ '">"',
+ '"no>pe"',
+ '"no spaces"',
+ '"nopipe|"',
+ '"noterm;"',
+ 'noembedded"quotes',
+]
+
+# These are invalid names for aliases and macros
+invalid_alias_and_macro_names = invalid_alias_and_macro_targets + ['!no_shortcut']
+
def test_get_alias_names(base_app):
assert len(base_app.aliases) == 0
run_cmd(base_app, 'alias create fake pyscript')
@@ -1806,16 +1820,7 @@ def test_alias_create_with_quotes(base_app, capsys):
out = run_cmd(base_app, 'alias list fake')
assert out == normalize('alias create fake help > "out file.txt"')
-@pytest.mark.parametrize('alias_name', [
- '""', # Blank name
- '!no_shortcut',
- '">"',
- '"no>pe"',
- '"no spaces"',
- '"nopipe|"',
- '"noterm;"',
- 'noembedded"quotes',
-])
+@pytest.mark.parametrize('alias_name', invalid_alias_and_macro_names)
def test_alias_create_invalid_name(base_app, alias_name, capsys):
run_cmd(base_app, 'alias create {} help'.format(alias_name))
out, err = capsys.readouterr()
@@ -1826,18 +1831,10 @@ def test_alias_create_with_macro_name(base_app, capsys):
run_cmd(base_app, 'macro create {} help'.format(macro))
run_cmd(base_app, 'alias create {} help'.format(macro))
out, err = capsys.readouterr()
- assert "cannot have the same name" in err
+ assert "Aliases cannot have the same name" in err
-@pytest.mark.parametrize('alias_target', [
- '""', # Blank name
- '">"',
- '"no>pe"',
- '"no spaces"',
- '"nopipe|"',
- '"noterm;"',
- 'noembedded"quotes',
-])
-def test_alias_create_with_invalid_command(base_app, alias_target, capsys):
+@pytest.mark.parametrize('alias_target', invalid_alias_and_macro_targets)
+def test_alias_create_with_invalid_target(base_app, alias_target, capsys):
run_cmd(base_app, 'alias create my_alias {}'.format(alias_target))
out, err = capsys.readouterr()
assert "Invalid alias target" in err
@@ -1846,7 +1843,7 @@ def test_alias_list_invalid_alias(base_app, capsys):
# Look up invalid alias
out = run_cmd(base_app, 'alias list invalid')
out, err = capsys.readouterr()
- assert "not found" in err
+ assert "Alias 'invalid' not found" in err
def test_alias_delete(base_app):
# Create an alias
@@ -1863,7 +1860,7 @@ def test_alias_delete_all(base_app):
def test_alias_delete_non_existing(base_app, capsys):
run_cmd(base_app, 'alias delete fake')
out, err = capsys.readouterr()
- assert "does not exist" in err
+ assert "Alias 'fake' does not exist" in err
def test_multiple_aliases(base_app):
alias1 = 'h1'
@@ -1878,6 +1875,88 @@ def test_multiple_aliases(base_app):
expected = normalize(BASE_HELP_VERBOSE)
assert out == expected
+def test_macro_create(base_app, capsys):
+ # Create the macro
+ out = run_cmd(base_app, 'macro create fake pyscript')
+ assert out == normalize("Macro 'fake' created")
+
+ # Use the macro
+ run_cmd(base_app, 'fake')
+ out, err = capsys.readouterr()
+ assert "pyscript command requires at least 1 argument" in err
+
+ # See a list of macros
+ out = run_cmd(base_app, 'macro list')
+ assert out == normalize('macro create fake pyscript')
+
+ # Look up the new macro
+ out = run_cmd(base_app, 'macro list fake')
+ assert out == normalize('macro create fake pyscript')
+
+def test_macro_create_with_quotes(base_app, capsys):
+ # Create the macro
+ out = run_cmd(base_app, 'macro create fake help ">" "out file.txt"')
+ assert out == normalize("Macro 'fake' created")
+
+ # Look up the new macro (Only the redirector should be unquoted)
+ out = run_cmd(base_app, 'macro list fake')
+ assert out == normalize('macro create fake help > "out file.txt"')
+
+@pytest.mark.parametrize('macro_name', invalid_alias_and_macro_names)
+def test_macro_create_invalid_name(base_app, macro_name, capsys):
+ run_cmd(base_app, 'macro create {} help'.format(macro_name))
+ out, err = capsys.readouterr()
+ assert "Invalid macro name" in err
+
+def test_macro_create_with_alias_name(base_app, capsys):
+ macro = "my_macro"
+ run_cmd(base_app, 'alias create {} help'.format(macro))
+ run_cmd(base_app, 'macro create {} help'.format(macro))
+ out, err = capsys.readouterr()
+ assert "Macros cannot have the same name" in err
+
+@pytest.mark.parametrize('macro_target', invalid_alias_and_macro_targets)
+def test_macro_create_with_invalid_target(base_app, macro_target, capsys):
+ run_cmd(base_app, 'macro create my_macro {}'.format(macro_target))
+ out, err = capsys.readouterr()
+ assert "Invalid macro target" in err
+
+def test_macro_list_invalid_macro(base_app, capsys):
+ # Look up invalid macro
+ out = run_cmd(base_app, 'macro list invalid')
+ out, err = capsys.readouterr()
+ assert "Macro 'invalid' not found" in err
+
+def test_macro_delete(base_app):
+ # Create an macro
+ run_cmd(base_app, 'macro create fake pyscript')
+
+ # Delete the macro
+ out = run_cmd(base_app, 'macro delete fake')
+ assert out == normalize("Macro 'fake' deleted")
+
+def test_macro_delete_all(base_app):
+ out = run_cmd(base_app, 'macro delete --all')
+ assert out == normalize("All macros deleted")
+
+def test_macro_delete_non_existing(base_app, capsys):
+ run_cmd(base_app, 'macro delete fake')
+ out, err = capsys.readouterr()
+ assert "Macro 'fake' does not exist" in err
+
+def test_multiple_macros(base_app):
+ macro1 = 'h1'
+ macro2 = 'h2'
+ run_cmd(base_app, 'macro create {} help'.format(macro1))
+ run_cmd(base_app, 'macro create {} help -v'.format(macro2))
+ out = run_cmd(base_app, macro1)
+ expected = normalize(BASE_HELP)
+ assert out == expected
+
+ out = run_cmd(base_app, macro2)
+ expected = normalize(BASE_HELP_VERBOSE)
+ assert out == expected
+
def test_ppaged(base_app):
msg = 'testing...'