summaryrefslogtreecommitdiffstats
path: root/gitlint/tests/test_options.py
diff options
context:
space:
mode:
Diffstat (limited to 'gitlint/tests/test_options.py')
-rw-r--r--gitlint/tests/test_options.py122
1 files changed, 84 insertions, 38 deletions
diff --git a/gitlint/tests/test_options.py b/gitlint/tests/test_options.py
index 2c17226..68f0f8c 100644
--- a/gitlint/tests/test_options.py
+++ b/gitlint/tests/test_options.py
@@ -1,42 +1,51 @@
# -*- coding: utf-8 -*-
import os
+import re
from gitlint.tests.base import BaseTestCase
-from gitlint.options import IntOption, BoolOption, StrOption, ListOption, PathOption, RuleOptionError
+from gitlint.options import IntOption, BoolOption, StrOption, ListOption, PathOption, RegexOption, RuleOptionError
class RuleOptionTests(BaseTestCase):
def test_option_equality(self):
- # 2 options are equal if their name, value and description match
- option1 = IntOption("test-option", 123, u"Test Dëscription")
- option2 = IntOption("test-option", 123, u"Test Dëscription")
- self.assertEqual(option1, option2)
-
- # Not equal: name, description, value are different
- self.assertNotEqual(option1, IntOption("test-option1", 123, u"Test Dëscription"))
- self.assertNotEqual(option1, IntOption("test-option", 1234, u"Test Dëscription"))
- self.assertNotEqual(option1, IntOption("test-option", 123, u"Test Dëscription2"))
+ options = {IntOption: 123, StrOption: u"foöbar", BoolOption: False, ListOption: ["a", "b"],
+ PathOption: ".", RegexOption: u"^foöbar(.*)"}
+ for clazz, val in options.items():
+ # 2 options are equal if their name, value and description match
+ option1 = clazz(u"test-öption", val, u"Test Dëscription")
+ option2 = clazz(u"test-öption", val, u"Test Dëscription")
+ self.assertEqual(option1, option2)
+
+ # Not equal: class, name, description, value are different
+ self.assertNotEqual(option1, IntOption(u"tëst-option1", 123, u"Test Dëscription"))
+ self.assertNotEqual(option1, StrOption(u"tëst-option1", u"åbc", u"Test Dëscription"))
+ self.assertNotEqual(option1, StrOption(u"tëst-option", u"åbcd", u"Test Dëscription"))
+ self.assertNotEqual(option1, StrOption(u"tëst-option", u"åbc", u"Test Dëscription2"))
def test_int_option(self):
# normal behavior
- option = IntOption("test-name", 123, "Test Description")
+ option = IntOption(u"tëst-name", 123, u"Tëst Description")
+ self.assertEqual(option.name, u"tëst-name")
+ self.assertEqual(option.description, u"Tëst Description")
self.assertEqual(option.value, 123)
- self.assertEqual(option.name, "test-name")
- self.assertEqual(option.description, "Test Description")
# re-set value
option.set(456)
self.assertEqual(option.value, 456)
+ # set to None
+ option.set(None)
+ self.assertEqual(option.value, None)
+
# error on negative int when not allowed
- expected_error = u"Option 'test-name' must be a positive integer (current value: '-123')"
- with self.assertRaisesRegex(RuleOptionError, expected_error):
+ expected_error = u"Option 'tëst-name' must be a positive integer (current value: '-123')"
+ with self.assertRaisesMessage(RuleOptionError, expected_error):
option.set(-123)
# error on non-int value
- expected_error = u"Option 'test-name' must be a positive integer (current value: 'foo')"
- with self.assertRaisesRegex(RuleOptionError, expected_error):
+ expected_error = u"Option 'tëst-name' must be a positive integer (current value: 'foo')"
+ with self.assertRaisesMessage(RuleOptionError, expected_error):
option.set("foo")
# no error on negative value when allowed and negative int is passed
@@ -46,15 +55,15 @@ class RuleOptionTests(BaseTestCase):
# error on non-int value when negative int is allowed
expected_error = u"Option 'test-name' must be an integer (current value: 'foo')"
- with self.assertRaisesRegex(RuleOptionError, expected_error):
+ with self.assertRaisesMessage(RuleOptionError, expected_error):
option.set("foo")
def test_str_option(self):
# normal behavior
- option = StrOption("test-name", u"föo", "Test Description")
+ option = StrOption(u"tëst-name", u"föo", u"Tëst Description")
+ self.assertEqual(option.name, u"tëst-name")
+ self.assertEqual(option.description, u"Tëst Description")
self.assertEqual(option.value, u"föo")
- self.assertEqual(option.name, "test-name")
- self.assertEqual(option.description, "Test Description")
# re-set value
option.set(u"bår")
@@ -68,9 +77,15 @@ class RuleOptionTests(BaseTestCase):
option.set(-123)
self.assertEqual(option.value, "-123")
+ # None value
+ option.set(None)
+ self.assertEqual(option.value, None)
+
def test_boolean_option(self):
# normal behavior
- option = BoolOption("test-name", "true", "Test Description")
+ option = BoolOption(u"tëst-name", "true", u"Tëst Description")
+ self.assertEqual(option.name, u"tëst-name")
+ self.assertEqual(option.description, u"Tëst Description")
self.assertEqual(option.value, True)
# re-set value
@@ -82,14 +97,16 @@ class RuleOptionTests(BaseTestCase):
self.assertEqual(option.value, True)
# error on incorrect value
- incorrect_values = [1, -1, "foo", u"bår", ["foo"], {'foo': "bar"}]
+ incorrect_values = [1, -1, "foo", u"bår", ["foo"], {'foo': "bar"}, None]
for value in incorrect_values:
- with self.assertRaisesRegex(RuleOptionError, "Option 'test-name' must be either 'true' or 'false'"):
+ with self.assertRaisesMessage(RuleOptionError, u"Option 'tëst-name' must be either 'true' or 'false'"):
option.set(value)
def test_list_option(self):
# normal behavior
- option = ListOption("test-name", u"å,b,c,d", "Test Description")
+ option = ListOption(u"tëst-name", u"å,b,c,d", u"Tëst Description")
+ self.assertEqual(option.name, u"tëst-name")
+ self.assertEqual(option.description, u"Tëst Description")
self.assertListEqual(option.value, [u"å", u"b", u"c", u"d"])
# re-set value
@@ -100,6 +117,10 @@ class RuleOptionTests(BaseTestCase):
option.set([u"foo", u"bår", u"test"])
self.assertListEqual(option.value, [u"foo", u"bår", u"test"])
+ # None
+ option.set(None)
+ self.assertIsNone(option.value)
+
# empty string
option.set("")
self.assertListEqual(option.value, [])
@@ -129,40 +150,44 @@ class RuleOptionTests(BaseTestCase):
self.assertListEqual(option.value, ["123"])
def test_path_option(self):
- option = PathOption("test-directory", ".", u"Test Description", type=u"dir")
+ option = PathOption(u"tëst-directory", ".", u"Tëst Description", type=u"dir")
+ self.assertEqual(option.name, u"tëst-directory")
+ self.assertEqual(option.description, u"Tëst Description")
self.assertEqual(option.value, os.getcwd())
- self.assertEqual(option.name, "test-directory")
- self.assertEqual(option.description, u"Test Description")
self.assertEqual(option.type, u"dir")
# re-set value
option.set(self.SAMPLES_DIR)
self.assertEqual(option.value, self.SAMPLES_DIR)
+ # set to None
+ option.set(None)
+ self.assertIsNone(option.value)
+
# set to int
- expected = u"Option test-directory must be an existing directory (current value: '1234')"
- with self.assertRaisesRegex(RuleOptionError, expected):
+ expected = u"Option tëst-directory must be an existing directory (current value: '1234')"
+ with self.assertRaisesMessage(RuleOptionError, expected):
option.set(1234)
# set to non-existing directory
non_existing_path = os.path.join(u"/föo", u"bar")
- expected = u"Option test-directory must be an existing directory (current value: '{0}')"
- with self.assertRaisesRegex(RuleOptionError, expected.format(non_existing_path)):
+ expected = u"Option tëst-directory must be an existing directory (current value: '{0}')"
+ with self.assertRaisesMessage(RuleOptionError, expected.format(non_existing_path)):
option.set(non_existing_path)
# set to a file, should raise exception since option.type = dir
sample_path = self.get_sample_path(os.path.join("commit_message", "sample1"))
- expected = u"Option test-directory must be an existing directory (current value: '{0}')".format(sample_path)
- with self.assertRaisesRegex(RuleOptionError, expected):
+ expected = u"Option tëst-directory must be an existing directory (current value: '{0}')".format(sample_path)
+ with self.assertRaisesMessage(RuleOptionError, expected):
option.set(sample_path)
# set option.type = file, file should now be accepted, directories not
option.type = u"file"
option.set(sample_path)
self.assertEqual(option.value, sample_path)
- expected = u"Option test-directory must be an existing file (current value: '{0}')".format(
+ expected = u"Option tëst-directory must be an existing file (current value: '{0}')".format(
self.get_sample_path())
- with self.assertRaisesRegex(RuleOptionError, expected):
+ with self.assertRaisesMessage(RuleOptionError, expected):
option.set(self.get_sample_path())
# set option.type = both, files and directories should now be accepted
@@ -174,6 +199,27 @@ class RuleOptionTests(BaseTestCase):
# Expect exception if path type is invalid
option.type = u'föo'
- expected = u"Option test-directory type must be one of: 'file', 'dir', 'both' (current: 'föo')"
- with self.assertRaisesRegex(RuleOptionError, expected):
+ expected = u"Option tëst-directory type must be one of: 'file', 'dir', 'both' (current: 'föo')"
+ with self.assertRaisesMessage(RuleOptionError, expected):
option.set("haha")
+
+ def test_regex_option(self):
+ # normal behavior
+ option = RegexOption(u"tëst-regex", u"^myrëgex(.*)foo$", u"Tëst Regex Description")
+ self.assertEqual(option.name, u"tëst-regex")
+ self.assertEqual(option.description, u"Tëst Regex Description")
+ self.assertEqual(option.value, re.compile(u"^myrëgex(.*)foo$", re.UNICODE))
+
+ # re-set value
+ option.set(u"[0-9]föbar.*")
+ self.assertEqual(option.value, re.compile(u"[0-9]föbar.*", re.UNICODE))
+
+ # set None
+ option.set(None)
+ self.assertIsNone(option.value)
+
+ # error on invalid regex
+ incorrect_values = [u"foo(", 123, -1]
+ for value in incorrect_values:
+ with self.assertRaisesRegex(RuleOptionError, u"Invalid regular expression"):
+ option.set(value)