diff --git a/qutebrowser/utils/urlutils.py b/qutebrowser/utils/urlutils.py index 2db14a18b..35ef07d8a 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:] + elif len(number) > len(str(val)): + zeroes += '0' + + new_value = ''.join([pre, zeroes, str(val), post]) setter(new_value) + return url raise IncDecError("No number found in URL!", url) diff --git a/tests/unit/utils/test_urlutils.py b/tests/unit/utils/test_urlutils.py index b2ab548b3..dfd591449 100644 --- a/tests/unit/utils/test_urlutils.py +++ b/tests/unit/utils/test_urlutils.py @@ -587,6 +587,23 @@ class TestIncDecNumber: base_url, incdec, segments={'host', 'path', 'query', 'anchor'}) assert new_url == expected_url + @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, incdec, 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'),