From 88b50074570a8abcdb5d64ffe18a68923c1b7a11 Mon Sep 17 00:00:00 2001
From: Florian Bruhin <git@the-compiler.org>
Date: Tue, 27 Feb 2018 12:54:11 +0100
Subject: [PATCH] Consolidate invalid :bind/:unbind tests

---
 tests/unit/config/test_configcommands.py | 67 +++++++++++-------------
 1 file changed, 30 insertions(+), 37 deletions(-)

diff --git a/tests/unit/config/test_configcommands.py b/tests/unit/config/test_configcommands.py
index 320eb2bd4..0e2427c06 100644
--- a/tests/unit/config/test_configcommands.py
+++ b/tests/unit/config/test_configcommands.py
@@ -19,6 +19,7 @@
 """Tests for qutebrowser.config.configcommands."""
 
 import logging
+import functools
 import unittest.mock
 
 import pytest
@@ -543,23 +544,39 @@ class TestBind:
         msg = message_mock.getmsg(usertypes.MessageLevel.info)
         assert msg.text == expected
 
-    def test_bind_invalid_mode(self, commands):
-        """Run ':bind --mode=wrongmode a nop'.
+    @pytest.mark.parametrize('command, args, kwargs, expected', [
+        # :bind --mode=wrongmode a nop
+        ('bind', ['a', 'nop'], {'mode': 'wrongmode'},
+         'Invalid mode wrongmode!'),
+        # :bind --mode=wrongmode a
+        ('bind', ['a'], {'mode': 'wrongmode'},
+         'Invalid mode wrongmode!'),
+        # :bind --default --mode=wrongmode a
+        ('bind', ['a'], {'mode': 'wrongmode', 'default': True},
+         'Invalid mode wrongmode!'),
+        # :bind --default foobar
+        ('bind', ['foobar'], {'default': True},
+         "Can't find binding 'foobar' in normal mode"),
+        # :unbind foobar
+        ('unbind', ['foobar'], {},
+         "Can't find binding 'foobar' in normal mode"),
+        # :unbind --mode=wrongmode x
+        ('unbind', ['x'], {'mode': 'wrongmode'},
+         'Invalid mode wrongmode!'),
+    ])
+    def test_bind_invalid(self, commands,
+                          command, args, kwargs, expected):
+        """Run various wrong :bind/:unbind invocations.
 
         Should show an error.
         """
-        with pytest.raises(cmdexc.CommandError,
-                           match='Invalid mode wrongmode!'):
-            commands.bind(0, 'a', 'nop', mode='wrongmode')
+        if command == 'bind':
+            func = functools.partial(commands.bind, 0)
+        elif command == 'unbind':
+            func = commands.unbind
 
-    def test_bind_print_invalid_mode(self, commands):
-        """Run ':bind --mode=wrongmode a'.
-
-        Should show an error.
-        """
-        with pytest.raises(cmdexc.CommandError,
-                           match='Invalid mode wrongmode!'):
-            commands.bind(0, 'a', mode='wrongmode')
+        with pytest.raises(cmdexc.CommandError, match=expected):
+            func(*args, **kwargs)
 
     @pytest.mark.parametrize('key', ['a', 'b', '<Ctrl-X>'])
     def test_bind_duplicate(self, commands, config_stub, key_config_stub, key):
@@ -596,18 +613,6 @@ class TestBind:
         command = key_config_stub.get_command(keyseq('a'), mode='normal')
         assert command == default_cmd
 
-    @pytest.mark.parametrize('key, mode, expected', [
-        ('foobar', 'normal', "Can't find binding 'foobar' in normal mode"),
-        ('x', 'wrongmode', "Invalid mode wrongmode!"),
-    ])
-    def test_bind_default_invalid(self, commands, key, mode, expected):
-        """Run ':bind --default foobar' / ':bind --default x wrongmode'.
-
-        Should show an error.
-        """
-        with pytest.raises(cmdexc.CommandError, match=expected):
-            commands.bind(0, key, mode=mode, default=True)
-
     def test_unbind_none(self, commands, config_stub):
         config_stub.val.bindings.commands = None
         commands.unbind('H')
@@ -641,15 +646,3 @@ class TestBind:
             assert normalized not in yaml_bindings
         else:
             assert yaml_bindings[normalized] is None
-
-    @pytest.mark.parametrize('key, mode, expected', [
-        ('foobar', 'normal', "Can't find binding 'foobar' in normal mode"),
-        ('x', 'wrongmode', "Invalid mode wrongmode!"),
-    ])
-    def test_unbind_invalid(self, commands, key, mode, expected):
-        """Run ':unbind foobar' / ':unbind x wrongmode'.
-
-        Should show an error.
-        """
-        with pytest.raises(cmdexc.CommandError, match=expected):
-            commands.unbind(key, mode=mode)