summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2022-05-31 13:20:08 +0200
committerFlorian Bruhin <me@the-compiler.org>2022-06-22 17:41:12 +0200
commitafa843a7b40470076e6bde82caf117171f1ccb2c (patch)
tree512ded432623a36998a43e6ed3b3758cb3761071
parentad00568dd0c2956e9034053d1ee5744c4b3f36c7 (diff)
downloadqutebrowser-afa843a7b40470076e6bde82caf117171f1ccb2c.tar.gz
qutebrowser-afa843a7b40470076e6bde82caf117171f1ccb2c.zip
Add --include-hidden for :config-diff
Needed it for debugging, so why not implement it properly. TODO: Changelog, pick to master?
-rw-r--r--doc/help/commands.asciidoc5
-rw-r--r--qutebrowser/browser/qutescheme.py7
-rw-r--r--qutebrowser/config/config.py7
-rw-r--r--qutebrowser/config/configcommands.py15
-rw-r--r--tests/unit/browser/test_qutescheme.py36
-rw-r--r--tests/unit/config/test_config.py16
-rw-r--r--tests/unit/config/test_configcommands.py13
7 files changed, 82 insertions, 17 deletions
diff --git a/doc/help/commands.asciidoc b/doc/help/commands.asciidoc
index b1ba0b83c..5fea0b022 100644
--- a/doc/help/commands.asciidoc
+++ b/doc/help/commands.asciidoc
@@ -336,8 +336,13 @@ Remove a key from a dict.
[[config-diff]]
=== config-diff
+Syntax: +:config-diff [*--include-hidden*]+
+
Show all customized options.
+==== optional arguments
+* +*-i*+, +*--include-hidden*+: Also include internal qutebrowser settings.
+
[[config-edit]]
=== config-edit
Syntax: +:config-edit [*--no-source*]+
diff --git a/qutebrowser/browser/qutescheme.py b/qutebrowser/browser/qutescheme.py
index aecb9a11a..402a096b2 100644
--- a/qutebrowser/browser/qutescheme.py
+++ b/qutebrowser/browser/qutescheme.py
@@ -500,10 +500,11 @@ def qute_back(url: QUrl) -> _HandlerRet:
@add_handler('configdiff')
-def qute_configdiff(_url: QUrl) -> _HandlerRet:
+def qute_configdiff(url: QUrl) -> _HandlerRet:
"""Handler for qute://configdiff."""
- data = config.instance.dump_userconfig().encode('utf-8')
- return 'text/plain', data
+ include_hidden = QUrlQuery(url).queryItemValue('include_hidden') == 'true'
+ dump = config.instance.dump_userconfig(include_hidden=include_hidden)
+ return 'text/plain', dump.encode('utf-8')
@add_handler('pastebin-version')
diff --git a/qutebrowser/config/config.py b/qutebrowser/config/config.py
index ac0204c12..278059820 100644
--- a/qutebrowser/config/config.py
+++ b/qutebrowser/config/config.py
@@ -559,15 +559,18 @@ class Config(QObject):
self.set_obj(name, new_value, save_yaml=save_yaml)
self._mutables = {}
- def dump_userconfig(self) -> str:
+ def dump_userconfig(self, *, include_hidden: bool = False) -> str:
"""Get the part of the config which was changed by the user.
+ Args:
+ include_hidden: Include default scoped configs.
+
Return:
The changed config part as string.
"""
lines: List[str] = []
for values in sorted(self, key=lambda v: v.opt.name):
- lines += values.dump()
+ lines += values.dump(include_hidden=include_hidden)
if not lines:
return '<Default configuration>'
diff --git a/qutebrowser/config/configcommands.py b/qutebrowser/config/configcommands.py
index da7e0512e..2f5682e96 100644
--- a/qutebrowser/config/configcommands.py
+++ b/qutebrowser/config/configcommands.py
@@ -23,7 +23,7 @@ import os.path
import contextlib
from typing import TYPE_CHECKING, Iterator, List, Optional, Any, Tuple
-from qutebrowser.qt.core import QUrl
+from qutebrowser.qt.core import QUrl, QUrlQuery
from qutebrowser.api import cmdutils
from qutebrowser.completion.models import configmodel
@@ -281,9 +281,18 @@ class ConfigCommands:
@cmdutils.register(instance='config-commands')
@cmdutils.argument('win_id', value=cmdutils.Value.win_id)
- def config_diff(self, win_id: int) -> None:
- """Show all customized options."""
+ def config_diff(self, win_id: int, include_hidden: bool = False) -> None:
+ """Show all customized options.
+
+ Args:
+ include_hidden: Also include internal qutebrowser settings.
+ """
url = QUrl('qute://configdiff')
+ if include_hidden:
+ query = QUrlQuery()
+ query.addQueryItem("include_hidden", "true")
+ url.setQuery(query)
+
tabbed_browser = objreg.get('tabbed-browser',
scope='window', window=win_id)
tabbed_browser.load_url(url, newtab=False)
diff --git a/tests/unit/browser/test_qutescheme.py b/tests/unit/browser/test_qutescheme.py
index aa9958eff..499b2c584 100644
--- a/tests/unit/browser/test_qutescheme.py
+++ b/tests/unit/browser/test_qutescheme.py
@@ -28,7 +28,7 @@ from qutebrowser.qt.core import QUrl, QUrlQuery
import pytest
from qutebrowser.browser import qutescheme, pdfjs, downloads
-from qutebrowser.utils import resources
+from qutebrowser.utils import resources, urlmatch
from qutebrowser.misc import guiprocess
@@ -291,3 +291,37 @@ class TestPDFJSHandler:
url.setQuery(query)
with pytest.raises(qutescheme.RequestDeniedError):
qutescheme.data_for_url(url)
+
+
+class TestQuteConfigdiff:
+
+ """Test the qute://configdiff handler."""
+
+ @pytest.fixture(autouse=True)
+ def prepare_config(self, config_stub):
+ config_stub.set_obj(
+ "content.javascript.enabled",
+ True,
+ pattern=urlmatch.UrlPattern("chrome-devtools://*"),
+ hide_userconfig=True,
+ )
+
+ @pytest.mark.parametrize("url, expected", [
+ (
+ "qute://configdiff/",
+ b"<Default configuration>",
+ ),
+ (
+ "qute://configdiff/?include_hidden=true",
+ b'chrome-devtools://*: content.javascript.enabled = true',
+ )
+ ])
+ def test_default_config(self, config_stub, url, expected):
+ _mimetype, data = qutescheme.data_for_url(QUrl(url))
+ assert data == expected
+
+ def test_changes(self, config_stub):
+ config_stub.set_obj("content.images", False)
+ url = QUrl('qute://configdiff/')
+ _mimetype, data = qutescheme.data_for_url(url)
+ assert data == b'content.images = false'
diff --git a/tests/unit/config/test_config.py b/tests/unit/config/test_config.py
index f09124b2a..24d724a9d 100644
--- a/tests/unit/config/test_config.py
+++ b/tests/unit/config/test_config.py
@@ -715,12 +715,20 @@ class TestConfig:
with qtbot.assert_not_emitted(conf.changed):
meth('colors.statusbar.normal.bg', '#abcdef', pattern=pattern)
- def test_dump_userconfig(self, conf):
+ @pytest.mark.parametrize("include_hidden", [True, False])
+ def test_dump_userconfig(self, conf, include_hidden):
conf.set_obj('content.plugins', True)
conf.set_obj('content.headers.custom', {'X-Foo': 'bar'})
- lines = ['content.headers.custom = {"X-Foo": "bar"}',
- 'content.plugins = true']
- assert conf.dump_userconfig().splitlines() == lines
+ conf.set_obj('content.webgl', False, hide_userconfig=True)
+
+ lines = [
+ 'content.headers.custom = {"X-Foo": "bar"}',
+ 'content.plugins = true',
+ ]
+ if include_hidden:
+ lines.append("content.webgl = false")
+
+ assert conf.dump_userconfig(include_hidden=include_hidden).splitlines() == lines
def test_dump_userconfig_default(self, conf):
assert conf.dump_userconfig() == '<Default configuration>'
diff --git a/tests/unit/config/test_configcommands.py b/tests/unit/config/test_configcommands.py
index ad0ed5d51..e80ab99ee 100644
--- a/tests/unit/config/test_configcommands.py
+++ b/tests/unit/config/test_configcommands.py
@@ -212,12 +212,17 @@ class TestSet:
commands.set(win_id=0, option='foo?')
-def test_diff(commands, tabbed_browser_stubs):
+@pytest.mark.parametrize("include_hidden, url", [
+ (True, "qute://configdiff?include_hidden=true"),
+ (False, "qute://configdiff"),
+])
+def test_diff(commands, tabbed_browser_stubs, include_hidden, url):
"""Run ':config-diff'.
- Should open qute://configdiff."""
- commands.config_diff(win_id=0)
- assert tabbed_browser_stubs[0].loaded_url == QUrl('qute://configdiff')
+ Should open qute://configdiff.
+ """
+ commands.config_diff(win_id=0, include_hidden=include_hidden)
+ assert tabbed_browser_stubs[0].loaded_url == QUrl(url)
class TestCycle: