From d6cda0ed27dd388c8538a2138a867ba245043d66 Mon Sep 17 00:00:00 2001 From: Michael Ilsaas Date: Tue, 19 Jan 2016 21:37:49 +0100 Subject: [PATCH 1/4] Include leading zeroes in URL increment/decrement --- qutebrowser/utils/urlutils.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/qutebrowser/utils/urlutils.py b/qutebrowser/utils/urlutils.py index b20e833c8..f2b3f4557 100644 --- a/qutebrowser/utils/urlutils.py +++ b/qutebrowser/utils/urlutils.py @@ -509,11 +509,11 @@ def incdec_number(url, incdec, segments=None): continue # Get the last number in a string - match = re.match(r'(.*\D|^)(\d+)(.*)', getter()) + match = re.match(r'(.*\D|^)(0*)(\d+)(.*)', getter()) if not match: continue - pre, number, post = match.groups() + pre, zeroes, number, post = match.groups() # This should always succeed because we match \d+ val = int(number) if incdec == 'decrement': @@ -524,8 +524,15 @@ def incdec_number(url, incdec, segments=None): val += 1 else: raise ValueError("Invalid value {} for indec!".format(incdec)) - new_value = ''.join([pre, str(val), post]) + if zeroes: + if len(number) < len(str(val)): + zeroes = zeroes[1:] + if len(number) > len(str(val)): + zeroes = ''.join([zeroes,'0']) + + new_value = ''.join([pre, zeroes, str(val), post]) setter(new_value) + return url raise IncDecError("No number found in URL!", url) From c33e9555a187c9f30fd788210993a8072d5a370e Mon Sep 17 00:00:00 2001 From: Michael Ilsaas Date: Wed, 20 Jan 2016 19:38:03 +0100 Subject: [PATCH 2/4] Tester for url increment/decrement with zeroes --- qutebrowser/utils/urlutils.py | 2 +- tests/unit/utils/test_urlutils.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/qutebrowser/utils/urlutils.py b/qutebrowser/utils/urlutils.py index f2b3f4557..cef5dfa57 100644 --- a/qutebrowser/utils/urlutils.py +++ b/qutebrowser/utils/urlutils.py @@ -528,7 +528,7 @@ def incdec_number(url, incdec, segments=None): if len(number) < len(str(val)): zeroes = zeroes[1:] if len(number) > len(str(val)): - zeroes = ''.join([zeroes,'0']) + zeroes = ''.join([zeroes, '0']) new_value = ''.join([pre, zeroes, str(val), post]) setter(new_value) diff --git a/tests/unit/utils/test_urlutils.py b/tests/unit/utils/test_urlutils.py index 4f85022b9..e44e4a9e3 100644 --- a/tests/unit/utils/test_urlutils.py +++ b/tests/unit/utils/test_urlutils.py @@ -586,6 +586,34 @@ class TestIncDecNumber: base_url, incdec, segments={'host', 'path', 'query', 'anchor'}) assert new_url == expected_url + @pytest.mark.parametrize('number, expected', [ + ('01', '02'), + ('09', '10'), + ('009', '010') + ]) + def test_increment_leading_zeroes(self, number, expected): + """Test incdec_number with leading zeroes.""" + url = 'http://example.com/{}' + base_url = QUrl(url.format(number)) + expected_url = QUrl(url.format(expected)) + new_url = urlutils.incdec_number( + base_url, 'increment', segments={'path'}) + assert new_url == expected_url + + @pytest.mark.parametrize('number, expected', [ + ('02', '01'), + ('10', '9'), + ('010', '009') + ]) + def test_decrement_leading_zeroes(self, number, expected): + """Test incdec_number with leading zeroes.""" + url = 'http://example.com/{}' + base_url = QUrl(url.format(number)) + expected_url = QUrl(url.format(expected)) + new_url = urlutils.incdec_number( + base_url, 'increment', segments={'path'}) + assert new_url == expected_url + @pytest.mark.parametrize('url, segments, expected', [ ('http://ex4mple.com/test_4?page=3#anchor2', {'host'}, 'http://ex5mple.com/test_4?page=3#anchor2'), From 1ecccc1133dffa693bb782c51d8d039e376f2a2a Mon Sep 17 00:00:00 2001 From: Michael Ilsaas Date: Thu, 21 Jan 2016 17:15:48 +0100 Subject: [PATCH 3/4] Fix: decrement url test was set to increment. --- tests/unit/utils/test_urlutils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/utils/test_urlutils.py b/tests/unit/utils/test_urlutils.py index e44e4a9e3..cffa3d81b 100644 --- a/tests/unit/utils/test_urlutils.py +++ b/tests/unit/utils/test_urlutils.py @@ -611,7 +611,7 @@ class TestIncDecNumber: base_url = QUrl(url.format(number)) expected_url = QUrl(url.format(expected)) new_url = urlutils.incdec_number( - base_url, 'increment', segments={'path'}) + base_url, 'decrement', segments={'path'}) assert new_url == expected_url @pytest.mark.parametrize('url, segments, expected', [ From 4ad2d63c8ab20464fdb24d12a217babbbfe5ed24 Mon Sep 17 00:00:00 2001 From: Michael Ilsaas Date: Thu, 21 Jan 2016 18:37:46 +0100 Subject: [PATCH 4/4] Shortened urlincdec tests to one and some styling --- qutebrowser/utils/urlutils.py | 4 ++-- tests/unit/utils/test_urlutils.py | 31 ++++++++++--------------------- 2 files changed, 12 insertions(+), 23 deletions(-) diff --git a/qutebrowser/utils/urlutils.py b/qutebrowser/utils/urlutils.py index cef5dfa57..9e76aa29a 100644 --- a/qutebrowser/utils/urlutils.py +++ b/qutebrowser/utils/urlutils.py @@ -527,8 +527,8 @@ def incdec_number(url, incdec, segments=None): if zeroes: if len(number) < len(str(val)): zeroes = zeroes[1:] - if len(number) > len(str(val)): - zeroes = ''.join([zeroes, '0']) + elif len(number) > len(str(val)): + zeroes += '0' new_value = ''.join([pre, zeroes, str(val), post]) setter(new_value) diff --git a/tests/unit/utils/test_urlutils.py b/tests/unit/utils/test_urlutils.py index cffa3d81b..11fbc6148 100644 --- a/tests/unit/utils/test_urlutils.py +++ b/tests/unit/utils/test_urlutils.py @@ -586,32 +586,21 @@ class TestIncDecNumber: base_url, incdec, segments={'host', 'path', 'query', 'anchor'}) assert new_url == expected_url - @pytest.mark.parametrize('number, expected', [ - ('01', '02'), - ('09', '10'), - ('009', '010') - ]) - def test_increment_leading_zeroes(self, number, expected): + @pytest.mark.parametrize('number, expected, incdec', [ + ('01', '02', 'increment'), + ('09', '10', 'increment'), + ('009', '010', 'increment'), + ('02', '01', 'decrement'), + ('10', '9', 'decrement'), + ('010', '009', 'decrement') + ]) + def test_incdec_leading_zeroes(self, number, expected, incdec): """Test incdec_number with leading zeroes.""" url = 'http://example.com/{}' base_url = QUrl(url.format(number)) expected_url = QUrl(url.format(expected)) new_url = urlutils.incdec_number( - base_url, 'increment', segments={'path'}) - assert new_url == expected_url - - @pytest.mark.parametrize('number, expected', [ - ('02', '01'), - ('10', '9'), - ('010', '009') - ]) - def test_decrement_leading_zeroes(self, number, expected): - """Test incdec_number with leading zeroes.""" - url = 'http://example.com/{}' - base_url = QUrl(url.format(number)) - expected_url = QUrl(url.format(expected)) - new_url = urlutils.incdec_number( - base_url, 'decrement', segments={'path'}) + base_url, incdec, segments={'path'}) assert new_url == expected_url @pytest.mark.parametrize('url, segments, expected', [