Under some circumstances I can't reproduce (switching/turning off
monitors?) it seems it's possible that SessionManager.save gets called
with last_window=True, without on_last_window_closed being called.
This might be to one of the Qt screen management bugs fixed in Qt 5.6,
which would explain why I can't reproduce it.
Instead of crashing, let's log the error and not save the session.
In 43a4a6a3e7 we added
pkg_resources._vendor.pyparsing to the frozen modules - however, older
setuptools (and thus pkg_resources) versions don't have that module yet,
so freezing would fail.
This was a note for developers, so it makes more sense to have in
CONTRIBUTING.
This also adds a section on using tox, which was mentioned only in
INSTALL and not CONTRIBUTING.
New contributors might like to be reminded to redirect the config
access of their locally-built qutebrowser to avoid overwriting their
global settings.
Otherwise we get:
import file mismatch:
imported module 'test_sessions' has this __file__ attribute:
/home/florian/proj/qutebrowser/git/tests/integration/features/test_sessions.py
which is not the same as the test file we want to collect:
/home/florian/proj/qutebrowser/git/tests/unit/misc/test_sessions.py
HINT: remove __pycache__ / .pyc files and/or use a unique basename for your test file modules
Searching for that error doesn't turn up many helpful results, but it
seems to be harmless and shown when downloading a file - it's also new
in Qt 5.6 it seems, so let's just ignore it.
The previous fix didn't work in situations where the web view was
actually focused, but had no focused element (like about:blank).
The new fix always works, and even is a lot simpler!
Fixes#504.
When a download is finished with `removed-finished-download` set to a
delay, it's removed via a singleshot QTimer.
However, when the window was closed in the meantime, the slot still was
executed by Qt, even though the DownloadManager was already deleted.
Fixes#1242
Those were added in #443, inspired by luakit.
However, all other bindings follow dwb's defaults, and dwb uses `gt` for
showing buffers. To be consistent, let's rebind gt to show :buffer.
The buffer_troubling_args tests may look a little un-intuitive but that is
because they are testing the edge cases for the current behaviour. If these
edge cases are encountered during normal usage you are doing something wrong.
`buffer` takes either a tab index or a string and focuses the specified
tab. The index can be of the form [0-9]+ which will switch to the
relevant tab in the current window or [0-9]+/[0-9]+ (that is
win_id/index) which will focus the specified window before switching
tabs. If a string is passed the list of open tabs across all windows is
sorted based on title and url (just like in the completion widget) and
the top result is selected.
Since XPath doesn't have a way to escape quotes (or any other
character), we have to use a workaround by using concat() and switching
between quoting styles.
The userscript is a bash script and there is no bash on windows.
One solution could be to use a python userscript, but there may be
other issues (file associations), too.
Upstream Arch now updated to Qt 5.6 (which means it works with Xvfb), and using
debug packages means the image is a lot bigger and builds slower, so let's use
the normal packages from [extra].
On windows, using '/' in pathnames won't work, so it's impossible to use
to describe a path in a feature spec. The solution is to move the path
logic out of the feature spec and hand it over to `os.path.join` in a
new custom step for userscripts.
Issue #1334
The problem was that there were too few slashes. On Linux, absolute
paths start with /, so
file:// + /home
gives file:///home, which is a valid path. On windows however, absolute
paths start with a drive letter, so
file:// + C:/Users
gives file://C:/Users, which is parsed as "host C, path Users", which is
why it could be written as file://c/Users (strip out the empty "port"),
giving us an invalid path.
The solution is to add the third slash in the template, and strip the
redundant slash on unix systems.
Additionally, this fixes a bug where navigating from '/home/' to the
parent directory would give '/home' instead of '/'
Fix for #676
It removes the target of the link, as to prevent the website to overrule
the user. I guess the following things should be done:
- add setting to enable/disable this behaviour
- and/or add "hint all current"
Only the first one would be easiest. The second one requires us to keep track
of the original target. I should open a pull request for discussion.
We can get UndefinedError when a new function got added to the jinja
env (and gets called from a template) and the user did update the
on-disk templates but not restart qutebrowser yet.
In this case, let's show a special error page to the user and tell them
to do :report in the unlikely case it's actually a bug.
Fixes#1362.
See #1360.
astroid
-------
2016-03-21 -- 1.4.5
* decoratornames() does not leak InferenceError anymore.
* wildcard_imported_names() got replaced by _public_names()
Our understanding of wildcard imports through __all__ was
half baked to say at least, since we couldn't account for
modifications of the list, which results in tons of false positives.
Instead, we replaced it with _public_names(), a method which returns
all the names that are publicly available in a module, that is that
don't start with an underscore, even though this means that there
is a possibility for other names to be leaked out even though
they are not present in the __all__ variable.
The method is private in 1.4.X.
pylint
------
2016-03-21 -- 1.5.5
* Let visit_importfrom from Python 3 porting checker be called when everything is disabled
Because the visit method was filtering the patterns it was expecting to be activated,
it didn't run when everything but one pattern was disabled, leading to spurious false
positives
* Don't emit unsubscriptable-value for classes with unknown
base classes.
* Use an OrderedDict for storing the configuration elements
This fixes an issue related to impredictible order of the disable / enable
elements from a config file. In certain cases, the disable was coming before
the enable which resulted in classes of errors to be enabled, even though the intention
was to disable them. The best example for this was in the context of running multiple
processes, each one of it having different enables / disables that affected the output.
* Don't consider bare and broad except handlers as ignoring NameError,
AttributeError and similar exceptions, in the context of checkers for
these issues.
- Improve error message when a plugin fails to load.
- pytest.fail with non-ascii characters raises an internal pytest error.
- junit parses report.nodeid incorrectly, when params IDs contain ::.
- SyntaxErrors containing non-ascii lines at the point of failure generated an
internal py.test error.
- When passing in a bytestring regex pattern to parameterize attempt to decode
it as utf-8 ignoring errors.
- parametrized test nodes cannot be specified to run on the command line.
When Qt detects it can't output unicode (via the locale?), it elides using
"..." instead of the unicode char "…". Now the test works in both scenarios.
[test] [feature] The default test runner is now py.test. Running “python
setup.py test” will make use of py.test instead of nose. nose still works as a
test runner as well, however.
[lexer] [bug] Major improvements to lexing of intricate Python sections which
may contain complex backslash sequences, as well as support for the bitwise
operator (e.g. pipe symbol) inside of expression sections distinct from the
Mako “filter” operator, provided the operator is enclosed within parentheses or
brackets. Pull request courtesy Daniel Martin.
[feature] Added new method Template.list_defs(). Pull request courtesy Jonathan
Vanasco.
* Bugfix for ``test_HTTP11_pipelining`` test in Python 3.5
* Bugfix regarding the keyword arguments support for Python 3 on the config
file.
* Bugfix for ``test_2_KeyboardInterrupt`` test in Python 3.5.
by monkey patching the HTTPRequest given a bug on CPython
that is affecting the testsuite (https://bugs.python.org/issue23377).
* Add additional parameter ``raise_subcls`` to the tests helpers
`openURL` and ``CPWebCase.getPage`` to have finer control on
which exceptions can be raised.
* Add support for direct keywords on the calls (e.g. ``foo=bar``) on
the config file under Python 3.
* Add additional validation to determine if the process is running
as a daemon on ``cherrypy.process.plugins.SignalHandler`` to allow
the execution of the testsuite under CI tools.
Before, in fonts -> _monospace we preferred Liberation Mono to Courier and
Courier New. Unfortunately, that font looks horrible on Windows if it's
installed, so let's avoid using it if possible.
On Linux, hopefully Courier New/Courier isn't available, and Liberation Mono
will get picked up instead (or one of the other alternatives).
- Add a 'nothing' strategy that never successfully generates values.
- sampled_from() and one_of() can both now be called with an empty argument
list, in which case they also never generate any values.
- one_of may now be called with a single argument that is a collection of
strategies as well as as varargs.
- Add a 'runner' strategy which returns the instance of the current test object
if there is one.
- 'Bundle' for RuleBasedStateMachine is now a normal(ish) strategy and can be
used as such.
- Tests using RuleBasedStateMachine should now shrink significantly better.
- Hypothesis now uses a pretty-printing library internally, compatible with
IPython's pretty printing protocol (actually using the same code). This may
improve the quality of output in some cases.
- As a 'phases' setting that allows more fine grained control over which parts
of the process Hypothesis runs
- Add a suppress_health_check setting which allows you to turn off specific
health checks in a fine grained manner.
- Fix a bug where lists of non fixed size would always draw one more element
than they included. This mostly didn't matter, but if would cause problems
with empty strategies or ones with side effects.
- Add a mechanism to the Django model generator to allow you to explicitly
request the default value (thanks to Jeremy Thurgood for this one).
This reverts commit 0f5b4d58e2.
Seems this is needed when freezing, otherwise we get a "'flaky' not a
registered marker" error despite the plugin being installed.
Conflicts:
pytest.ini
- Fixed Jython compatibility
- Fixed HTML formatter output with leading empty lines
- Added a mapping table for LaTeX encodings and added utf8
- Fixed image formatter font searching on Macs
- Fixed deepcopy-ing of Token instances
- Fixed Julia string interpolation
- Fixed statefulness of HttpLexer between get_tokens calls
- Many smaller fixes to various lexers
New Features
- New pytest.mark.skip mark, which unconditionally skips marked tests.
- --doctest-glob may now be passed multiple times in the command-line.
- New -rp and -rP reporting options give the summary and full output of passing
tests, respectively.
- pytest.mark.xfail now has a strict option which makes XPASS tests to fail the
test suite, defaulting to False. There’s also a xfail_strict ini option that
can be used to configure it project-wise.
- Parser.addini now supports options of type bool.
- New ALLOW_BYTES doctest option strips b prefixes from byte strings in doctest
output (similar to ALLOW_UNICODE).
- give a hint on KeyboardInterrupt to use the –fulltrace option to show the
errors
- catch IndexError exceptions when getting exception source location. This
fixes pytest internal error for dynamically generated code (fixtures and
tests) where source lines are fake by intention
Changes
- Important: py.code has been merged into the pytest repository as
pytest._code. This decision was made because py.code had very few uses
outside pytest and the fact that it was in a different repository made it
difficult to fix bugs on its code in a timely manner. The team hopes with
this to be able to better refactor out and improve that code. This change
shouldn’t affect users, but it is useful to let users aware if they encounter
any strange behavior.
Keep in mind that the code for pytest._code is private and experimental, so
you definitely should not import it explicitly!
Please note that the original py.code is still available in pylib.
- pytest_enter_pdb now optionally receives the pytest config object.
- Removed code and documentation for Python 2.5 or lower versions, including
removal of the obsolete _pytest.assertion.oldinterpret module.
- Comparisons now always show up in full when CI or BUILD_NUMBER is found in
the environment, even when -vv isn’t used.
- --lf and --ff now support long names: --last-failed and --failed-first
respectively.
- Added expected exceptions to pytest.raises fail message
- Collection only displays progress (“collecting X items”) when in a terminal.
This avoids cluttering the output when using --color=yes to obtain colors in
CI integrations systems
Bug Fixes
- The -s and -c options should now work under xdist; Config.fromdictargs now
represents its input much more faithfully.
- support Python 3.5’s @ operator in assertion rewriting.
- Fix formatting utf-8 explanation messages.
- Fix traceback style docs to describe all of the available options
(auto/long/short/line/native/no), with auto being the default since v2.6.
- junit record_xml_property doesn’t allow multiple records with same name.
- Warn if using xmlconfig.file, self.loadZCML is the preferred option.
- Avoid false reports by suffixing an opening parenthesis on all methods.
- Add decorators from zope.interface and zope.component.
Due to the bugfix we can also remove the D001 suppression.
- The ``no_xvfb``-marker is now registered automatically so pytest doesn't fail
when run with ``--strict``.
- The ``xvfb`` fixture is now session-scoped.
Before this change, adding a new logging message involving logging e.g. the
default duckduckgo setting value failed.
Now we basically use a black- instead of a whitelist and only fail if we get a
load status message for duckduckgo.
- PropertyMock is now accessible from mocker.
- Fix regression using one of the assert_* methods in patched functions which
receive a parameter named method.
- Remove duplication from the environment section
- Dropped support for Python 3.2
- Indicated setup and teardown in report
- Fixed colour of errors in report
- Fix version parsing of py.test to work with py.test release candidates
- More general handling of the health check problem where things could fail
because of a cache miss - now one "free" example is generated before the start
of the health check run.
- Fix a bug where Hypothesis would error when running on Python 2.7.3 or earlier
because it was trying to pass a bytearray object to struct.unpack (which is
only supported since 2.7.4).
Issues #1269, #866
qutebrowser would crash when XDG_DOWNLOAD_DIR was set to some
non-absolute value (which should not happen, but it can) and
"storage -> download-dir" was empty, since when the user didn't give an
absolute filename, even the joined path of download_dir() (i.e.
XDG_DOWNLOAD_DIR in this case) and the filename was not absolute either.
Since the path was not absolute, create_full_filename returned None,
which meant that os.path.basename(self._filename) raised an exception.
Now we display an error message and fall back to $HOME.
Trying to get the device location while running the tests can trigger all kind
of funny effects.
Since we can't easily mock the GPS responses, we only run those on the CI where
we at least have some predictable setup.
Fixes#1297.
We used to use flake8-pep257 because docstrings claims no codes are ignorable
(which is wrong). However, that doesn't work with pydocstyle, so we had a
separate pydocstyle environment (and flake8-pep257 to check tests with relaxed
rules).
Now we only use flake8-docstrings + pydocstyle (which it switches to if it's
available, even though it still depends on pep257), and drop the pydocstyle tox
env.
As soon as flake8-docstrings is updated to drop the (unneeded) pep257
dependency, we can drop it as well.
This means we can now run things like running pylint --version without having
to set PYTHONPATH correctly now.
When using skip_install=true, the plugins wouldn't work as they need to import
qutebrowser.
We have to keep setting PYTHONPATH in run_pylint_on_tests.py, otherwise we get
this error I don't quite understand:
F: 1, 0: error while code parsing: Unable to load file
'/home/florian/proj/qutebrowser/git/__init__.py' ([Errno 2] No such
file or directory: '...') (parse-error)
(3.0.2: performance fix)
------------------
3.0.1 - 2016-02-18
------------------
* Fix a case where it was possible to trigger an "Unreachable" assertion when
running certain flaky stateful tests.
* Improve shrinking of large stateful tests by eliminating a case where it was
hard to delete early steps.
* Improve efficiency of drawing binary(min_size=n, max_size=n) significantly by
provide a custom implementation for fixed size blocks that can bypass a lot
of machinery.
* Set default home directory based on the current working directory at the
point Hypothesis is imported, not whenever the function first happens to be
called.
------------------
3.0.0 - 2016-02-17
------------------
Codename: This really should have been 2.1.
Externally this looks like a very small release. It has one small breaking change
that probably doesn't affect anyone at all (some behaviour that never really worked
correctly is now outright forbidden) but necessitated a major version bump and one
visible new feature.
Internally this is a complete rewrite. Almost nothing other than the public API is
the same.
New features:
* Addition of data() strategy which allows you to draw arbitrary data interactively
within the test.
* New "exploded" database format which allows you to more easily check the example
database into a source repository while supporting merging.
* Better management of how examples are saved in the database.
* Health checks will now raise as errors when they fail. It was too easy to have
the warnings be swallowed entirely.
New limitations:
* choices and streaming strategies may no longer be used with find(). Neither may
data() (this is the change that necessitated a major version bump).
Feature removal:
* The ForkingTestCase executor has gone away. It may return in some more working
form at a later date.
Performance improvements:
* A new model which allows flatmap, composite strategies and stateful testing to
perform *much* better. They should also be more reliable.
* Filtering may in some circumstances have improved significantly. This will
help especially in cases where you have lots of values with individual filters
on them, such as lists(x.filter(...)).
* Modest performance improvements to the general test runner by avoiding expensive
operations
In general your tests should have got faster. If they've instead got significantly
slower, I'm interested in hearing about it.
Data distribution:
The data distribution should have changed significantly. This may uncover bugs the
previous version missed. It may also miss bugs the previous version could have
uncovered. Hypothesis is now producing less strongly correlated data than it used
to, but the correlations are extended over more of the structure.
Shrinking:
Shrinking quality should have improved. In particular Hypothesis can now perform
simultaneous shrinking of separate examples within a single test (previously it
was only able to do this for elements of a single collection). In some cases
performance will have improved, in some cases it will have got worse but generally
shouldn't have by much.
This is based on HTML files with a global YAML comment, currently with "target"
as the only allowed key.
The tests then do this:
- Open a HTML file in data/hints/html
- Start hinting
- Make sure only one hint is visible
- Follow it, and make sure the page mentioned in "target:" is reached
Some ideas for the future:
- A "scroll" key, to scroll before hinting
- A "zoom" key, to zoom
- Multiple hints via a list
- Checking position of hints?
- A mode to manually check the pages (to check hint positions)
Issue #1214
Now uses a sensible filename for data: links instead of the whole base64
content. For PDF.js, it even uses the correct pdf filename.
TODO: Produces "QPainter:🔚 Painter ended with 2 saved states" while
running the tests here (Arch Linux):
CPython: 3.5.1
Qt: 5.5.1, runtime: 5.5.1
PyQt: 5.5.1
- Fixed Jython compatibility
- Fixed HTML formatter output with leading empty lines
- Added a mapping table for LaTeX encodings and added utf8
- Fixed image formatter font searching on Macs
- Fixed deepcopy-ing of Token instances
- Fixed Julia string interpolation
- Fixed statefulness of HttpLexer between get_tokens calls
- Many smaller fixes to various lexers
Switched to a new changelog format (the one in http://keepachangelog.com/)
since it was contributed by Alexander Artemenko. Re-added a newline to support
old version of Python, as requested by azjps.
* Removed deprecated support for ``ssl_certificate`` and
``ssl_private_key`` attributes and implicit construction
of SSL adapter on Python 2 WSGI servers.
* Default SSL Adapter on Python 2 is the builtin SSL adapter,
matching Python 3 behavior.
* In proxy tool, defer to Host header for resolving the base if no base is
supplied.
- Fix file modes in archive
- Support forcing a platform tag using –plat-name on pure-Python wheels, as
well as nonstandard platform tags on non-pure wheels
- Add SOABI tags to platform-specific wheels built for Python 2.X
- Support reproducible wheel files, wheels that can be rebuilt and will hash to
the same values as previous builds
- Support for changes in keyring >= 8.0
- Use the file context manager when checking if dependency_links.txt is empty,
fixes problems building wheels under PyPy on Windows
- Don’t attempt to (recursively) create a build directory ending with ..
(invalid on all platforms, but code was only executed on Windows)
- Added the PyPA Code of Conduct
We patch sources.list to use the US loudbalancer instead of the hardcoded GCE
mirror which Travis uses by default - because that seems to be quite unstable.
Otherwise the stacktrace might be confusing since it will show the
FileNotFoundException as the causing error, which is not true (it just
happens to be the last checked place).
The .path attribute was added so that we still have the requested path
in the error log.
See #1280.
When a end-to-end test failed which would've marked an error message as
expected later in the test, seeing the teardown message about an unexpected
error being logged is really confusing.
For some reason, when comparing the repr in the two processes, we get different
results on OS X and Windows:
- expected: "fünf"
- "f\xfcnf" coming back from the subprocess on OS X
- "fnf" on Windows
Instead we're comparing the json dump now, which should be more predictable.
There are a lot of problems and flakiness with using a real clipboard.
Instead we now have a :debug-set-fake-clipboard command to set a text, and use
logging when getting the contents.
Fixes#1285.
It seems since the recent QClipboard changes we get a new warning
"QXcbClipboard: Cannot transfer data, no data available" in some tests.
This ignores the warning, let's hope the tests still work.
See #1285.
Otherwise, if a test fails to actually put something into the clipboard, we end
up pasting "Does this work?" which could e.g. trigger a search.
When it's cleared, we at least get some "clipboard is empty" error instead.
In the long run, we should detect any accidental external accesses using
mitmproxy, as per #1282. In the meantime, we try to detect duckduckgo requests
being logged and fail the tests if that happens.
However, a duckduckgo URL is logged in fuzzy_url during startup/config init,
which is why we ignore it there.
The-Compiler wants a more beautiful test case since the old one was
pretty weird and took lots of explaining at pytest demos, so I made a
new one. This one is a bit nicer on the eye and - to say it with
The-Compiler's words - has no "weird pixelated globe with the
geocities-like background".
To compensate for the globe I've put in some trivia facts so that - if
you are one of the people that like to stare at test pages - you can
always learn something.
Before we raised QtValueError (via qtutils.ensure_valid), but maybe there are
more callers out there which call fuzzy_url with an empty input - and it makes
more sense to raise InvalidUrlError which gets displayed to the user than
raising QtValueError which is more like an assertion.
This way we can instruct update_3rdparty to download a specific version
of pdfjs, e.g. to make debugging easier or to match the version of a
system package.
Syntax:
update_3rdparty.py -p 1.2.109
or
update_3rdparty.py --pdfjs=1.2.109
If the command line argument is not given, the script will automatically
download the latest release.
Major Updates
-------------
The project was renamed to pydocstyle and the new release will be 1.0.0!
New Features
------------
- Added support for Python 3.5.
- Classes nested inside classes are no longer considered private. Nested
classes are considered public if their names are not prepended with an
underscore and if their parent class is public, recursively.
- Added the D403 error code - "First word of the first line should be properly
capitalized". This new error is turned on by default.
- Added support for .pydocstylerc and as configuration file name.
Bug Fixes
---------
- Fixed an issue where a NameError was raised when parsing complex definitions
of __all__.
- Fixed a bug where D202 was falsely reported when a function with just a
docstring and no content was followed by a comment.
- Fixed wrong __all__ definition in main module.
- Fixed a bug where an AssertionError could occur when parsing __future__
imports.
I tried to set my editor to `termite -e "vim -f {}"`, termite being a
pretty cool and light terminal I use within my i3wm Arch linux box.
So when I open my editor I want it to launch a terminal with Vim inside
instead of GVim for various reasons.
The validation rejected this at first because it was looking for '{}'
inside ['foo', 'bar', 'baz {}'], essentially. So I need it to look
inside the sub-strings, not just the list.
Then after validation I need to perform the '{}' replacement inside the
sub-string too, not just replacing the whole string.
- use predictable object resolution for monkeypatch
- allow for double nodeids in junitxml,
this was a regression failing plugins combinations like pytest-pep8 +
pytest-flakes
- Workaround for exception that occurs in pyreadline when using ``--pdb`` with
standard I/O capture enabled.
- Better error message in case the target of a ``monkeypatch`` call raises an
``ImportError``.
- monkeypatch calls (setattr, setenv, etc.) are now O(1).
- captured stdout and stderr are now properly displayed before entering pdb
when ``--pdb`` is used instead of being thrown away.
- pytest warnings emitted during ``pytest_terminal_summary`` are now properly
displayed.
- fixed internal UnicodeDecodeError when doctests contain unicode.
- Add captured stdout to jUnit XML report on setup error.
Unfortunately running coverage means our tests need more than a minute longer
to run.
We still run it in the following scenarios:
- Full 'tox' run
- On Travis CI on Linux
- On the buildbot on Archlinux
But not anymore in the following scenarios:
- When running 'tox -e py35' (or py34)
- On Travis CI on OS X
- On AppVeyor
- On the buildbot except on Archlinux
After pressing the button to open a window, we have to wait until it's loaded
before continuing, otherwise the test is flaky:
http://www.qutebrowser.org/testresults/osx/1295.html
We can't simply wait with "wait until about:blank is loaded" as that page is
already loaded earlier.
- allow for double nodeids in junitxml,
this was a regression failing plugins combinations like pytest-pep8 +
pytest-flakes
- Workaround for exception that occurs in pyreadline when using ``--pdb`` with
standard I/O capture enabled.
- Better error message in case the target of a ``monkeypatch`` call raises an
``ImportError``.
- monkeypatch calls (setattr, setenv, etc.) are now O(1).
- captured stdout and stderr are now properly displayed before entering pdb
when ``--pdb`` is used instead of being thrown away.
- pytest warnings emitted during ``pytest_terminal_summary`` are now properly
displayed.
- fixed internal UnicodeDecodeError when doctests contain unicode.
- Add captured stdout to jUnit XML report on setup error.
The Arch Linux section has been quite out of date:
* The AUR has a Git backend now, thus the links have been obsolete.
* python-pypeg2 is in [community]
* qutebrowser is in [community]
It seems that unlike Gecko, WebKit does not support undo/redo operations
when the textarea's `value` attribute is changed directly. Fortunately
there is a WebKit-specific workaround using textInput event.
References:
* http://stackoverflow.com/a/7554295
* http://help.dottoro.com/ljuecqgv.php
The Shift+Ins key should arguably insert primary selection, not the
clipboard selection as every Qt program does. This commit makes it
possible via the hidden paste-primary command (enabled by default).
Unfortunately QtWebKit does not provide any straightforward way to
insert text at cursor position into editable fields, so we work around
this by executing a JavaScript snippet - inspired by this SO answer:
http://stackoverflow.com/a/11077016
We're now ready for #1226, but this only updates pep8 for now.
Changes:
* Reverted the fix, "options passed on command line are only ones accepted"
feature. This has many unintended consequences in pep8 and flake8 and needs to
be reworked when I have more time.
* Added support for Python 3.5.
* Added support for multi-line config_file option parsing.
* Improved parameter parsing.
Bugs:
* Fixed BytesWarning on Python 3.
pylint:
* Merge StringMethodChecker with StringFormatChecker. This fixes a
bug where disabling all the messages and enabling only a handful of
messages from the StringFormatChecker would have resulted in no
messages at all.
* Don't apply unneeded-not over sets.
astroid:
* unpack_infer raises InferenceError if it can't operate
with the given sequences of nodes.
* Support accessing properties with super().
* Enforce strong updates per frames.
When looking up a name in a scope, Scope.lookup will return
only the values which will be reachable after execution, as seen
in the following code:
a = 1
a = 2
In this case it doesn't make sense to return two values, but
only the last one.
- Added lexers:
- Emacs Lisp
- Arduino
- Modula-2 with multi-dialect support
- Fortran fixed format
- Archetype Definition language
- Terraform
- Jcl, Easytrieve
- ParaSail
- Boogie
- Turtle
- Fish Shell
- Roboconf
- Test Anything Protocol
- Shen
- Component Pascal
- SuperCollider
- Shell consoles (Tcsh, PowerShell, MSDOS)
- Elm and J
- Crmsh
- Praat
- CSound
- Ezhil
- Thrift
- QVT Operational
- Hexdump
- CAmkES Configuration
- Added styles:
- Lovelace
- Algol and Algol-nu
- Added formatters:
- IRC
- True color (24-bit) terminal ANSI sequences (formatter alias: “16m”)
- New “filename” option for HTML formatter.
- Improved performance of the HTML formatter for long lines.
- Updated autopygmentize script.
- Fixed style inheritance for non-standard token types in HTML output.
- Added support for async/await to Python 3 lexer.
- Rewrote linenos option for TerminalFormatter (it’s better, but slightly
different output than before).
- Javascript lexer now supports most of ES6.
- Cocoa builtins updated for iOS 8.1.
- Combined BashSessionLexer and ShellSessionLexer, new version should support
the prompt styles of either.
- Added option to pygmentize to show a full traceback on exceptions.
- Fixed incomplete output on Windows and Python 3 (e.g. when using iPython
Notebook).
- Allowed more traceback styles in Python console lexer.
- Added decorators to TypeScript.
- Fix highlighting of certain IRC logs formats.
This logged an error on Windows:
ERROR misc networkmanager:on_authentication_required:269 Unable to read the netrc file
Traceback (most recent call last):
File "c:\python34\Lib\netrc.py", line 27, in __init__
file = os.path.join(os.environ['HOME'], ".netrc")
File "C:\Users\florian\buildbot\slave\win8\build\.tox\py34\lib\os.py", line 633, in __getitem__
raise KeyError(key) from None
KeyError: 'HOME'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\florian\buildbot\slave\win8\build\qutebrowser\browser\network\networkmanager.py", line 262, in on_authentication_required
net = netrc.netrc()
File "c:\python34\Lib\netrc.py", line 29, in __init__
raise OSError("Could not find .netrc: $HOME is not set")
Since this case is pretty common, we don't want to log it - and checking the
variable beforehand is easier than parsing the exception message.
This should fix the failing tests on Windows.
This hopefully fixes this flaky error in test_notifications_with_ask__true on
OS X:
Failed: Logged unexpected errors:
LogLine('22:40:06 DEBUG js webpage:javaScriptConsoleMessage:531 [http://localhost:57758/data/prompt/notifications.html:28] [FAIL] unknown initial value for Notification.permission: denied')
[...]
testprocess.WaitForTimeout: Timed out after 15000ms waiting for {'message': 'Entering mode KeyMode.* (reason: question asked)'}.
The geolocation tests emitted those errors on the Archlinux buildbot:
QGeoclueMaster error creating GeoclueMasterClient.
Geoclue error: Process org.freedesktop.Geoclue.Master exited with status 127
I don't really know what they mean, but let's see if the test passes now.
This is a bit tricky since the test will actually run, but be marked as
skipped. The problem is we can't raise a pytest.skip.Exception during a test,
or it'll show up as an exception in a virtual Qt method.
Still this is better than nothing.
Otherwise, on OS X we got the same SSL error logged twice as on_ssl_errors is
called twice. This means the tests only marked one as expected, and it failed
because of the other one.
Since 2a705e2eb6 non-specialized config types are
String. However, String had an overloaded complete() which defaulted to
returning None.
Now we use the normal complete() which relies on valid_values if completions
isn't given instead.
Fixes#1223.
* Handle the import fallback idiom with regard to wrong-import-order.
* Decouple the displaying of reports from the displaying of messages
Some reporters are aggregating the messages instead of displaying
them when they are available. The actual displaying was conflatted
in the generate_reports. Unfortunately this behaviour was flaky
and in the case of the JSON reporter, the messages weren't shown
at all if a file had syntax errors or if it was missing.
In order to fix this, the aggregated messages can now be
displayed with Reporter.display_message, while the reports are
displayed with display_reports.
* Ignore function calls with variadic arguments without a context.
Inferring variadic positional arguments and keyword arguments
will result into empty Tuples and Dicts, which can lead in
some cases to false positives with regard to no-value-for-parameter.
In order to avoid this, until we'll have support for call context
propagation, we're ignoring such cases if detected.
* Treat AsyncFunctionDef just like FunctionDef nodes,
by implementing visit_asyncfunctiondef in terms of
visit_functiondef.
* Take in account kwonlyargs when verifying that arguments
are defined with the check_docs extension.
* Suppress reporting 'unneeded-not' inside `__ne__` methods
0.3.6
- fix ValueError when a closed stream was used
0.3.5
- Bumping version to re-upload a wheel distribution
0.3.4
- stream redirection now strips ANSI codes on Linux
- strip readline markers
- assign orig_stdout and orig_stderr when initialising
- Fore.RESET did not reset style of LIGHT_EX colors. Fixed by Andy Neff
- add context manager syntax. Thanks to Matt Olsen.
- colorama didn't work on Windows when environment variable 'TERM' was set.
- fix pylint errors in client code.
- Changes to readme and other improvements by Marc Abramowitz and Zearin
2.0.0 - 2016-01-10
------------------
Codename: A new beginning
This release cleans up all of the legacy that accrued in the course of
Hypothesis 1.0. These are mostly things that were emitting deprecation warnings
in 1.19.0, but there were a few additional changes.
In particular:
- non-strategy values will no longer be converted to strategies when used in
given or find.
- FailedHealthCheck is now an error and not a warning.
- Handling of non-ascii reprs in user types have been simplified by using raw
strings in more places in Python 2.
- given no longer allows mixing positional and keyword arguments.
- given no longer works with functions with defaults.
- given no longer turns provided arguments into defaults - they will not appear
in the argspec at all.
- the basic() strategy no longer exists.
- the n_ary_tree strategy no longer exists.
- the average_list_length setting no longer exists. Note: If you're using using
recursive() this will cause you a significant slow down. You should pass
explicit average_size parameters to collections in recursive calls.
- @rule can no longer be applied to the same method twice.
- Python 2.6 and 3.3 are no longer officially supported, although in practice
they still work fine.
This also includes two non-deprecation changes:
- given's keyword arguments no longer have to be the rightmost arguments and
can appear anywhere in the method signature.
- The max_shrinks setting would sometimes not have been respected.
1.19.0 - 2016-01-09
-------------------
Codename: IT COMES
This release heralds the beginning of a new and terrible age of Hypothesis 2.0.
It's primary purpose is some final deprecations prior to said release. The goal
is that if your code emits no warnings under this release then it will probably
run unchanged under Hypothesis 2.0 (there are some caveats to this: 2.0 will
drop support for some Python versions, and if you're using internal APIs then
as usual that may break without warning).
It does have two new features:
- New @seed() decorator which allows you to manually seed a test. This may be
harmlessly combined with and overrides the derandomize setting.
- settings objects may now be used as a decorator to fix those settings to a
particular @given test.
API changes (old usage still works but is deprecated):
- Settings has been renamed to settings (lower casing) in order to make the
decorator usage more natural.
- Functions for the storage directory that were in hypothesis.settings are now
in a new hypothesis.configuration module.
Additional deprecations:
- the average_list_length setting has been deprecated in favour of being
explicit.
- the basic() strategy has been deprecated as it is impossible to support it
under a Conjecture based model, which will hopefully be implemented at some
point in the 2.x series.
- the n_ary_tree strategy (which was never actually part of the public API) has
been deprecated.
- Passing settings or random as keyword arguments to given is deprecated (use
the new functionality instead)
Bug fixes:
- No longer emit PendingDeprecationWarning for __iter__ and StopIteration in
streaming() values.
- When running in health check mode with non strict, don't print quite so many
errors for an exception in reify.
- When an assumption made in a test or a filter is flaky, tests will now raise
Flaky instead of UnsatisfiedAssumption.
- The paste command will now open one tab/window per url if multiple
URLs (separated by newline) are present in the clipboard
- Adds the tests for the new multitab functionality
- Changes test/integration/conftest.py to be able to insert newlines in
the clipboard for the test
Using pytest.fail with pytrace=False hides the quteprocess output, which makes
it a lot harder to debug stuff.
This is because TestReport.longrepr is suddenly a string and we can't add infos
to it - see https://github.com/pytest-dev/pytest/issues/1316
While pytest-sugar was nice to look at, it produced a lot of issues:
- Unusable on CI
- Unusable on OS X and Windows
- Garbage when terminal was resized during tests
- Missing space after test name since some while
This replaces it by pytest-instafail, which replaces the most important feature
of sugar, and on top of that, also works on CI.
- qtbot.waitSignal with raising=True is the default this way, so we remove the
raising=True.
- qtbot.waitSignal with raising=False stay untouched
- Some qtbot.waitSignal without raising had one added (because we don't want it
to raise)
- Some qtbot.waitSignal without raising actually should've raised, which they
do now.
- New qt_wait_signal_raising ini option can be used to override the default
value of the raising parameter of the qtbot.waitSignal and qtbot.waitSignals
functions when omitted:
Calls which explicitly pass the raising parameter are not affected.
- qtbot now has a new assertNotEmitted context manager which can be used to
ensure the given signal is not emitted.
For some reason I can't explain, since 2b0870084b
we got test failures on OS X, as the clipboard had the old value before waiting
for the change, the new (correct) value after waiting for it, but never
actually emitted 'changed'.
We could just re-check the contents after the timeout, but that'd mean we wait
1s for every test where this weird thing happens.
Instead, we poll the clipboard for every 100ms as long as the timeout (1s)
hasn't passed, and return as soon as it has the correct contents.
The output was almost always useless without -v because the debug log wasn't
shown at all, only error/info.
Now we display a maximum of 50 lines (regardless of what level) without -v.
Checking the requests from the webserver proved problematic, as often there's
some kind of caching going on. Instead, we only check the log, as this is used
for things like :navigate anyways, so if the log says the page got loaded, we
can trust it.
There's still "... should be requested" to check the actual requests.
Windows needs the SystemRoot environment variable set to initialize the crypto
API, what running Python in a subprocess does.
However, we did override the whole environment instead of extending it, which
means this broke on Windows when calling asciidoc:
Traceback (most recent call last):
File "C:\asciidoc-8.6.9\asciidoc.py", line 9, in <module>
import sys, os, re, time, traceback, tempfile, subprocess, codecs, locale, unicodedata, copy
File "C:\Python27\lib\tempfile.py", line 35, in <module>
from random import Random as _Random
File "C:\Python27\lib\random.py", line 885, in <module>
_inst = Random()
File "C:\Python27\lib\random.py", line 97, in __init__
self.seed(x)
File "C:\Python27\lib\random.py", line 113, in seed
a = long(_hexlify(_urandom(2500)), 16)
WindowsError: [Error -2146893795] Provider DLL failed to initialize correctly
freeze.py now optionally includes pdfjs if it's present. This means we don't
need to download it every time to run frozen tests, but we can include it in
build_release.py when building a windows package.
To build qutebrowser using tox (at least on Ubuntu 14.04.1) the python3-dev package is required (see issue #1200).
This commit adds this package to the list of dependencies for installation of qutebrowser on Debian/Ubuntu systems.
Bugfixes
- Resolve regression introduced in 2.9.0 that made it impossible to send binary
strings as bodies in Python 3.
- Fixed errors when calculating cookie expiration dates in certain locales.
Miscellaneous
- Updated bundled urllib3 to 1.13.1.
- Hypothesis will no longer write generated code to the file system. This will
improve performance on some systems (e.g. if you're using PythonAnywhere
which is running your code from NFS) and prevent some annoying interactions
with auto-restarting systems.
- Hypothesis will cache the creation of some strategies. This can significantly
improve performance for code that uses flatmap or composite and thus has to
instantiate strategies a lot.
* pkg_resources brain tips are a bit more specific, by specifiying proper
returns.
* Standard library modules are properly detected by is_standard_module.
Features:
- Tests and find are now explicitly seeded off the global random module. This
means that if you nest one inside the other you will now get a health check
error. It also means that you can control global randomization by seeding
random.
- There is a new random_module() strategy which seeds the global random module
for you and handles things so that you don't get a health check warning if
you use it inside your tests.
- floats() now accepts two new arguments: allow_nan and allow_infinity. These
default to the old behaviour, but when set to False will do what the names
suggest.
Bug fixes:
- Fix a bug where tests that used text() on Python 3.4+ would not actually be
deterministic even when explicitly seeded or using the derandomize mode,
because generation depended on dictionary iteration order which was affected
by hash randomization.
- Fix a bug where with complicated strategies the timing of the initial health
check could affect the seeding of the subsequent test, which would also
render supposedly deterministic tests non-deterministic in some scenarios.
- In some circumstances flatmap() could get confused by two structurally
similar things it could generate and would produce a flaky test where the
first time it produced an error but the second time it produced the other
value, which was not an error. The same bug was presumably also possible in
composite().
- flatmap() and composite() initial generation should now be moderately faster.
This will be particularly noticeable when you have many values drawn from the
same strategy in a single run, e.g. constructs like lists(s.flatmap(f)).
Shrinking performance may have suffered, but this didn't actually produce an
interestingly worse result in any of the standard scenarios tested.
When there was an error, the finished signal will be emitted too anyways, so if
we call cleanup here, we'll call it twice which means we'll get an exception.
Supersedes #1175.
Since we're now using qute:// to serve files other than html
(see: pdfjs), it's a good idea to change the mimetype accordingly. This
also prevents warnings in the console, as QWebKit will complain e.g.
when stylesheets are served with 'text/html'.
You cannot open a file twice on windows, so the call to
urllib.request.urlretrieve was invalid, since we already opened the
temporary file. urlretrieve without a filename will automatically create
and return a temp-file, so we're fine.
* No modified pdfjs installation needed
-> Groundwork for using a system-wide installation
* Script update_3rdparty.py to download and upack the latest pdfjs
release
- Fixed an issue with copy operations not working against
proxies.
- Changed the logging operations of the development server to
correctly log where the server is running in all situations
again.
- Fixed another regression with SSL wrapping similar to the
fix in 0.11.2 but for a different code path.
-----
5.0.0
-----
* Removed deprecated support for ``ssl_certificate`` and
``ssl_private_key`` attributes and implicit construction
of SSL adapter on Python 2 WSGI servers.
* Default SSL Adapter on Python 2 is the builtin SSL adapter,
matching Python 3 behavior.
-----
4.0.0
-----
* Drop support for Python 2.5 and earlier.
* No longer build Windows installers by default.
While the original "no focused webview" bug (with the first test after spawning
qutebrowser) from #1183 was fixed, we still had a case where the next test
after ":fake-key sending key to the website with other window focused" failed,
presumably because the inspector was still focused, e.g. here:
http://qutebrowser.org:8010/builders/osx/builds/1175/steps/tests/logs/stdio
This hopefully fixes this by properly waiting until the inspector is gone.
A small bug fix release, which fixes the fact that the 'note' function could
not be used on tests which used the @example decorator to provide explicit
examples.
- SignalBlocker now has a args attribute with the arguments of the signal that
triggered it, or None on a time out.
- MultiSignalBlocker is now properly disconnects from signals upon exit.
For some unknown reason, report.longrepr.addsection might not exist, which
caused failures on OS X and Windows. If that happens, we just don't add a
section at all.
When using print and relying on pytest to capture it as stdout, we ran into
this pytest/pytest-qt issue:
https://github.com/pytest-dev/pytest-qt/issues/113
Now we use our own capturing mechanism instead, which also means we get nicer
output.
Fixes#1122.
Minor Improvements (Backwards compatible)
- The verify keyword argument now supports being passed a path to a directory
of CA certificates, not just a single-file bundle.
- Warnings are now emitted when sending files opened in text mode.
- Added the 511 Network Authentication Required status code to the status code
registry.
Bugfixes
- For file-like objects that are not seeked to the very beginning, we now send
the content length for the number of bytes we will actually read, rather than
the total size of the file, allowing partial file uploads.
- When uploading file-like objects, if they are empty or have no obvious
content length we set Transfer-Encoding: chunked rather than
Content-Length: 0.
- We correctly receive the response in buffered mode when uploading chunked
bodies.
- We now handle being passed a query string as a bytestring on Python 3, by
decoding it as UTF-8.
- Sessions are now closed in all cases (exceptional and not) when using the
functional API rather than leaking and waiting for the garbage collector to
clean them up.
- Correctly handle digest auth headers with a malformed qop directive that
contains no token, by treating it the same as if no qop directive was
provided at all.
- Minor performance improvements when removing specific cookies by name.
This is actually the same release as 1.16.1, but 1.16.1 has been pulled because
it contains the following additional change that was not intended to be in a
patch release (it's perfectly stable, but is a larger change that should have
required a minor version bump):
Hypothesis will now perform a series of "health checks" as part of running your
tests. These detect and warn about some common error conditions that people
often run into which wouldn't necessarily have caued the test to fail but would
cause e.g. degraded performance or confusing results.
A small bugfix release that allows bdists for Hypothesis to be built under 2.7
- the compat3.py file which had Python 3 syntax wasn't intended to be loaded
under Python 2, but when building a bdist it was. In particular this would
break running setup.py test.
This reverts commit 06298022a3.
We get this when the tests finished running:
Error in atexit._run_exitfuncs:
Traceback (most recent call last):
File "/home/florian/proj/qutebrowser/git/.tox/py35/lib/python3.5/site-packages/colorama/initialise.py", line 19, in reset_all
AnsiToWin32(orig_stdout).reset_all()
File "/home/florian/proj/qutebrowser/git/.tox/py35/lib/python3.5/site-packages/colorama/ansitowin32.py", line 67, in __init__
strip = conversion_supported or not is_a_tty(wrapped)
File "/home/florian/proj/qutebrowser/git/.tox/py35/lib/python3.5/site-packages/colorama/ansitowin32.py", line 17, in is_a_tty
return hasattr(stream, 'isatty') and stream.isatty()
ValueError: I/O operation on closed file
- fixed issue where class attributes injected during collection could break pytest.
- precompute junitxml chunks instead of storing the whole tree in objects
- fix ``pytest.deprecated_call()`` receiving multiple arguments
(Regression introduced in 2.8.4).
0.3.5
- Bumping version to re-upload a wheel distribution
0.3.4
- stream redirection now strips ANSI codes on Linux
- strip readline markers
- assign orig_stdout and orig_stderr when initialising
- Fore.RESET did not reset style of LIGHT_EX colors. Fixed by Andy Neff
- add context manager syntax. Thanks to Matt Olsen.
- colorama didn't work on Windows when environment variable 'TERM' was set.
- fix pylint errors in client code.
- Changes to readme and other improvements by Marc Abramowitz and Zearin
tabs -> hide-auto was removed in d8017a04a8
because it was easier to do so compared to transforming it correctly when tabs
-> show was introduced. However, tabs -> auto-hide (the even older version)
wasn't removed, breaking config migration from earlier versions.
Fixes#1171.
- Support git submodules
- Revert the zc.buildout support hack from 0.26 because it causes breakage
- Improve non-ASCII filename handling with Bazaar on Windows.
Add a configurable userscript that fills login forms (i.e. the fiels
"Username" and "Password) of websites using a configurable backend where
the actual passwords are stored. The only backend yet is using the
password store "pass".
There are no public API changes in this release but it includes a behaviour
change that I wasn't comfortable putting in a patch release.
- Functions from hypothesis.strategies will no longer raise InvalidArgument on
bad arguments. Instead the same errors will be raised when a test using such
a strategy is run. This may improve startup time in some cases, but the main
reason for it is so that errors in strategies won't cause errors in loading,
and it can interact correctly with things like pytest.mark.skipif.
- Errors caused by accidentally invoking the legacy API are now much less
confusing, although still throw NotImplementedError.
- hypothesis.extra.django is 1.9 compatible.
- When tests are run with max_shrinks=0 this will now still rerun the test on
failure and will no longer print "Trying example:" before each run.
Additionally note() will now work correctly when used with max_shrinks=0.
Documented a quirk signaled by David Goldstein when writing decorators for
functions with keyword arguments. Avoided copying the globals, as signaled by
Benjamin Peterson (2015/12/09)
- ``deprecated_call()`` now works when the deprecated function has been already
called by another test in the same module.
- ``--pastebin`` option now works on Python 3.
- ``--pastebin`` now works correctly when captured output contains non-ascii
characters.
- Fix another error when collecting with a nasty __getattr__().
- fix the summary printed when no tests did run.
- a number of documentation modernizations wrt good practices.
* Don't emit unsubscriptable-object if the node is found
inside an abstract class.
* Add wrong-import-position to check_messages's decorator arguments
for ImportChecker.leave_module
This fixes an esoteric bug which occurs when ungrouped-imports and
wrong-import-order are disabled and pylint is executed on multiple files.
What happens is that without wrong-import-position in check_messages,
leave_module will never be called, which means that the first non-import node
from other files might leak into the current file,
leading to wrong-import-position being emitted by pylint.
* Fix a crash which occurred when old visit methods are encountered
in plugin modules.
* Don't emit import-self and cyclic-import for relative imports
of modules with the same name as the package itself.
This patch attempts to fix an issue where an error occuring in
misc/guiprocess or the editor process crashing would delete the
temporary file thus making it impossible to recover changes not commited
to the form field from the editor.
If we do it in tox.ini, there are two drawbacks:
- We have more stuff in PYTHONPATH even if we don't when actually using
qutebrowser.
- The separator is platform specific, so we can't easily do this in a portable
way in tox.ini.
This hopefully helps with a crash on Windows which happens from time to time
during some multi-window tabs.feature tests:
Traceback (most recent call last):
File "...\mainwindow\mainwindow.py", line 446, in closeEvent
self._do_close()
File "...\mainwindow\mainwindow.py", line 405, in _do_close
objreg.get('session-manager').save_last_window_session()
File "...\misc\sessions.py", line 247, in save_last_window_session
self._last_window_session = self._save_all()
File "...\misc\sessions.py", line 183, in _save_all
win_data['geometry'] = bytes(main_window.saveGeometry())
RuntimeError: wrapped C/C++ object of type MainWindow has been deleted
We now wait until the clipboard actually changed, which should make things run
better.
This should fix the cases where the expected value is empty in #1142.
- Fixed a mysterious problem that manifested in different ways: sometimes
hanging the process, sometimes making database connections fail.
- The XML report now has correct <source> elements when using a --source=
option somewhere besides the current directory.
- Fixed an unusual edge case of detecting source encodings
- Help messages that mention the command to use now properly use the actual
command name, which might be different than “coverage”.
A release with two new features.
- A 'characters' strategy for more flexible generation of text with particular
character ranges and types.
- Add support for preconditions to the rule based stateful testing.
This hopefully helps with issues on the Windows buildbot:
Error in atexit._run_exitfuncs:
Traceback (most recent call last):
File "C:\Users\florian\buildbot\slave\win8\build\.tox\py34\lib\shutil.py", line 371, in _rmtree_unsafe
os.unlink(fullname)
PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:\\Users\\florian\\AppData\\Local\\Temp\\qutebrowser-basedir-ixuexfeu\\data\\local-storage\\qrc__0.localstorage'
Before we didn't wait until the inspector window was hidden, which caused the
following tests to fail on our OS X buildbot:
==================================== ERRORS ====================================
_________ ERROR at teardown of test_fakekey_sending_key_to_the_website _________
[...]
tests/integration/testprocess.py:186: InvalidLine
----------------------------- Captured stdout call -----------------------------
[...]
INVALID: Traceback (most recent call last):
IGNORED: File "/Users/buildbot/buildbot/slave/osx/build/qutebrowser/app.py", line 109, in <lambda>
IGNORED: target_arg=target_arg))
IGNORED: File "/Users/buildbot/buildbot/slave/osx/build/qutebrowser/app.py", line 263, in process_pos_args
IGNORED: commandrunner.run_safely_init(cmd[1:])
IGNORED: File "/Users/buildbot/buildbot/slave/osx/build/qutebrowser/commands/runners.py", line 266, in run_safely_init
IGNORED: self.run(text, count)
IGNORED: File "/Users/buildbot/buildbot/slave/osx/build/qutebrowser/commands/runners.py", line 249, in run
IGNORED: result.cmd.run(self._win_id, args)
IGNORED: File "/Users/buildbot/buildbot/slave/osx/build/qutebrowser/commands/command.py", line 505, in run
IGNORED: self.handler(*posargs, **kwargs)
IGNORED: File "/Users/buildbot/buildbot/slave/osx/build/qutebrowser/browser/commands.py", line 1781, in fake_key
IGNORED: tab='current')
IGNORED: File "/Users/buildbot/buildbot/slave/osx/build/qutebrowser/utils/objreg.py", line 215, in get
IGNORED: reg = _get_registry(scope, window, tab)
IGNORED: File "/Users/buildbot/buildbot/slave/osx/build/qutebrowser/utils/objreg.py", line 202, in _get_registry
IGNORED: return _get_tab_registry(window, tab)
IGNORED: File "/Users/buildbot/buildbot/slave/osx/build/qutebrowser/utils/objreg.py", line 152, in _get_tab_registry
IGNORED: raise RegistryUnavailableError('tab')
INVALID: qutebrowser.utils.objreg.RegistryUnavailableError: tab
[...]
While this is a real issue, this test shouldn't affect the next one.
Since we have to wait for windows getting focused but Xvfb doesn't do that, we
skip this tests when running via Xvfb.
This worked before b0d4ebe because --debug was given and the
"args.loglevel.upper()" part was never executed.
However, loglevel is expected as a string, not as an int.
It's now based by the browser opening a second page after :stop is run rather
than timing-based, which hopefully should make it run more stable on Travis.
Fixes a bug where the user would be asked twice for a filename when
using :download without a dest-argument.
The problem was that we unconditionally overwrote filename, even if one
was given, thus discarding any "filename-finding-process" that we had
and asking the user again.
Instead, make it hashable and use collections.Counter instead of sorted
lists. This actually produces a nicer output for differences between
the counters.
webview uses QUrl to output the url and thus might convert some escape
sequences to their unicode characters. If we don't do the same
conversions here, we will "miss" the log message and fail the test.
- add __name__ attribute to testcases in TestCaseFunction to support the
@unittest.skip decorator on functions and methods.
- collecting tests if test module level obj has __getattr__().
- don't collect tests if their failure cannot be reported correctly e.g. they
are a callable instance of a class.
- fixed internal error when filtering tracebacks where one entry belongs to a
file which is no longer available.
- enhancement made to highlight in red the name of the failing tests so
they stand out in the output.
- minor fixes for interaction with OS X El Capitan system integrity
protection
If we don't do that, we can get this:
--- Logging error ---
Traceback (most recent call last):
File ".../python3.5/logging/__init__.py", line 984, in emit
self.flush()
File ".../python3.5/logging/__init__.py", line 964, in flush
self.stream.flush()
RuntimeError: reentrant call inside <_io.BufferedWriter name='<stderr>'>
Call stack:
[...]
File ".../qutebrowser/app.py", line 122, in qt_mainloop
return qApp.exec_()
File ".../qutebrowser/utils/objreg.py", line 118, in on_destroyed
log.destroy.debug("schedule removal: {}".format(name))
File ".../python3.5/logging/__init__.py", line 1267, in debug
self._log(DEBUG, msg, args, **kwargs)
File ".../python3.5/logging/__init__.py", line 1415, in _log
self.handle(record)
File ".../python3.5/logging/__init__.py", line 1425, in handle
self.callHandlers(record)
File ".../python3.5/logging/__init__.py", line 1487, in callHandlers
hdlr.handle(record)
File ".../python3.5/logging/__init__.py", line 855, in handle
self.emit(record)
File ".../python3.5/logging/__init__.py", line 984, in emit
self.flush()
File ".../python3.5/logging/__init__.py", line 964, in flush
self.stream.flush()
File ".../qutebrowser/misc/crashsignal.py", line 365, in interrupt
log.destroy.info("Do the same again to forcefully quit.")
Message: 'Do the same again to forcefully quit.'
Arguments: ()
The ua_fetch.py has been re-written entirely to find specific entries for
each browser based on diversity rather than sole popularity. The output
is now formatted to print the entries for each browser grouped together.
--faulthandler-timeout option is now properly supported in Python 3+; also a
warning is issued instead of an error on platforms without a
faulthandler.dump_traceback_later function.
- Fix inheritable sockets on Windows on Python 3.
- Fixed an issue with the forking server not starting any longer.
- Fixed SSL wrapping on platforms that supported opening sockets
by file descriptor.
- No longer log from the watchdog reloader.
- Unicode errors in hosts are now better catched or converted into
bad request errors.
When we don't include the start time in the measurement, the subprocess will
already start sleeping before we start measuring, which can lead to times
measured which are around 260-300ms.
Closes#1077.
There were two issues:
- Paths for coverage.py suddenly were absolute instead of relative, so we strip
the common base part if that happens.
/home/florian/proj/qutebrowser/git/qutebrowser/browser/cookies.py has 100%
coverage but is not in perfect_files!
/home/florian/proj/qutebrowser/git/qutebrowser/browser/http.py has 100%
coverage but is not in perfect_files!
[...]
- There was an io.UnsupportedOperationError in test_check_coverage.py because
of pytest-faulthandler, so we just don't load that in the subprocess.
Websites may set the rel attribute to whatever they want, so we just
care about stylesheets and icons and not the other stuff like wss
links (looking at you, GitHub), RSS-feeds, ...
With ui -> remove-finished-downloads set to -1, when a download was started
with auto_remove=True (like with :adblock-update), there was a QTimer set up
with timeout -1, which causes this instead of doing something sane:
WARNING: QTimer::singleShot: Timers cannot have negative timeouts
If we're in the middle of closing a WebPage, the webview will still be
registered, but already deleted by Qt - so we get a RuntimeError/TypeError
there.
This also makes the output of MHTMLWriter deterministic, by
1) Setting the boundary at object creation, allowing uuid.uuid4 to be
monkey patched
2) Outputting the files in sorted order (sorted by location), as python
dicts are unordered by default.
Version 0.11
------------
Released on November 8th 2015, codename Gleisbaumaschine.
- Added ``reloader_paths`` option to ``run_simple`` and other functions in
``werkzeug.serving``. This allows the user to completely override the Python
module watching of Werkzeug with custom paths.
- Many custom cached properties of Werkzeug's classes are now subclasses of
Python's ``property`` type.
- ``bind_to_environ`` now doesn't differentiate between implicit and explicit
default port numbers in ``HTTP_HOST``.
- ``BuildErrors`` are now more informative. They come with a complete sentence
as error message, and also provide suggestions.
- Fix a bug in the user agent parser where Safari's build number instead of
version would be extracted.
- Fixed issue where RedisCache set_many was broken for twemproxy, which doesn't
support the default MULTI command.
- ``mimetype`` parameters on request and response classes are now always
converted to lowercase.
- Changed cache so that cache never expires if timeout is 0. This also fixes
an issue with redis setex
- Werkzeug now assumes ``UTF-8`` as filesystem encoding on Unix if Python
detected it as ASCII.
- New optional `has` method on caches.
- Fixed various bugs in `parse_options_header`.
- If the reloader is enabled the server will now open the socket in the parent
process if this is possible. This means that when the reloader kicks in
the connection from client will wait instead of tearing down. This does
not work on all Python versions.
- Implemented PIN based authentication for the debugger. This can optionally
be disabled but is discouraged. This change was necessary as it has been
discovered that too many people run the debugger in production.
- Devserver no longer requires SSL module to be installed.
Version 0.10.5
--------------
(bugfix release, release date yet to be decided)
- Reloader: Correctly detect file changes made by moving temporary files over
the original, which is e.g. the case with PyCharm.
- Fix bool behavior of ``werkzeug.datastructures.ETags`` under Python 3
When a download was redirected or failed after a tab was closed, there was a
KeyError in the object registry.
Fixes#889. This is a regression introduced in
976f758da1 / #731.
With this change, no test should affect another one anymore. Changes in detail:
- Before each test, invalid lines are cleaned so the invalid output from the
previous test doesn't affect the next one.
- Before each test, qutebrowser is restarted if it was quit.
- After each test, the data is cleared properly in every case.
- If there was an invalid output, the test waits for 1s for more output, and
then terminates qutebrowser so it's restarted with a clean state.
We need to search for lines in the history because we could miss something
otherwise, but for subsequent wait_for calls, we really don't want to wait for
the same thing again.
This should make test_backforward.py more stable as it *actually* waits when
going back now. Before, it did produce failures such as this one on OS X:
____________________________ test_going_backforward ____________________________
[..]
@bdd.then(bdd.parsers.parse("The requests should be:\n{pages}"))
def list_of_loaded_pages(httpbin, pages):
requests = [httpbin.Request('GET', '/' + path.strip())
for path in pages.split('\n')]
> assert httpbin.get_requests() == requests
E assert [Request(verb...rward/1.txt')] == [Request(verb=...rward/2.txt')]
E At index 3 diff: Request(verb='GET', path='/data/backforward/1.txt') != Request(verb='GET', path='/data/backforward/2.txt')
E Full diff:
E [Request(verb='GET', path='/data/backforward/1.txt'),
E Request(verb='GET', path='/data/backforward/2.txt'),
E Request(verb='GET', path='/data/backforward/1.txt'),
E - Request(verb='GET', path='/data/backforward/1.txt')]
E ? ^
E + Request(verb='GET', path='/data/backforward/2.txt')]
E ? ^
tests/integration/features/conftest.py:85: AssertionError
In test_cache_existing_metadata_file() we are now getting the correct
path to the metadata files, thus making the test useful. This was the
last missing test, the cache is now 100% covered (issue#999).
- More work on supporting unusually encoded source.
- Files or directories with non-ASCII characters are now handled properly.
- Setting a trace function with sys.settrace was broken by a change in 4.0.1.
- Officially support PyPy 4.0, which required no changes, just updates to the
docs.
Fix utter breakage on Windows, introduced in 0.26. (The bug -- clearing the
environment unnecessarily -- could probably also cause locale-related problems
on other OSes.)
Before it couldn't get deleted because Qt still kept the icon database open in
some way.
By clearing it when shutting down, this works correctly.
Fixes#1017.
- Exception capturing now happens as early/late as possible in order to catch
all possible exceptions (including fixtures).
- Widgets registered by qtbot.addWidget are now closed before all other
fixtures are tear down.
- qtbot now has a new wait method which does a blocking wait while the event
loop continues to run, similar to QTest::qWait.
- raise RuntimeError instead of ImportError when failing to import any Qt
binding: raising the latter causes pluggy in pytest-2.8 to generate a subtle
warning instead of a full blown error.
New features:
* Add 'note' function which lets you include additional information in the
final test run's output.
* Add 'choices' strategy which gives you a choice function that emulates
random.choice.
* Add 'uuid' strategy that generates UUIDs'
* Add 'shared' strategy that lets you create a strategy that just generates a
single shared value for each test run
Bugs:
* Using strategies of the form streaming(x.flatmap(f)) with find or in stateful
testing would have caused InvalidArgument errors when the resulting values
were used (because code that expected to only be called within a test context
would be invoked).
The test was not using qutebrowsers DiskCache class at all but Qts
QNetworkDiskCache. As a result the code paths of DiskCache.remove()
were never visited.
* Do not complain about missing .gitattributes file.
* Normalize unicode representation and case of filenames.
* Drop Python 2.6 support.
* Support installation via zc.buildout better.
This is quite a small release, but deprecates some public API functions and
removes some internal API functionality so gets a minor version bump.
- All calls to the 'strategy' function are now deprecated, even ones which pass
just a SearchStrategy instance (which is still a no-op).
- Never documented hypothesis.extra entry_points mechanism has now been removed
(it was previously how hypothesis.extra packages were loaded and has been
deprecated and unused for some time)
- Some corner cases that could previously have produced an OverflowError when
simplifying failing cases using hypothesis.extra.datetimes (or dates or
times) have now been fixed.
- Hypothesis load time for first import has been significantly reduced - it
used to be around 250ms (on my SSD laptop) and now is around 100-150ms. This
almost never matters but was slightly annoying when using it in the console.
- hypothesis.strategies.randoms was previously missing from __all__.
The strict test condition before was violated by Qt internals which
seem to violate documented guarantees but are not part of qutebrowsers
code and thus can only be tested to a certain extent.
Instead of being a boolean value indicating whether or not to instantly remove
downloads when they finish, it's now an integer value representing the
number of milliseconds to wait before removing downloads when they
finish. The default value, -1, means that the downloads will not be
removed when they finished. This is the same behavior as the previous
default value of false.
Previously the tests were not adding any data to the cache, making the
tests for a cache size other than 0 meaningless.
The new tests create cache entries and fill them with some data that
can be tested against.
This broke the tests for older PyQt versions because the test had a
test_utils.Color(test_utils.Color(...)) object (double-wrapped), and the
comparisons failed there for some reason.
I think it makes more sense to filter for any text within a link rather
than just the text at the beginning. I've been playing around with this
a little and I like it a lot better.
When using numbers as link hints, It would be awesome if the link hint
strings themselves could also be updated based on how many links are
left, but I'm still figuring out how to do this.
What do you think?
The automatically fetched list includes popular user-agents but does not
guarantee any kind of diversity, so there are now a few statically
printed UAs from mobile browsers.
The script is based on a gist posted by @averrin and has been modified
to print the output according to the format expected by qutebrowser,
ready to be pasted into configtypes.py.
- Significantly improved performance of creating strategies using the functions
from the hypothesis.strategies module by deferring the calculation of their
repr until it was needed. This is unlikely to have been an performance issue
for you unless you were using flatmap, composite or stateful testing, but for
some cases it could be quite a significant impact.
- A number of cases where the repr of strategies build from lambdas is improved
- Add dates() and times() strategies to hypothesis.extra.datetimes
- Add new 'profiles' mechanism to the settings system
- Deprecates mutability of Settings, both the Settings.default top level
property and individual settings.
- A Settings object may now be directly initialized from a parent Settings.
- @given should now give a better error message if you attempt to use it with a
function that uses destructuring arguments (it still won't work, but it will
error more clearly),
- A number of spelling corrections in error messages
- py.test should no longer display the intermediate modules Hypothesis
generates when running in verbose mode
- Hypothesis should now correctly handle printing objects with non-ascii reprs
on python 3 when running in a locale that cannot handle ascii printing to
stdout.
- Add a unique=True argument to lists(). This is equivalent to unique_by=lambda
x: x, but offers a more convenient syntax.
- pytest.mark.qt_log_ignore now supports an extend parameter that will extend
the list of regexes used to ignore Qt messages (defaults to False).
- Fixed internal error when interacting with other plugins that raise an error,
hiding the original exception.
- When combining data files, unreadable files will now generate a warning
instead of failing the command. This is more in line with the older
coverage.py v3.7.1 behavior, which silently ignored unreadable files.
- The --skip-covered option would skip reporting on 100% covered files, but
also skipped them when calculating total coverage. This was wrong, it should
only remove lines from the report, not change the final answer. This is now
fixed.
- In 4.0, the data file recorded a summary of the system on which it was run.
Combined data files would keep all of those summaries. This could lead to
enormous data files consisting of mostly repetitive useless information. That
summary is now gone. If you want summary information,
get in touch, and we'll figure out a better way to do it.
- Test suites that mocked os.path.exists would experience strange failures, due
to coverage.py using their mock inadvertently. This is now fixed.
- Importing a ``__init__`` module explicitly would lead to an error:
``AttributeError: 'module' object has no attribute '__path__'``. This is now
fixed.
- Code that uses ``sys.settrace(sys.gettrace())`` used to incur a more than 2x
speed penalty. Now there's no penalty at all.
- Pyexpat C code will no longer be recorded as a source file.
- The source kit now contains all of the files needed to have a complete source
tree.
* configuration: have a stable order for sections
* testlib: clean out deprecated TestCase methods, move pytest specifics to pytest.py
* fix a few python3 bugs in umessage, configuration and optik_ext modules
* testlib: report failures and skips in generative tests properly
* optik_ext: return bytes as ints and not floats
- Colour progressbar correctly for low number of tests
- Fix error case when deactivating pytest-sugar using --lf together with
--nosugar
- --nosugar deprecated, use -p no:sugar
Upstream changelog:
New Features
- Added the D104 error code - "Missing docstring in public package". This new
error is turned on by default. Missing docstring in __init__.py files which
previously resulted in D100 errors ("Missing docstring in public module")
will now result in D104.
- Added the D105 error code - "Missing docstring in magic method'. This new
error is turned on by default. Missing docstrings in magic method which
previously resulted in D102 error ("Missing docstring in public method") will
now result in D105. Note that exceptions to this rule are variadic magic
methods - specifically __init__, __call__ and __new__, which will be
considered non-magic and missing docstrings in them will result in D102.
- Support the option to exclude all error codes. Running pep257 with --select=
(or select= in the configuration file) will exclude all errors which could
then be added one by one using add-select. Useful for projects new to pep257.
- Added check D211: No blank lines allowed before class docstring. This change
is a result of a change to the official PEP257 convention. Therefore, D211
will now be checked by default instead of D203, which required a single blank
line before a class docstring.
- Configuration files are now handled correctly. The closer a configuration
file is to a checked file the more it matters. Configuration files no longer
support explain, source, debug, verbose or count.
Bug Fixes
- On Python 2.x, D302 ("Use u""" for Unicode docstrings") is not reported if
unicode_literals is imported from __future__.
- Fixed a bug where there was no executable for pep257 on Windows.
Upstream changelog:
- Improve the performance of `six.int2byte` on Python 3.
- Don't add the `winreg` module to `six.moves` on non-Windows platforms.
- Add `six.moves.getcwd` and `six.moves.getcwdu`.
- Add `create_unbound_method` to create unbound methods.
Upstream changelog:
* Added support for changing working directory in tests. Previously changing
working directory would disable coverage measurements in suprocesses.
* Fixed broken handling for ``--cov-report=annotate``.
This class contains validation code shared by ConfirmQuit and
URLSegmentList, that is it checks for duplicate values and compares
each value to valid_values.
Also known as Ctrl-A/Ctrl-X. You can now specify which parts of the URL
should be searched for numbers.
The setting is general->url-incdec-segments and it's a set with valid
values of 'host', 'path', 'query' and 'anchor'.
This caused a PendingDeprecationWarning with Python 3.5:
Traceback (most recent call last):
File "/home/florian/proj/qutebrowser/git/qutebrowser/utils/debug.py", line 237, in log_time
yield
File "/home/florian/proj/qutebrowser/git/qutebrowser/app.py", line 433, in _init_late_modules
next(reader)
StopIteration
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/florian/proj/qutebrowser/git/qutebrowser/app.py", line 433, in _init_late_modules
next(reader)
File "/usr/lib64/python3.5/contextlib.py", line 77, in __exit__
self.gen.throw(type, value, traceback)
PendingDeprecationWarning: generator 'log_time' raised StopIteration
This was missing before, causing a (hidden) exception with Python < 3.5, and
this with 3.5:
TypeError: readData() takes 1 positional argument but 2 were given
During handling of the above exception, another exception occurred:
SystemError: PyEval_EvalFrameEx returned a result with an error set
Fixes#969.
This is needed for interpolation since this change in Python 3.4:
https://hg.python.org/cpython/rev/267422f7c927
This broke qutebrowser in Debian experimental when updating python from
3.4.3-8 to 3.4.3-9 as they pulled from hg.
Fixes#968.
Upstream changelog:
* Fixed a bug that deranged the tree when part of it was
removed. Thanks to Eric Weiser for the patch and John Wiseman for a
test.
* Fixed a parse bug with the html5lib tree-builder. Thanks to Roel
Kramer for the patch.
* Improved the implementation of CSS selector grouping. Thanks to
Orangain for the patch.
* Fixed the test_detect_utf8 test so that it works when chardet is
installed.
* Corrected the output of Declaration objects.
- Hide modifications Hypothesis needs to make to sys.path by undoing them after
we've imported the relevant modules. This is a workaround for issues
cryptography experienced on windows.
- Slightly improved performance of drawing from sampled_from on large lists of
alternatives.
- Significantly improved performance of drawing from one_of or strategies using
| (note this includes a lot of strategies internally - floats() and
integers() both fall into this category). There turned out to be a massive
performance regression introduced in 1.10.0 affecting these which probably
would have made tests using Hypothesis significantly slower than they should
have been.
- Better argument validation for datetimes() strategy - previously setting
max_year < datetime.MIN_YEAR or min_year > datetime.MAX_YEAR would not have
raised an InvalidArgument error and instead would have behaved confusingly.
- Compatibility with being run on pytest < 2.7 (achieved by disabling the
plugin).
Bug fixes:
- Settings(database=my_db) would not be correctly inherited when used as a
default setting, so that newly created settings would use the database_file
setting and create an SQLite example database.
- Settings.default.database = my_db would previously have raised an error and
now works.
- Timeout could sometimes be significantly exceeded if during simplification
there were a lot of examples tried that didn't trigger the bug.
- When loading a heavily simplified example using a basic() strategy from the
database this could cause Python to trigger a recursion error.
- Remove use of deprecated API in pytest plugin so as to not emit warning
Misc:
- hypothesis-pytest is now part of hypothesis core. This should have no
externally visible consequences, but you should update your dependencies to
remove hypothesis-pytest and depend on only Hypothesis.
- Better repr for hypothesis.extra.datetimes() strategies.
- Add .close() method to abstract base class for Backend (it was already
present in the main implemnetation).
Changelog:
Backward incompatibilities:
- Python versions supported are now:
- CPython 2.6, 2.7, 3.3, 3.4 and 3.5
- PyPy2 2.4, 2.6
- PyPy3 2.4
- The original command line switches (-x to run a program, etc) are no longer
supported.
- The COVERAGE_OPTIONS environment variable is no longer supported. It was a
hack for --timid before configuration files were available.
- The original module-level function interface to coverage.py is no longer
supported. You must now create a coverage.Coverage object, and use methods on
it.
- The Coverage.use_cache method is no longer supported.
- The private method Coverage._harvest_data is now called Coverage.get_data(),
and returns the CoverageData containing the collected data.
- Coverage.py is now licensed under the Apache 2.0 license. See NOTICE.txt for
details.
- Coverage.py kits no longer include tests and docs. If you were using them,
get in touch and let me know how.
Major new features:
- Plugins: third parties can write plugins to add file support for non-Python
files, such as web application templating engines, or languages that compile
down to Python. See Plugins for how to use plugins, and Plugin classes for
details of how to write them. A plugin for measuring Django template coverage
is available: django_coverage_plugin
- Gevent, eventlet, and greenlet are now supported. The [run] concurrency
setting, or the --concurrency command line switch, specifies the concurrency
library in use. Huge thanks to Peter Portante for initial implementation, and
to Joe Jevnik for the final insight that completed the work.
- The data storage has been re-written, using JSON instead of pickle. The
CoverageData class is a new supported API to the contents of the data file.
Data files from older versions of coverage.py can be converted to the new
format with python -m coverage.pickle2json.
- Wildly experimental: support for measuring processes started by the
multiprocessing module. To use, set --concurrency=multiprocessing, either on
the command line or in the .coveragerc file. Thanks, Eduardo Schettino.
Currently, this does not work on Windows.
New features:
- Options are now also read from a setup.cfg file, if any. Sections are
prefixed with “coverage:”, so the [run] options will be read from the
[coverage:run] section of setup.cfg.
- The HTML report now has filtering. Type text into the Filter box on the index
page, and only modules with that text in the name will be shown. Thanks,
Danny Allen.
- A new option: coverage report --skip-covered (or [report] skip_covered) will
reduce the number of files reported by skipping files with 100% coverage.
Thanks, Krystian Kichewko. This means that empty __init__.py files will be
skipped, since they are 100% covered.
- You can now specify the --fail-under option in the .coveragerc file as the
[report] fail_under option.
- The report -m command now shows missing branches when reporting on branch
coverage. Thanks, Steve Leonard.
- The coverage combine command now accepts any number of directories or files
as arguments, and will combine all the data from them. This means you don’t
have to copy the files to one directory before combining. Thanks, Christine
Lytwynec.
- A new configuration option for the XML report: [xml] package_depth controls
which directories are identified as packages in the report. Directories
deeper than this depth are not reported as packages. The default is that all
directories are reported as packages. Thanks, Lex Berezhny.
- A new configuration option, [run] note, lets you set a note that will be
stored in the runs section of the data file. You can use this to annotate the
data file with any information you like.
- The COVERAGE_DEBUG environment variable can be used to set the [run] debug
configuration option to control what internal operations are logged.
- A new version identifier is available, coverage.version_info, a plain tuple
of values similar to sys.version_info.
Improvements:
- Coverage.py now always adds the current directory to sys.path, so that
plugins can import files in the current directory.
- Coverage.py now accepts a directory name for coverage run and will run a
__main__.py found there, just like Python will. Thanks, Dmitry Trofimov.
- The --debug switch can now be used on any command.
- Reports now use file names with extensions. Previously, a report would
describe a/b/c.py as “a/b/c”. Now it is shown as “a/b/c.py”. This allows for
better support of non-Python files.
- Missing branches in the HTML report now have a bit more information in the
right-hand annotations. Hopefully this will make their meaning clearer.
- The XML report now contains a <source> element. Thanks Stan Hu.
- The XML report now includes a missing-branches attribute. Thanks, Steve Peak.
This is not a part of the Cobertura DTD, so the XML report no longer
references the DTD.
- The XML report now reports each directory as a package again. This was a bad
regression, I apologize.
- In parallel mode, coverage erase will now delete all of the data files.
- A new warning is possible, if a desired file isn’t measured because it was
imported before coverage.py was started.
- The coverage.process_startup() function now will start coverage measurement
only once, no matter how many times it is called. This fixes problems due to
unusual virtualenv configurations.
- Unrecognized configuration options will now print an error message and stop
coverage.py. This should help prevent configuration mistakes from passing
silently.
API changes:
- The class defined in the coverage module is now called Coverage instead of
coverage, though the old name still works, for backward compatibility.
- You can now programmatically adjust the configuration of coverage.py by
calling Coverage.set_option() after construction. Coverage.get_option() reads
the configuration values.
- If the config_file argument to the Coverage constructor is specified as
”.coveragerc”, it is treated as if it were True. This means setup.cfg is also
examined, and a missing file is not considered an error.
Bug fixes:
- The textual report and the HTML report used to report partial branches
differently for no good reason. Now the text report’s “missing branches”
column is a “partial branches” column so that both reports show the same
numbers. This closes issue 342.
- The fail-under value is now rounded the same as reported results, preventing
paradoxical results, fixing issue 284.
- Branch coverage couldn’t properly handle certain extremely long files. This
is now fixed, closing issue 359.
- Branch coverage didn’t understand yield statements properly. Mickie Betz
persisted in pursuing this despite Ned’s pessimism. Fixes issue 308 and issue
324.
- Files with incorrect encoding declaration comments are no longer ignored by
the reporting commands.
- Empty files are now reported as 100% covered in the XML report, not 0%
covered.
- The XML report will now create the output directory if need be. Thanks, Chris
Rose.
- HTML reports no longer raise UnicodeDecodeError if a Python file has
undecodable characters.
- The annotate command will now annotate all files, not just ones relative to
the current directory.
Changes:
- Don't mark shadowing variable as 'used'.
- Test that used variable in loop is considered used
- Don't report UnusedImport when binding global name
- Support Python 3.5 async/await statements for Pyflakes.
- Use os.linesep for Windows compatibility
- os.chmod() supports only read-only flag operations on Windows
Previously, every tab had its own search term. This sets single search term per
window. using `/hello`, `gt`, and `n` will search for `hello` in the 2nd tab.
This fixes issue #940
Bug fixes:
- When running Hypothesis tests in parallel (e.g. using pytest-xdist) there was
a race condition caused by code generation.
- Example databases are now cached per thread so as to not use sqlite
connections from multiple threads. This should make Hypothesis now entirely
thread safe.
- floats() with only min_value or max_value set would have had a very bad
distribution.
- Running on 3.5, Hypothesis would have emitted deprecation warnings because of
use of inspect.getargspec
The config option "content host-blocking-whitelist" may contain comma
separated domains that are exempt from host blocking.
The listed domains may contain the wildcards "*" and "?" to match many
and one character, respectively.
You need to run :adblock-update after modifying the list.
Changelog:
- Allow 'dev', 'rc', or other non-integer version strings in `importorskip`.
Thanks to Eric Hunsberger for the PR.
- fix issue856: consider --color parameter in all outputs (for example
--fixtures). Thanks Barney Gale for the report and Bruno Oliveira for the PR.
- fix issue855: passing str objects as `plugins` argument to pytest.main
is now interpreted as a module name to be imported and registered as a
plugin, instead of silently having no effect.
Thanks xmo-odoo for the report and Bruno Oliveira for the PR.
- fix issue744: fix for ast.Call changes in Python 3.5+. Thanks
Guido van Rossum, Matthias Bussonnier, Stefan Zimmermann and
Thomas Kluyver.
- fix issue842: applying markers in classes no longer propagate this markers
to superclasses which also have markers.
Thanks xmo-odoo for the report and Bruno Oliveira for the PR.
- preserve warning functions after call to pytest.deprecated_call. Thanks
Pieter Mulder for PR.
- fix issue854: autouse yield_fixtures defined as class members of
unittest.TestCase subclasses now work as expected.
Thannks xmo-odoo for the report and Bruno Oliveira for the PR.
- fix issue833: --fixtures now shows all fixtures of collected test files, instead of just the
fixtures declared on the first one.
Thanks Florian Bruhin for reporting and Bruno Oliveira for the PR.
- fix issue863: skipped tests now report the correct reason when a skip/xfail
condition is met when using multiple markers.
Thanks Raphael Pierzina for reporting and Bruno Oliveira for the PR.
- optimized tmpdir fixture initialization, which should make test sessions
faster (specially when using pytest-xdist). The only visible effect
is that now pytest uses a subdirectory in the $TEMP directory for all
directories created by this fixture (defaults to $TEMP/pytest-$USER).
Thanks Bruno Oliveira for the PR.
But only hide those tags that aren't children (or descendants) of other
tags that get replaced anyway. That is needed because sometimes, flash
videos are in <embed> tags, sometimgs in <object> tags and sometimes in
<embed> tags within <object> tags.
Furthermore enforce our "click here" link to have transparent background
(and in future: remove as many properties from website specific CSS
stylesheets).
This means: also replace <object> tags and put the replacement message
even higher in the z-order. (Latter had to be done to make it the
replacement visible on espn _dot_ com)
|<<general-site-specific-quirks,site-specific-quirks>>|Enable workarounds for broken sites.
|<<general-default-encoding,default-encoding>>|Default encoding to use for websites.
|<<general-new-instance-open-target,new-instance-open-target>>|How to open links in an existing instance if a new one is launched.
|<<general-log-javascript-console,log-javascript-console>>|Whether to log javascript console messages.
|<<general-log-javascript-console,log-javascript-console>>|How to log javascript console messages.
|<<general-save-session,save-session>>|Whether to always save the open pages.
|<<general-session-default-name,session-default-name>>|The name of the session to save by default, or empty for the last loaded session.
|<<general-url-incdec-segments,url-incdec-segments>>|The URL segments where `:navigate increment/decrement` will search for a number.
|==============
.Quick reference for section ``ui''
@@ -41,12 +42,13 @@
|<<ui-user-stylesheet,user-stylesheet>>|User stylesheet to use (absolute filename, filename relative to the config directory or CSS string). Will expand environment variables.
|<<ui-css-media-type,css-media-type>>|Set the CSS media type.
|<<ui-smooth-scrolling,smooth-scrolling>>|Whether to enable smooth scrolling for webpages.
|<<ui-remove-finished-downloads,remove-finished-downloads>>|Whether to remove finished downloads automatically.
|<<ui-remove-finished-downloads,remove-finished-downloads>>|Number of milliseconds to wait before removing finished downloads. Will not be removed if value is -1.
|<<ui-hide-statusbar,hide-statusbar>>|Whether to hide the statusbar unless a message is shown.
|<<ui-statusbar-padding,statusbar-padding>>|Padding for statusbar (top, bottom, left, right).
|<<ui-window-title-format,window-title-format>>|The format to use for the window title. The following placeholders are defined:
|<<ui-hide-mouse-cursor,hide-mouse-cursor>>|Whether to hide the mouse cursor.
|<<ui-modal-js-dialog,modal-js-dialog>>|Use standard JavaScript modal dialog for alert() and confirm()
|<<ui-hide-wayland-decoration,hide-wayland-decoration>>|Hide the window decoration when using wayland (requires restart)
|==============
.Quick reference for section ``network''
@@ -76,6 +78,8 @@
|<<completion-web-history-max-items,web-history-max-items>>|How many URLs to show in the web history.
|<<completion-quick-complete,quick-complete>>|Whether to move on to the next part when there's only one possible completion left.
|<<completion-shrink,shrink>>|Whether to shrink the completion to be smaller than the configured size if there are no scrollbars.
|<<completion-scrollbar-width,scrollbar-width>>|Width of the scrollbar in the completion window (in px).
|<<completion-scrollbar-padding,scrollbar-padding>>|Padding of scrollbar handle in completion window (in px).
|==============
.Quick reference for section ``input''
@@ -114,6 +118,7 @@
|<<tabs-indicator-width,indicator-width>>|Width of the progress indicator (0 to disable).
|<<tabs-tabs-are-windows,tabs-are-windows>>|Whether to open windows instead of tabs.
|<<tabs-title-format,title-format>>|The format to use for the tab title. The following placeholders are defined:
|<<tabs-title-alignment,title-alignment>>|Alignment of the text inside of tabs
|<<tabs-mousewheel-tab-switching,mousewheel-tab-switching>>|Switch between tabs using the mouse wheel.
|<<tabs-padding,padding>>|Padding for tabs (top, bottom, left, right).
|<<tabs-indicator-padding,indicator-padding>>|Padding for indicators (top, bottom, left, right).
@@ -159,6 +164,8 @@
|<<content-cookies-store,cookies-store>>|Whether to store cookies.
|<<content-host-block-lists,host-block-lists>>|List of URLs of lists which contain hosts to block.
|<<content-host-blocking-enabled,host-blocking-enabled>>|Whether host blocking is enabled.
|<<content-host-blocking-whitelist,host-blocking-whitelist>>|List of domains that should always be loaded, despite being ad-blocked.
|<<content-enable-pdfjs,enable-pdfjs>>|Enable pdf.js to view PDF files in the browser.
|==============
.Quick reference for section ``hints''
@@ -169,10 +176,11 @@
|<<hints-opacity,opacity>>|Opacity for hints.
|<<hints-mode,mode>>|Mode to use for hints.
|<<hints-chars,chars>>|Chars used for hint strings.
|<<hints-min-chars,min-chars>>|Mininum number of chars used for hint strings.
|<<hints-min-chars,min-chars>>|Minimum number of chars used for hint strings.
|<<hints-scatter,scatter>>|Whether to scatter hint key chains (like Vimium) or not (like dwb).
|<<hints-uppercase,uppercase>>|Make chars in hint strings uppercase.
|<<hints-auto-follow,auto-follow>>|Whether to auto-follow a hint if there's only one left.
|<<hints-dictionary,dictionary>>|The dictionary file to be used by the word hints.
|<<hints-auto-follow,auto-follow>>|Follow a hint immediately when the hint text is completely matched.
|<<hints-next-regexes,next-regexes>>|A comma-separated list of regexes to use for 'next' links.
|<<hints-prev-regexes,prev-regexes>>|A comma-separated list of regexes to use for 'prev' links.
|==============
@@ -193,8 +201,10 @@
|<<colors-completion.item.selected.border.top,completion.item.selected.border.top>>|Top border color of the completion widget category headers.
|<<colors-completion.item.selected.border.bottom,completion.item.selected.border.bottom>>|Bottom border color of the selected completion item.
|<<colors-completion.match.fg,completion.match.fg>>|Foreground color of the matched text in the completion.
|<<colors-completion.scrollbar.fg,completion.scrollbar.fg>>|Color of the scrollbar handle in completion view.
|<<colors-completion.scrollbar.bg,completion.scrollbar.bg>>|Color of the scrollbar in completion view
|<<colors-statusbar.fg,statusbar.fg>>|Foreground color of the statusbar.
|<<colors-statusbar.bg,statusbar.bg>>|Foreground color of the statusbar.
|<<colors-statusbar.bg,statusbar.bg>>|Background color of the statusbar.
|<<colors-statusbar.fg.error,statusbar.fg.error>>|Foreground color of the statusbar if there was an error.
|<<colors-statusbar.bg.error,statusbar.bg.error>>|Background color of the statusbar if there was an error.
|<<colors-statusbar.fg.warning,statusbar.fg.warning>>|Foreground color of the statusbar if there is a warning.
@@ -211,7 +221,8 @@
|<<colors-statusbar.bg.caret-selection,statusbar.bg.caret-selection>>|Background color of the statusbar in caret mode with a selection
|<<colors-statusbar.progress.bg,statusbar.progress.bg>>|Background color of the progress bar.
|<<colors-statusbar.url.fg,statusbar.url.fg>>|Default foreground color of the URL in the statusbar.
|<<colors-statusbar.url.fg.success,statusbar.url.fg.success>>|Foreground color of the URL in the statusbar on successful load.
|<<colors-statusbar.url.fg.success,statusbar.url.fg.success>>|Foreground color of the URL in the statusbar on successful load (http).
|<<colors-statusbar.url.fg.success.https,statusbar.url.fg.success.https>>|Foreground color of the URL in the statusbar on successful load (https).
|<<colors-statusbar.url.fg.error,statusbar.url.fg.error>>|Foreground color of the URL in the statusbar on error.
|<<colors-statusbar.url.fg.warn,statusbar.url.fg.warn>>|Foreground color of the URL in the statusbar when there's a warning.
|<<colors-statusbar.url.fg.hover,statusbar.url.fg.hover>>|Foreground color of the URL in the statusbar for hovered links.
@@ -219,8 +230,10 @@
|<<colors-tabs.bg.odd,tabs.bg.odd>>|Background color of unselected odd tabs.
|<<colors-tabs.fg.even,tabs.fg.even>>|Foreground color of unselected even tabs.
|<<colors-tabs.bg.even,tabs.bg.even>>|Background color of unselected even tabs.
|<<colors-tabs.fg.selected,tabs.fg.selected>>|Foreground color of selected tabs.
|<<colors-tabs.bg.selected,tabs.bg.selected>>|Background color of selected tabs.
|<<colors-tabs.fg.selected.odd,tabs.fg.selected.odd>>|Foreground color of selected odd tabs.
|<<colors-tabs.bg.selected.odd,tabs.bg.selected.odd>>|Background color of selected odd tabs.
|<<colors-tabs.fg.selected.even,tabs.fg.selected.even>>|Foreground color of selected even tabs.
|<<colors-tabs.bg.selected.even,tabs.bg.selected.even>>|Background color of selected even tabs.
|<<colors-tabs.bg.bar,tabs.bg.bar>>|Background color of the tab bar.
|<<colors-tabs.indicator.start,tabs.indicator.start>>|Color gradient start for the tab indicator.
|<<colors-tabs.indicator.stop,tabs.indicator.stop>>|Color gradient end for the tab indicator.
@@ -294,7 +307,7 @@ Default: +pass:[true]+
=== startpage
The default page(s) to open at the start, separated by commas.
Default: +pass:[https://www.duckduckgo.com]+
Default: +pass:[https://duckduckgo.com]+
[[general-default-page]]
=== default-page
@@ -335,7 +348,8 @@ Default: +pass:[15000]+
=== editor
The editor (and arguments) to use for the `open-editor` command.
Use `{}` for the filename. The value gets split like in a shell, so you can use `"` or `'` to quote arguments.
The arguments get split like in a shell, so you can use `"` or `'` to quote them.
`{}` gets replaced by the filename of the file to be edited.
Default: +pass:[gvim -f "{}"]+
@@ -428,14 +442,15 @@ Default: +pass:[tab]+
[[general-log-javascript-console]]
=== log-javascript-console
Whether to log javascript console messages.
How to log javascript console messages.
Valid values:
* +true+
* +false+
* +none+: Don't log messages.
* +debug+: Log messages with debug level.
* +info+: Log messages with info level.
Default: +pass:[false]+
Default: +pass:[debug]+
[[general-save-session]]
=== save-session
@@ -454,6 +469,19 @@ The name of the session to save by default, or empty for the last loaded session
Default: empty
[[general-url-incdec-segments]]
=== url-incdec-segments
The URL segments where `:navigate increment/decrement` will search for a number.
Valid values:
* +host+
* +path+
* +query+
* +anchor+
Default: +pass:[path,query]+
== ui
General options related to the user interface.
@@ -570,14 +598,9 @@ Default: +pass:[false]+
[[ui-remove-finished-downloads]]
=== remove-finished-downloads
Whether to remove finished downloads automatically.
Number of milliseconds to wait before removing finished downloads. Will not be removed if value is -1.
Valid values:
* +true+
* +false+
Default: +pass:[false]+
Default: +pass:[-1]+
[[ui-hide-statusbar]]
=== hide-statusbar
@@ -605,6 +628,7 @@ The format to use for the window title. The following placeholders are defined:
* `{title}`: The title of the current web page
* `{title_sep}`: The string ` - ` if a title is set, empty otherwise.
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.