aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorArthur Zamarin <arthurzam@gentoo.org>2022-10-22 11:21:13 +0300
committerArthur Zamarin <arthurzam@gentoo.org>2022-10-28 16:15:03 +0300
commitc415e94f833acc4b824cf2b6db332244e97313e9 (patch)
tree00abf2e9ad7905394c25207010fe42e658e89f64 /tests
parentBetterCompressionCheck: detect better compression uris (diff)
downloadpkgcheck-c415e94f833acc4b824cf2b6db332244e97313e9.tar.gz
pkgcheck-c415e94f833acc4b824cf2b6db332244e97313e9.tar.bz2
pkgcheck-c415e94f833acc4b824cf2b6db332244e97313e9.zip
ExcessiveLineCheck: check for too long lines
Closes: https://bugs.gentoo.org/440686 Signed-off-by: Arthur Zamarin <arthurzam@gentoo.org>
Diffstat (limited to 'tests')
-rw-r--r--tests/checks/test_codingstyle.py59
1 files changed, 59 insertions, 0 deletions
diff --git a/tests/checks/test_codingstyle.py b/tests/checks/test_codingstyle.py
index 3becc919..1c6a0075 100644
--- a/tests/checks/test_codingstyle.py
+++ b/tests/checks/test_codingstyle.py
@@ -433,3 +433,62 @@ class TestStaticSrcUri(misc.ReportTestCase):
r = self.assertReport(self.check, self._prepare_pkg('Diffball-0.1.2.3', pkgver='Diffball-0.1.2.3'))
assert r.static_str == 'Diffball-0.1.2.3'
assert r.replacement == '${P}'
+
+
+class TestExcessiveLineLength(misc.ReportTestCase):
+
+ check_kls = codingstyle.LineLengthCheck
+ check = check_kls(None)
+ word_length = codingstyle.ExcessiveLineLength.word_length
+
+
+ @staticmethod
+ def _prepare_pkg(*lines: str):
+ fake_pkg = misc.FakePkg("dev-util/diffball-0", ebuild=''.join(lines), lines=lines)
+ data = ''.join(lines).encode()
+ return _ParsedPkg(data, pkg=fake_pkg)
+
+ def test_normal_length(self):
+ self.assertNoReport(self.check, self._prepare_pkg('echo "short line"'))
+
+ def test_long_line(self):
+ r = self.assertReport(self.check, self._prepare_pkg(f'echo {"a " * codingstyle.ExcessiveLineLength.line_length}'))
+ assert r.lines == (1, )
+
+ def test_multiple_lines(self):
+ r = self.assertReport(self.check, self._prepare_pkg(
+ f'echo {"a " * codingstyle.ExcessiveLineLength.line_length}',
+ 'echo "short line"',
+ f'echo {"Hello " * codingstyle.ExcessiveLineLength.line_length}',
+ ))
+ assert r.lines == (1, 3)
+
+ @pytest.mark.parametrize('variable', ('DESCRIPTION', 'KEYWORDS', 'IUSE'))
+ def test_special_variables(self, variable):
+ self.assertNoReport(self.check, self._prepare_pkg(
+ f'{variable}="{"a " * codingstyle.ExcessiveLineLength.line_length}"',
+ f' {variable}="{"a " * codingstyle.ExcessiveLineLength.line_length}"',
+ f'\t\t{variable}="{"a " * codingstyle.ExcessiveLineLength.line_length}"',
+ ))
+
+ def test_long_words(self):
+ long_word = 'a' * self.word_length + 'b'
+ medium_word = 'a' * (self.word_length // 2)
+ r = self.assertReport(self.check, self._prepare_pkg(
+ f'echo {"a" * codingstyle.ExcessiveLineLength.line_length}',
+ f'echo {medium_word} {long_word}',
+ f'echo {medium_word} {long_word[:-5]}',
+ ))
+ assert r.lines == (3, )
+
+ def test_long_quotes(self):
+ # The exception is for any quoted string with length >= word_length.
+ # Each quoted string is computed by itself.
+ long_word = 'a ' * (self.word_length // 2) + 'b' # long quoted string, skipped
+ medium_word = 'a ' * (self.word_length // 4) # not long enough string, not skipped
+ r = self.assertReport(self.check, self._prepare_pkg(
+ f'echo "{"a" * codingstyle.ExcessiveLineLength.line_length}"',
+ f'echo "{medium_word}" "{long_word}"',
+ 'echo' + f' "{medium_word}"' * 3,
+ ))
+ assert r.lines == (3, )