Resolved conflicts for merge, regenerated asciidoc, removed whitespace
Removed whitespace
This commit is contained in:
parent
35c2f95a58
commit
cf13c31142
@ -37,9 +37,11 @@ Changed
|
|||||||
- The `app_id` is now set to `qutebrowser` for Wayland.
|
- The `app_id` is now set to `qutebrowser` for Wayland.
|
||||||
- `Command` or `Cmd` can now be used (instead of `Meta`) to map the Command key
|
- `Command` or `Cmd` can now be used (instead of `Meta`) to map the Command key
|
||||||
on macOS.
|
on macOS.
|
||||||
|
- Using `:set option` now shows the value of the setting (like `:set option?`
|
||||||
|
already did).
|
||||||
|
|
||||||
v1.4.2 (unreleased)
|
v1.4.2
|
||||||
-------------------
|
------
|
||||||
|
|
||||||
Changed
|
Changed
|
||||||
~~~~~~~
|
~~~~~~~
|
||||||
@ -65,6 +67,8 @@ Fixed
|
|||||||
Note it still does not work on Qt 5.10 (due to a Qt bug) and Qt < 5.9.2.
|
Note it still does not work on Qt 5.10 (due to a Qt bug) and Qt < 5.9.2.
|
||||||
- Repeated escaping of entries in `qute://log` when refreshing page.
|
- Repeated escaping of entries in `qute://log` when refreshing page.
|
||||||
- The host blocker doesn't block 0.0.0.0 anymore.
|
- The host blocker doesn't block 0.0.0.0 anymore.
|
||||||
|
- Crash when using :// as URL pattern.
|
||||||
|
- The `:buffer` completion now sorts tabs with indices >= 10 correctly again.
|
||||||
|
|
||||||
v1.4.1
|
v1.4.1
|
||||||
------
|
------
|
||||||
@ -89,7 +93,6 @@ Fixed
|
|||||||
- The Windows installer now uninstalls the old version before installing the
|
- The Windows installer now uninstalls the old version before installing the
|
||||||
new one, fixing issues with qutebrowser not starting after installing v1.4.0
|
new one, fixing issues with qutebrowser not starting after installing v1.4.0
|
||||||
over v1.3.3.
|
over v1.3.3.
|
||||||
- The `:buffer` completion now sorts tabs with indices >= 10 correctly again.
|
|
||||||
|
|
||||||
v1.4.0
|
v1.4.0
|
||||||
------
|
------
|
||||||
|
@ -1139,7 +1139,7 @@ Syntax: +:set [*--temp*] [*--print*] [*--pattern* 'pattern'] ['option'] ['value'
|
|||||||
|
|
||||||
Set an option.
|
Set an option.
|
||||||
|
|
||||||
If the option name ends with '?', the value of the option is shown instead. Using :set without any arguments opens a page where settings can be changed interactively.
|
If the option name ends with '?' or no value is provided, the value of the option is shown instead. Using :set without any arguments opens a page where settings can be changed interactively.
|
||||||
|
|
||||||
==== positional arguments
|
==== positional arguments
|
||||||
* +'option'+: The name of the option.
|
* +'option'+: The name of the option.
|
||||||
|
@ -100,6 +100,7 @@
|
|||||||
|<<completion.delay,completion.delay>>|Delay (in milliseconds) before updating completions after typing a character.
|
|<<completion.delay,completion.delay>>|Delay (in milliseconds) before updating completions after typing a character.
|
||||||
|<<completion.height,completion.height>>|Height (in pixels or as percentage of the window) of the completion.
|
|<<completion.height,completion.height>>|Height (in pixels or as percentage of the window) of the completion.
|
||||||
|<<completion.min_chars,completion.min_chars>>|Minimum amount of characters needed to update completions.
|
|<<completion.min_chars,completion.min_chars>>|Minimum amount of characters needed to update completions.
|
||||||
|
|<<completion.open_categories,completion.open_categories>>|Which categories to show (in which order) in the :open completion.
|
||||||
|<<completion.quick,completion.quick>>|Move on to the next part when there's only one possible completion left.
|
|<<completion.quick,completion.quick>>|Move on to the next part when there's only one possible completion left.
|
||||||
|<<completion.scrollbar.padding,completion.scrollbar.padding>>|Padding (in pixels) of the scrollbar handle in the completion window.
|
|<<completion.scrollbar.padding,completion.scrollbar.padding>>|Padding (in pixels) of the scrollbar handle in the completion window.
|
||||||
|<<completion.scrollbar.width,completion.scrollbar.width>>|Width (in pixels) of the scrollbar in the completion window.
|
|<<completion.scrollbar.width,completion.scrollbar.width>>|Width (in pixels) of the scrollbar in the completion window.
|
||||||
@ -268,7 +269,6 @@
|
|||||||
|<<url.default_page,url.default_page>>|Page to open if :open -t/-b/-w is used without URL.
|
|<<url.default_page,url.default_page>>|Page to open if :open -t/-b/-w is used without URL.
|
||||||
|<<url.incdec_segments,url.incdec_segments>>|URL segments where `:navigate increment/decrement` will search for a number.
|
|<<url.incdec_segments,url.incdec_segments>>|URL segments where `:navigate increment/decrement` will search for a number.
|
||||||
|<<url.open_base_url,url.open_base_url>>|Open base URL of the searchengine if a searchengine shortcut is invoked without parameters.
|
|<<url.open_base_url,url.open_base_url>>|Open base URL of the searchengine if a searchengine shortcut is invoked without parameters.
|
||||||
|<<url.open_categories_shown,url.open_categories_shown>>|Which categories should be shown in the :open dialogue.
|
|
||||||
|<<url.searchengines,url.searchengines>>|Search engines which can be used via the address bar.
|
|<<url.searchengines,url.searchengines>>|Search engines which can be used via the address bar.
|
||||||
|<<url.start_pages,url.start_pages>>|Page(s) to open at the start.
|
|<<url.start_pages,url.start_pages>>|Page(s) to open at the start.
|
||||||
|<<url.yank_ignored_parameters,url.yank_ignored_parameters>>|URL parameters to strip with `:yank url`.
|
|<<url.yank_ignored_parameters,url.yank_ignored_parameters>>|URL parameters to strip with `:yank url`.
|
||||||
@ -1386,6 +1386,26 @@ Type: <<types,Int>>
|
|||||||
|
|
||||||
Default: +pass:[1]+
|
Default: +pass:[1]+
|
||||||
|
|
||||||
|
[[completion.open_categories]]
|
||||||
|
=== completion.open_categories
|
||||||
|
Which categories to show (in which order) in the :open completion.
|
||||||
|
|
||||||
|
Type: <<types,FlagList>>
|
||||||
|
|
||||||
|
Valid values:
|
||||||
|
|
||||||
|
* +searchengines+
|
||||||
|
* +quickmarks+
|
||||||
|
* +bookmarks+
|
||||||
|
* +history+
|
||||||
|
|
||||||
|
Default:
|
||||||
|
|
||||||
|
- +pass:[searchengines]+
|
||||||
|
- +pass:[quickmarks]+
|
||||||
|
- +pass:[bookmarks]+
|
||||||
|
- +pass:[history]+
|
||||||
|
|
||||||
[[completion.quick]]
|
[[completion.quick]]
|
||||||
=== completion.quick
|
=== completion.quick
|
||||||
Move on to the next part when there's only one possible completion left.
|
Move on to the next part when there's only one possible completion left.
|
||||||
@ -3274,18 +3294,6 @@ Type: <<types,Bool>>
|
|||||||
|
|
||||||
Default: +pass:[false]+
|
Default: +pass:[false]+
|
||||||
|
|
||||||
[[url.open_categories_shown]]
|
|
||||||
=== url.open_categories_shown
|
|
||||||
Which categories should be shown in the :open dialogue.
|
|
||||||
|
|
||||||
Type: <<types,List of Strings>>
|
|
||||||
|
|
||||||
Default
|
|
||||||
- +pass:[bookmarks]+
|
|
||||||
- +pass:[searchengines]+
|
|
||||||
- +pass:[history]+
|
|
||||||
- +pass:[quickmarks]+
|
|
||||||
|
|
||||||
[[url.searchengines]]
|
[[url.searchengines]]
|
||||||
=== url.searchengines
|
=== url.searchengines
|
||||||
Search engines which can be used via the address bar.
|
Search engines which can be used via the address bar.
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# This file is automatically generated by scripts/dev/recompile_requirements.py
|
# This file is automatically generated by scripts/dev/recompile_requirements.py
|
||||||
|
|
||||||
certifi==2018.8.13
|
certifi==2018.8.24
|
||||||
chardet==3.0.4
|
chardet==3.0.4
|
||||||
codecov==2.0.15
|
codecov==2.0.15
|
||||||
coverage==4.5.1
|
coverage==4.5.1
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# This file is automatically generated by scripts/dev/recompile_requirements.py
|
# This file is automatically generated by scripts/dev/recompile_requirements.py
|
||||||
|
|
||||||
attrs==18.1.0
|
attrs==18.2.0
|
||||||
flake8==3.5.0
|
flake8==3.5.0
|
||||||
flake8-bugbear==18.8.0
|
flake8-bugbear==18.8.0
|
||||||
flake8-builtins==1.4.1 # rq.filter: != 1.4.0
|
flake8-builtins==1.4.1 # rq.filter: != 1.4.0
|
||||||
@ -24,4 +24,4 @@ pydocstyle==2.1.1
|
|||||||
pyflakes==2.0.0
|
pyflakes==2.0.0
|
||||||
six==1.11.0
|
six==1.11.0
|
||||||
snowballstemmer==1.2.1
|
snowballstemmer==1.2.1
|
||||||
typing==3.6.4
|
typing==3.6.6
|
||||||
|
@ -3,6 +3,6 @@
|
|||||||
appdirs==1.4.3
|
appdirs==1.4.3
|
||||||
packaging==17.1
|
packaging==17.1
|
||||||
pyparsing==2.2.0
|
pyparsing==2.2.0
|
||||||
setuptools==40.1.0
|
setuptools==40.2.0
|
||||||
six==1.11.0
|
six==1.11.0
|
||||||
wheel==0.31.1
|
wheel==0.31.1
|
||||||
|
@ -2,6 +2,6 @@
|
|||||||
|
|
||||||
altgraph==0.16.1
|
altgraph==0.16.1
|
||||||
future==0.16.0
|
future==0.16.0
|
||||||
macholib==1.10
|
macholib==1.11
|
||||||
pefile==2018.8.8
|
pefile==2018.8.8
|
||||||
PyInstaller==3.3.1
|
PyInstaller==3.3.1
|
||||||
|
@ -1,13 +1,18 @@
|
|||||||
# This file is automatically generated by scripts/dev/recompile_requirements.py
|
# This file is automatically generated by scripts/dev/recompile_requirements.py
|
||||||
|
|
||||||
|
asn1crypto==0.24.0
|
||||||
-e git+https://github.com/PyCQA/astroid.git#egg=astroid
|
-e git+https://github.com/PyCQA/astroid.git#egg=astroid
|
||||||
certifi==2018.8.13
|
certifi==2018.8.24
|
||||||
|
cffi==1.11.5
|
||||||
chardet==3.0.4
|
chardet==3.0.4
|
||||||
github3.py==1.1.0
|
cryptography==2.3.1
|
||||||
|
github3.py==1.2.0
|
||||||
idna==2.7
|
idna==2.7
|
||||||
isort==4.3.4
|
isort==4.3.4
|
||||||
|
jwcrypto==0.5.0
|
||||||
lazy-object-proxy==1.3.1
|
lazy-object-proxy==1.3.1
|
||||||
mccabe==0.6.1
|
mccabe==0.6.1
|
||||||
|
pycparser==2.18
|
||||||
-e git+https://github.com/PyCQA/pylint.git#egg=pylint
|
-e git+https://github.com/PyCQA/pylint.git#egg=pylint
|
||||||
python-dateutil==2.7.3
|
python-dateutil==2.7.3
|
||||||
./scripts/dev/pylint_checkers
|
./scripts/dev/pylint_checkers
|
||||||
|
@ -1,13 +1,18 @@
|
|||||||
# This file is automatically generated by scripts/dev/recompile_requirements.py
|
# This file is automatically generated by scripts/dev/recompile_requirements.py
|
||||||
|
|
||||||
|
asn1crypto==0.24.0
|
||||||
astroid==2.0.4
|
astroid==2.0.4
|
||||||
certifi==2018.8.13
|
certifi==2018.8.24
|
||||||
|
cffi==1.11.5
|
||||||
chardet==3.0.4
|
chardet==3.0.4
|
||||||
github3.py==1.1.0
|
cryptography==2.3.1
|
||||||
|
github3.py==1.2.0
|
||||||
idna==2.7
|
idna==2.7
|
||||||
isort==4.3.4
|
isort==4.3.4
|
||||||
|
jwcrypto==0.5.0
|
||||||
lazy-object-proxy==1.3.1
|
lazy-object-proxy==1.3.1
|
||||||
mccabe==0.6.1
|
mccabe==0.6.1
|
||||||
|
pycparser==2.18
|
||||||
pylint==2.1.1
|
pylint==2.1.1
|
||||||
python-dateutil==2.7.3
|
python-dateutil==2.7.3
|
||||||
./scripts/dev/pylint_checkers
|
./scripts/dev/pylint_checkers
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
# This file is automatically generated by scripts/dev/recompile_requirements.py
|
# This file is automatically generated by scripts/dev/recompile_requirements.py
|
||||||
|
|
||||||
atomicwrites==1.1.5
|
atomicwrites==1.2.1
|
||||||
attrs==18.1.0
|
attrs==18.2.0
|
||||||
backports.functools-lru-cache==1.5
|
backports.functools-lru-cache==1.5
|
||||||
beautifulsoup4==4.6.3
|
beautifulsoup4==4.6.3
|
||||||
cheroot==6.4.0
|
cheroot==6.5.2
|
||||||
click==6.7
|
click==6.7
|
||||||
# colorama==0.3.9
|
# colorama==0.3.9
|
||||||
coverage==4.5.1
|
coverage==4.5.1
|
||||||
@ -13,7 +13,7 @@ fields==5.0.0
|
|||||||
Flask==1.0.2
|
Flask==1.0.2
|
||||||
glob2==0.6
|
glob2==0.6
|
||||||
hunter==2.0.2
|
hunter==2.0.2
|
||||||
hypothesis==3.69.0
|
hypothesis==3.70.3
|
||||||
itsdangerous==0.24
|
itsdangerous==0.24
|
||||||
# Jinja2==2.10
|
# Jinja2==2.10
|
||||||
Mako==1.0.7
|
Mako==1.0.7
|
||||||
@ -22,17 +22,17 @@ more-itertools==4.3.0
|
|||||||
parse==1.8.4
|
parse==1.8.4
|
||||||
parse-type==0.4.2
|
parse-type==0.4.2
|
||||||
pluggy==0.7.1
|
pluggy==0.7.1
|
||||||
py==1.5.4
|
py==1.6.0
|
||||||
py-cpuinfo==4.0.0
|
py-cpuinfo==4.0.0
|
||||||
pytest==3.6.4 # rq.filter: != 3.7, != 3.7.1, != 3.7.2
|
pytest==3.6.4 # rq.filter: != 3.7, != 3.7.1, != 3.7.2, != 3.7.3, != 3.7.4
|
||||||
pytest-bdd==2.21.0
|
pytest-bdd==2.21.0
|
||||||
pytest-benchmark==3.1.1
|
pytest-benchmark==3.1.1
|
||||||
pytest-cov==2.5.1
|
pytest-cov==2.5.1
|
||||||
pytest-faulthandler==1.5.0
|
pytest-faulthandler==1.5.0
|
||||||
pytest-instafail==0.4.0
|
pytest-instafail==0.4.0
|
||||||
pytest-mock==1.10.0
|
pytest-mock==1.10.0
|
||||||
pytest-qt==3.0.0
|
pytest-qt==3.0.2
|
||||||
pytest-repeat==0.6.0
|
pytest-repeat==0.7.0
|
||||||
pytest-rerunfailures==4.1
|
pytest-rerunfailures==4.1
|
||||||
pytest-travis-fold==1.3.0
|
pytest-travis-fold==1.3.0
|
||||||
pytest-xvfb==1.1.0
|
pytest-xvfb==1.1.0
|
||||||
|
@ -19,4 +19,4 @@ pytest-xvfb
|
|||||||
vulture
|
vulture
|
||||||
|
|
||||||
#@ ignore: Jinja2, MarkupSafe, colorama
|
#@ ignore: Jinja2, MarkupSafe, colorama
|
||||||
#@ filter: pytest != 3.7, != 3.7.1, != 3.7.2
|
#@ filter: pytest != 3.7, != 3.7.1, != 3.7.2, != 3.7.3, != 3.7.4
|
||||||
|
@ -1,9 +1,7 @@
|
|||||||
# This file is automatically generated by scripts/dev/recompile_requirements.py
|
# This file is automatically generated by scripts/dev/recompile_requirements.py
|
||||||
|
|
||||||
packaging==17.1
|
|
||||||
pluggy==0.7.1
|
pluggy==0.7.1
|
||||||
py==1.5.4
|
py==1.6.0
|
||||||
pyparsing==2.2.0
|
|
||||||
six==1.11.0
|
six==1.11.0
|
||||||
tox==3.2.1
|
tox==3.2.1
|
||||||
virtualenv==16.0.0
|
virtualenv==16.0.0
|
||||||
|
@ -26,7 +26,7 @@ __copyright__ = "Copyright 2014-2018 Florian Bruhin (The Compiler)"
|
|||||||
__license__ = "GPL"
|
__license__ = "GPL"
|
||||||
__maintainer__ = __author__
|
__maintainer__ = __author__
|
||||||
__email__ = "mail@qutebrowser.org"
|
__email__ = "mail@qutebrowser.org"
|
||||||
__version_info__ = (1, 4, 1)
|
__version_info__ = (1, 4, 2)
|
||||||
__version__ = '.'.join(str(e) for e in __version_info__)
|
__version__ = '.'.join(str(e) for e in __version_info__)
|
||||||
__description__ = "A keyboard-driven, vim-like browser based on PyQt5."
|
__description__ = "A keyboard-driven, vim-like browser based on PyQt5."
|
||||||
|
|
||||||
|
@ -85,8 +85,8 @@ class ConfigCommands:
|
|||||||
*, pattern=None):
|
*, pattern=None):
|
||||||
"""Set an option.
|
"""Set an option.
|
||||||
|
|
||||||
If the option name ends with '?', the value of the option is shown
|
If the option name ends with '?' or no value is provided, the
|
||||||
instead.
|
value of the option is shown instead.
|
||||||
|
|
||||||
Using :set without any arguments opens a page where settings can be
|
Using :set without any arguments opens a page where settings can be
|
||||||
changed interactively.
|
changed interactively.
|
||||||
@ -116,8 +116,7 @@ class ConfigCommands:
|
|||||||
|
|
||||||
with self._handle_config_error():
|
with self._handle_config_error():
|
||||||
if value is None:
|
if value is None:
|
||||||
raise cmdexc.CommandError("set: The following arguments "
|
self._print_value(option, pattern=pattern)
|
||||||
"are required: value")
|
|
||||||
else:
|
else:
|
||||||
self._config.set_str(option, value, pattern=pattern,
|
self._config.set_str(option, value, pattern=pattern,
|
||||||
save_yaml=not temp)
|
save_yaml=not temp)
|
||||||
|
@ -123,7 +123,7 @@ class BaseType:
|
|||||||
"""A type used for a setting value.
|
"""A type used for a setting value.
|
||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
none_ok: Whether to convert to None for an empty string.
|
none_ok: Whether to allow None (or an empty string for :set) as value.
|
||||||
|
|
||||||
Class attributes:
|
Class attributes:
|
||||||
valid_values: Possible values if they can be expressed as a fixed
|
valid_values: Possible values if they can be expressed as a fixed
|
||||||
|
@ -142,7 +142,9 @@ class UrlPattern:
|
|||||||
Deviation from Chromium:
|
Deviation from Chromium:
|
||||||
- We assume * when no scheme has been given.
|
- We assume * when no scheme has been given.
|
||||||
"""
|
"""
|
||||||
assert parsed.scheme, parsed
|
if not parsed.scheme:
|
||||||
|
raise ParseError("Missing scheme")
|
||||||
|
|
||||||
if parsed.scheme == 'any':
|
if parsed.scheme == 'any':
|
||||||
self._scheme = None
|
self._scheme = None
|
||||||
return
|
return
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# This file is automatically generated by scripts/dev/recompile_requirements.py
|
# This file is automatically generated by scripts/dev/recompile_requirements.py
|
||||||
|
|
||||||
attrs==18.1.0
|
attrs==18.2.0
|
||||||
colorama==0.3.9
|
colorama==0.3.9
|
||||||
cssutils==1.0.2
|
cssutils==1.0.2
|
||||||
Jinja2==2.10
|
Jinja2==2.10
|
||||||
|
@ -61,13 +61,14 @@ class TestSet:
|
|||||||
commands.set(win_id=0)
|
commands.set(win_id=0)
|
||||||
assert tabbed_browser_stubs[0].opened_url == QUrl('qute://settings')
|
assert tabbed_browser_stubs[0].opened_url == QUrl('qute://settings')
|
||||||
|
|
||||||
def test_get(self, config_stub, commands, message_mock):
|
@pytest.mark.parametrize('option', ['url.auto_search?', 'url.auto_search'])
|
||||||
"""Run ':set url.auto_search?'.
|
def test_get(self, config_stub, commands, message_mock, option):
|
||||||
|
"""Run ':set url.auto_search?' / ':set url.auto_search'.
|
||||||
|
|
||||||
Should show the value.
|
Should show the value.
|
||||||
"""
|
"""
|
||||||
config_stub.val.url.auto_search = 'never'
|
config_stub.val.url.auto_search = 'never'
|
||||||
commands.set(win_id=0, option='url.auto_search?')
|
commands.set(win_id=0, option=option)
|
||||||
msg = message_mock.getmsg(usertypes.MessageLevel.info)
|
msg = message_mock.getmsg(usertypes.MessageLevel.info)
|
||||||
assert msg.text == 'url.auto_search = never'
|
assert msg.text == 'url.auto_search = never'
|
||||||
|
|
||||||
@ -183,17 +184,14 @@ class TestSet:
|
|||||||
"not available with the QtWebEngine backend!"):
|
"not available with the QtWebEngine backend!"):
|
||||||
commands.set(0, 'hints.find_implementation', 'javascript')
|
commands.set(0, 'hints.find_implementation', 'javascript')
|
||||||
|
|
||||||
@pytest.mark.parametrize('option', ['?', 'url.auto_search'])
|
def test_empty(self, commands):
|
||||||
def test_empty(self, commands, option):
|
"""Run ':set ?'.
|
||||||
"""Run ':set ?' / ':set url.auto_search'.
|
|
||||||
|
|
||||||
Should show an error.
|
Should show an error.
|
||||||
See https://github.com/qutebrowser/qutebrowser/issues/1109
|
See https://github.com/qutebrowser/qutebrowser/issues/1109
|
||||||
"""
|
"""
|
||||||
with pytest.raises(cmdexc.CommandError,
|
with pytest.raises(cmdexc.CommandError, match="No option '?'"):
|
||||||
match="The following arguments are required: "
|
commands.set(win_id=0, option='?')
|
||||||
"value"):
|
|
||||||
commands.set(win_id=0, option=option)
|
|
||||||
|
|
||||||
def test_toggle(self, commands):
|
def test_toggle(self, commands):
|
||||||
"""Try toggling a value.
|
"""Try toggling a value.
|
||||||
|
@ -96,7 +96,7 @@ from qutebrowser.utils import urlmatch
|
|||||||
("http://[fc2e:bb88:edac]", 'Invalid IPv6 address; source was "fc2e:bb88:edac"; host = ""'),
|
("http://[fc2e:bb88:edac]", 'Invalid IPv6 address; source was "fc2e:bb88:edac"; host = ""'),
|
||||||
("http://[fc2e:bb88:edac::z]", 'Invalid IPv6 address; source was "fc2e:bb88:edac::z"; host = ""'),
|
("http://[fc2e:bb88:edac::z]", 'Invalid IPv6 address; source was "fc2e:bb88:edac::z"; host = ""'),
|
||||||
("http://[fc2e:bb88:edac::2]:2a2", "Invalid port: invalid literal for int() with base 10: '2a2'"),
|
("http://[fc2e:bb88:edac::2]:2a2", "Invalid port: invalid literal for int() with base 10: '2a2'"),
|
||||||
|
("://", "Missing scheme"),
|
||||||
])
|
])
|
||||||
def test_invalid_patterns(pattern, error):
|
def test_invalid_patterns(pattern, error):
|
||||||
with pytest.raises(urlmatch.ParseError, match=re.escape(error)):
|
with pytest.raises(urlmatch.ParseError, match=re.escape(error)):
|
||||||
|
Loading…
Reference in New Issue
Block a user