* Package: media-sound/beets-1.4.9-r2 * Repository: gentoo * Maintainer: guillaumeseren@gmail.com proxy-maint@gentoo.org * USE: abi_x86_64 amd64 elibc_glibc kernel_linux python_single_target_python3_7 test userland_GNU * FEATURES: network-sandbox preserve-libs sandbox test userpriv usersandbox * Using python3.7 to build >>> Unpacking source... >>> Unpacking beets-1.4.9.tar.gz to /var/tmp/portage/media-sound/beets-1.4.9-r2/work >>> Source unpacked in /var/tmp/portage/media-sound/beets-1.4.9-r2/work >>> Preparing source in /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9 ... * no chromaprint: * removing chroma * no ffmpeg: * removing convert * no icu: * removing loadext * no lastfm: * removing lastgenre * removing lastimport * no mpd: * removing bpd * removing mpdstats * no webserver: * removing web * no thumbnail: * removing thumbnails * no badfiles: * removing badfiles * no discogs: * removing discogs * no replaygain: * removing replaygain >>> Source prepared. >>> Configuring source in /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9 ... >>> Source configured. >>> Compiling source in /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9 ... python3.7 setup.py build -j 1 running build running build_py creating /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets copying beets/vfs.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets copying beets/random.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets copying beets/plugins.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets copying beets/mediafile.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets copying beets/logging.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets copying beets/library.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets copying beets/importer.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets copying beets/art.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets copying beets/__main__.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets copying beets/__init__.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets creating /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets/ui copying beets/ui/commands.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets/ui copying beets/ui/__init__.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets/ui creating /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets/autotag copying beets/autotag/mb.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets/autotag copying beets/autotag/match.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets/autotag copying beets/autotag/hooks.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets/autotag copying beets/autotag/__init__.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets/autotag creating /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets/util copying beets/util/pipeline.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets/util copying beets/util/hidden.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets/util copying beets/util/functemplate.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets/util copying beets/util/enumeration.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets/util copying beets/util/confit.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets/util copying beets/util/bluelet.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets/util copying beets/util/artresizer.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets/util copying beets/util/__init__.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets/util creating /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets/dbcore copying beets/dbcore/types.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets/dbcore copying beets/dbcore/queryparse.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets/dbcore copying beets/dbcore/query.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets/dbcore copying beets/dbcore/db.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets/dbcore copying beets/dbcore/__init__.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets/dbcore creating /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/zero.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/types.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/the.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/subsonicupdate.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/spotify.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/sonosupdate.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/smartplaylist.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/scrub.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/rewrite.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/random.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/plexupdate.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/playlist.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/play.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/permissions.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/mpdupdate.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/missing.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/mbsync.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/mbsubmit.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/mbcollection.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/lyrics.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/kodiupdate.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/keyfinder.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/ipfs.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/inline.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/info.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/importfeeds.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/importadded.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/ihate.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/hook.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/gmusic.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/fuzzy.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/ftintitle.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/fromfilename.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/freedesktop.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/filefilter.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/fetchart.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/export.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/embyupdate.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/embedart.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/edit.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/duplicates.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/cue.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/bucket.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/bpm.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/bench.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/beatport.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/acousticbrainz.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/absubmit.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug copying beetsplug/__init__.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug creating /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug/metasync copying beetsplug/metasync/itunes.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug/metasync copying beetsplug/metasync/amarok.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug/metasync copying beetsplug/metasync/__init__.py -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beetsplug/metasync running egg_info writing beets.egg-info/PKG-INFO writing dependency_links to beets.egg-info/dependency_links.txt writing entry points to beets.egg-info/entry_points.txt writing requirements to beets.egg-info/requires.txt writing top-level names to beets.egg-info/top_level.txt reading manifest file 'beets.egg-info/SOURCES.txt' reading manifest template 'MANIFEST.in' warning: no previously-included files matching '*.pyc' found under directory 'test/rsrc' warning: no previously-included files matching '*.pyo' found under directory 'test/rsrc' no previously-included directories found matching 'docs/_build' warning: no files found matching '*' under directory 'beetsplug/web/templates' warning: no files found matching '*' under directory 'beetsplug/web/static' warning: no files found matching 'beetsplug/lastgenre/genres.txt' warning: no files found matching 'beetsplug/lastgenre/genres-tree.yaml' warning: no previously-included files matching '.DS_Store' found anywhere in distribution writing manifest file 'beets.egg-info/SOURCES.txt' copying beets/config_default.yaml -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets copying beets/ui/completion_base.sh -> /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9_python3.7/lib/beets/ui warning: build_py: byte-compiling is disabled, skipping. python3.7 setup.py build_sphinx -b man --build-dir=docs/build running build_sphinx Running Sphinx v2.4.4 making output directory... done building [mo]: targets for 0 po files that are out of date building [man]: all manpages updating environment: [new config] 76 added, 0 changed, 0 removed reading sources... [ 1%] changelog reading sources... [ 2%] dev/api reading sources... [ 3%] dev/index reading sources... [ 5%] dev/media_file reading sources... [ 6%] dev/plugins reading sources... [ 7%] faq reading sources... [ 9%] guides/advanced reading sources... [ 10%] guides/index reading sources... [ 11%] guides/main reading sources... [ 13%] guides/tagger reading sources... [ 14%] index reading sources... [ 15%] plugins/absubmit reading sources... [ 17%] plugins/acousticbrainz reading sources... [ 18%] plugins/badfiles reading sources... [ 19%] plugins/beatport reading sources... [ 21%] plugins/bpd reading sources... [ 22%] plugins/bpm reading sources... [ 23%] plugins/bucket reading sources... [ 25%] plugins/chroma reading sources... [ 26%] plugins/convert reading sources... [ 27%] plugins/discogs reading sources... [ 28%] plugins/duplicates reading sources... [ 30%] plugins/edit reading sources... [ 31%] plugins/embedart reading sources... [ 32%] plugins/embyupdate reading sources... [ 34%] plugins/export reading sources... [ 35%] plugins/fetchart reading sources... [ 36%] plugins/filefilter reading sources... [ 38%] plugins/freedesktop reading sources... [ 39%] plugins/fromfilename reading sources... [ 40%] plugins/ftintitle reading sources... [ 42%] plugins/fuzzy reading sources... [ 43%] plugins/gmusic reading sources... [ 44%] plugins/hook reading sources... [ 46%] plugins/ihate reading sources... [ 47%] plugins/importadded reading sources... [ 48%] plugins/importfeeds reading sources... [ 50%] plugins/index reading sources... [ 51%] plugins/info reading sources... [ 52%] plugins/inline reading sources... [ 53%] plugins/ipfs reading sources... [ 55%] plugins/keyfinder reading sources... [ 56%] plugins/kodiupdate reading sources... [ 57%] plugins/lastgenre reading sources... [ 59%] plugins/lastimport reading sources... [ 60%] plugins/loadext reading sources... [ 61%] plugins/lyrics reading sources... [ 63%] plugins/mbcollection reading sources... [ 64%] plugins/mbsubmit reading sources... [ 65%] plugins/mbsync reading sources... [ 67%] plugins/metasync reading sources... [ 68%] plugins/missing reading sources... [ 69%] plugins/mpdstats reading sources... [ 71%] plugins/mpdupdate reading sources... [ 72%] plugins/permissions reading sources... [ 73%] plugins/play reading sources... [ 75%] plugins/playlist reading sources... [ 76%] plugins/plexupdate reading sources... [ 77%] plugins/random reading sources... [ 78%] plugins/replaygain reading sources... [ 80%] plugins/rewrite reading sources... [ 81%] plugins/scrub reading sources... [ 82%] plugins/smartplaylist reading sources... [ 84%] plugins/sonosupdate reading sources... [ 85%] plugins/spotify reading sources... [ 86%] plugins/subsonicupdate reading sources... [ 88%] plugins/the reading sources... [ 89%] plugins/thumbnails reading sources... [ 90%] plugins/types reading sources... [ 92%] plugins/web reading sources... [ 93%] plugins/zero reading sources... [ 94%] reference/cli reading sources... [ 96%] reference/config reading sources... [ 97%] reference/index reading sources... [ 98%] reference/pathformat reading sources... [100%] reference/query looking for now-outdated files... none found pickling environment... done checking consistency... done writing... beet.1 { } beetsconfig.5 { } done build succeeded. The manual pages are in docs/build/man. >>> Source compiled. >>> Test phase: media-sound/beets-1.4.9-r2 ============================= test session starts ============================== platform linux -- Python 3.7.9, pytest-6.1.2, py-1.9.0, pluggy-0.13.1 -- /usr/bin/python3.7 cachedir: .pytest_cache tempdir: /var/tmp/portage/media-sound/beets-1.4.9-r2/temp/beets-1.4.9 hypothesis profile 'default' -> database=DirectoryBasedExampleDatabase('/var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9/.hypothesis/examples') rootdir: /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9 plugins: ament-lint-0.10.0, ament-flake8-0.10.0, ament-pep257-0.10.0, ament-copyright-0.10.0, services-2.2.1, tempdir-2019.10.12, xprocess-0.16.0, ordering-0.6, helpers-namespace-2019.1.8, asyncio-0.14.0, pyfakefs-4.2.1, shutil-1.7.0, forked-1.3.0, xdist-2.1.0, mock-3.3.1, rerunfailures-9.1.1, xdoctest-0.11.0, flakes-4.0.0, hypothesis-5.41.2, django-4.1.0, case-1.5.3, datadir-1.3.1, regressions-2.0.2 collecting ... collecting 4 items collecting 291 items collecting 652 items collecting 676 items collecting 996 items collected 1314 items test/test_acousticbrainz.py::MapDataToSchemeTest::test_basic PASSED [ 0%] test/test_acousticbrainz.py::MapDataToSchemeTest::test_composite PASSED [ 0%] test/test_acousticbrainz.py::MapDataToSchemeTest::test_realistic PASSED [ 0%] test/test_acousticbrainz.py::MapDataToSchemeTest::test_recurse PASSED [ 0%] test/test_autotag.py::PluralityTest::test_albumartist_consensus PASSED [ 0%] test/test_autotag.py::PluralityTest::test_current_metadata_artist_consensus PASSED [ 0%] test/test_autotag.py::PluralityTest::test_current_metadata_finds_pluralities PASSED [ 0%] test/test_autotag.py::PluralityTest::test_current_metadata_likelies PASSED [ 0%] test/test_autotag.py::PluralityTest::test_plurality_conflict PASSED [ 0%] test/test_autotag.py::PluralityTest::test_plurality_consensus PASSED [ 0%] test/test_autotag.py::PluralityTest::test_plurality_empty_sequence_raises_error PASSED [ 0%] test/test_autotag.py::PluralityTest::test_plurality_near_consensus PASSED [ 0%] test/test_autotag.py::DistanceTest::test_add PASSED [ 0%] test/test_autotag.py::DistanceTest::test_add_equality PASSED [ 1%] test/test_autotag.py::DistanceTest::test_add_expr PASSED [ 1%] test/test_autotag.py::DistanceTest::test_add_number PASSED [ 1%] test/test_autotag.py::DistanceTest::test_add_priority PASSED [ 1%] test/test_autotag.py::DistanceTest::test_add_ratio PASSED [ 1%] test/test_autotag.py::DistanceTest::test_add_string PASSED [ 1%] test/test_autotag.py::DistanceTest::test_add_string_both_none PASSED [ 1%] test/test_autotag.py::DistanceTest::test_add_string_none PASSED [ 1%] test/test_autotag.py::DistanceTest::test_distance PASSED [ 1%] test/test_autotag.py::DistanceTest::test_items PASSED [ 1%] test/test_autotag.py::DistanceTest::test_max_distance PASSED [ 1%] test/test_autotag.py::DistanceTest::test_operators PASSED [ 1%] test/test_autotag.py::DistanceTest::test_raw_distance PASSED [ 1%] test/test_autotag.py::DistanceTest::test_update PASSED [ 2%] test/test_autotag.py::TrackDistanceTest::test_different_artist PASSED [ 2%] test/test_autotag.py::TrackDistanceTest::test_different_title PASSED [ 2%] test/test_autotag.py::TrackDistanceTest::test_identical_tracks PASSED [ 2%] test/test_autotag.py::TrackDistanceTest::test_various_artists_tolerated PASSED [ 2%] test/test_autotag.py::AlbumDistanceTest::test_comp_no_track_artists PASSED [ 2%] test/test_autotag.py::AlbumDistanceTest::test_comp_track_artists_do_not_match PASSED [ 2%] test/test_autotag.py::AlbumDistanceTest::test_comp_track_artists_match PASSED [ 2%] test/test_autotag.py::AlbumDistanceTest::test_global_artists_differ PASSED [ 2%] test/test_autotag.py::AlbumDistanceTest::test_identical_albums PASSED [ 2%] test/test_autotag.py::AlbumDistanceTest::test_incomplete_album PASSED [ 2%] test/test_autotag.py::AlbumDistanceTest::test_per_medium_track_numbers PASSED [ 2%] test/test_autotag.py::AlbumDistanceTest::test_tracks_out_of_order PASSED [ 2%] test/test_autotag.py::AlbumDistanceTest::test_two_medium_release PASSED [ 3%] test/test_autotag.py::AssignmentTest::test_order_works_when_track_names_are_entirely_wrong PASSED [ 3%] test/test_autotag.py::AssignmentTest::test_order_works_with_extra_tracks PASSED [ 3%] test/test_autotag.py::AssignmentTest::test_order_works_with_invalid_track_numbers PASSED [ 3%] test/test_autotag.py::AssignmentTest::test_order_works_with_missing_tracks PASSED [ 3%] test/test_autotag.py::AssignmentTest::test_reorder_when_track_numbers_incorrect PASSED [ 3%] test/test_autotag.py::ApplyTest::test_album_and_artist_applied_to_all PASSED [ 3%] test/test_autotag.py::ApplyTest::test_album_artist_overridden_by_nonempty_track_artist PASSED [ 3%] test/test_autotag.py::ApplyTest::test_album_artist_overrides_empty_track_artist PASSED [ 3%] test/test_autotag.py::ApplyTest::test_albumtype_applied PASSED [ 3%] test/test_autotag.py::ApplyTest::test_artist_credit PASSED [ 3%] test/test_autotag.py::ApplyTest::test_artist_credit_applied PASSED [ 3%] test/test_autotag.py::ApplyTest::test_artist_credit_falls_back_to_albumartist PASSED [ 3%] test/test_autotag.py::ApplyTest::test_artist_credit_prefers_artist_over_albumartist_credit PASSED [ 4%] test/test_autotag.py::ApplyTest::test_artist_sort_applied PASSED [ 4%] test/test_autotag.py::ApplyTest::test_data_source_applied PASSED [ 4%] test/test_autotag.py::ApplyTest::test_date_only_zeros_month_and_day PASSED [ 4%] test/test_autotag.py::ApplyTest::test_disc_index_applied PASSED [ 4%] test/test_autotag.py::ApplyTest::test_disc_total_applied PASSED [ 4%] test/test_autotag.py::ApplyTest::test_full_date_applied PASSED [ 4%] test/test_autotag.py::ApplyTest::test_mb_albumid_and_artistid_applied PASSED [ 4%] test/test_autotag.py::ApplyTest::test_mb_trackid_applied PASSED [ 4%] test/test_autotag.py::ApplyTest::test_missing_date_applies_nothing PASSED [ 4%] test/test_autotag.py::ApplyTest::test_per_disc_numbering PASSED [ 4%] test/test_autotag.py::ApplyTest::test_per_disc_numbering_track_total PASSED [ 4%] test/test_autotag.py::ApplyTest::test_titles_applied PASSED [ 4%] test/test_autotag.py::ApplyTest::test_track_index_applied PASSED [ 5%] test/test_autotag.py::ApplyTest::test_track_total_applied PASSED [ 5%] test/test_autotag.py::ApplyCompilationTest::test_album_and_track_artists_separate PASSED [ 5%] test/test_autotag.py::ApplyCompilationTest::test_mb_albumartistid_applied PASSED [ 5%] test/test_autotag.py::ApplyCompilationTest::test_va_flag_cleared_does_not_set_comp PASSED [ 5%] test/test_autotag.py::ApplyCompilationTest::test_va_flag_sets_comp PASSED [ 5%] test/test_autotag.py::StringDistanceTest::test_accented_characters PASSED [ 5%] test/test_autotag.py::StringDistanceTest::test_ampersand_expansion PASSED [ 5%] test/test_autotag.py::StringDistanceTest::test_brackets_have_lower_weight PASSED [ 5%] test/test_autotag.py::StringDistanceTest::test_case_ignored PASSED [ 5%] test/test_autotag.py::StringDistanceTest::test_different_strings PASSED [ 5%] test/test_autotag.py::StringDistanceTest::test_empty_strings PASSED [ 5%] test/test_autotag.py::StringDistanceTest::test_ep_label_has_zero_weight PASSED [ 5%] test/test_autotag.py::StringDistanceTest::test_equal_strings PASSED [ 6%] test/test_autotag.py::StringDistanceTest::test_featured_has_lower_weight PASSED [ 6%] test/test_autotag.py::StringDistanceTest::test_heuristic_does_not_harm_distance PASSED [ 6%] test/test_autotag.py::StringDistanceTest::test_leading_the_has_lower_weight PASSED [ 6%] test/test_autotag.py::StringDistanceTest::test_parens_have_lower_weight PASSED [ 6%] test/test_autotag.py::StringDistanceTest::test_postfix_a PASSED [ 6%] test/test_autotag.py::StringDistanceTest::test_postfix_an PASSED [ 6%] test/test_autotag.py::StringDistanceTest::test_postfix_the PASSED [ 6%] test/test_autotag.py::StringDistanceTest::test_punctuation_ignored PASSED [ 6%] test/test_autotag.py::StringDistanceTest::test_solo_pattern PASSED [ 6%] test/test_autotag.py::EnumTest::test_ordered_enum PASSED [ 6%] test/test_bucket.py::BucketPluginTest::test_alpha_all_chars PASSED [ 6%] test/test_bucket.py::BucketPluginTest::test_alpha_first_last_chars PASSED [ 6%] test/test_bucket.py::BucketPluginTest::test_alpha_out_of_range PASSED [ 7%] test/test_bucket.py::BucketPluginTest::test_alpha_regex PASSED [ 7%] test/test_bucket.py::BucketPluginTest::test_alpha_regex_mix PASSED [ 7%] test/test_bucket.py::BucketPluginTest::test_bad_alpha_range_def PASSED [ 7%] test/test_bucket.py::BucketPluginTest::test_bad_year_range_def_no4digits PASSED [ 7%] test/test_bucket.py::BucketPluginTest::test_bad_year_range_def_nodigits PASSED [ 7%] test/test_bucket.py::BucketPluginTest::test_span_from_str PASSED [ 7%] test/test_bucket.py::BucketPluginTest::test_year_multiple_years PASSED [ 7%] test/test_bucket.py::BucketPluginTest::test_year_out_of_range PASSED [ 7%] test/test_bucket.py::BucketPluginTest::test_year_out_of_range_extrapolate PASSED [ 7%] test/test_bucket.py::BucketPluginTest::test_year_single_year PASSED [ 7%] test/test_bucket.py::BucketPluginTest::test_year_single_year_last_folder PASSED [ 7%] test/test_bucket.py::BucketPluginTest::test_year_two_years PASSED [ 7%] test/test_config_command.py::ConfigCommandTest::test_config_editor_not_found PASSED [ 7%] test/test_config_command.py::ConfigCommandTest::test_config_paths PASSED [ 8%] test/test_config_command.py::ConfigCommandTest::test_config_paths_with_cli PASSED [ 8%] test/test_config_command.py::ConfigCommandTest::test_edit_config_with_automatic_open PASSED [ 8%] test/test_config_command.py::ConfigCommandTest::test_edit_config_with_editor_env PASSED [ 8%] test/test_config_command.py::ConfigCommandTest::test_edit_invalid_config_file PASSED [ 8%] test/test_config_command.py::ConfigCommandTest::test_show_redacted_user_config PASSED [ 8%] test/test_config_command.py::ConfigCommandTest::test_show_redacted_user_config_with_defaults PASSED [ 8%] test/test_config_command.py::ConfigCommandTest::test_show_user_config PASSED [ 8%] test/test_config_command.py::ConfigCommandTest::test_show_user_config_with_cli PASSED [ 8%] test/test_config_command.py::ConfigCommandTest::test_show_user_config_with_defaults PASSED [ 8%] test/test_datequery.py::DateIntervalTest::test_day_precision_intervals PASSED [ 8%] test/test_datequery.py::DateIntervalTest::test_hour_precision_intervals PASSED [ 8%] test/test_datequery.py::DateIntervalTest::test_minute_precision_intervals PASSED [ 8%] test/test_datequery.py::DateIntervalTest::test_month_precision_intervals PASSED [ 9%] test/test_datequery.py::DateIntervalTest::test_second_precision_intervals PASSED [ 9%] test/test_datequery.py::DateIntervalTest::test_unbounded_endpoints PASSED [ 9%] test/test_datequery.py::DateIntervalTest::test_year_precision_intervals PASSED [ 9%] test/test_datequery.py::DateQueryTest::test_single_day_match_fast PASSED [ 9%] test/test_datequery.py::DateQueryTest::test_single_day_nonmatch_fast PASSED [ 9%] test/test_datequery.py::DateQueryTest::test_single_month_match_fast PASSED [ 9%] test/test_datequery.py::DateQueryTest::test_single_month_match_slow PASSED [ 9%] test/test_datequery.py::DateQueryTest::test_single_month_nonmatch_fast PASSED [ 9%] test/test_datequery.py::DateQueryTest::test_single_month_nonmatch_slow PASSED [ 9%] test/test_datequery.py::DateQueryTestRelative::test_single_day_match_fast PASSED [ 9%] test/test_datequery.py::DateQueryTestRelative::test_single_day_nonmatch_fast PASSED [ 9%] test/test_datequery.py::DateQueryTestRelative::test_single_month_match_fast PASSED [ 9%] test/test_datequery.py::DateQueryTestRelative::test_single_month_match_slow PASSED [ 10%] test/test_datequery.py::DateQueryTestRelative::test_single_month_nonmatch_fast PASSED [ 10%] test/test_datequery.py::DateQueryTestRelative::test_single_month_nonmatch_slow PASSED [ 10%] test/test_datequery.py::DateQueryTestRelativeMore::test_end_relative PASSED [ 10%] test/test_datequery.py::DateQueryTestRelativeMore::test_end_relative_fail PASSED [ 10%] test/test_datequery.py::DateQueryTestRelativeMore::test_relative PASSED [ 10%] test/test_datequery.py::DateQueryTestRelativeMore::test_relative_fail PASSED [ 10%] test/test_datequery.py::DateQueryTestRelativeMore::test_start_relative PASSED [ 10%] test/test_datequery.py::DateQueryTestRelativeMore::test_start_relative_fail PASSED [ 10%] test/test_datequery.py::DateQueryConstructTest::test_datetime_invalid_separator PASSED [ 10%] test/test_datequery.py::DateQueryConstructTest::test_datetime_lowercase_t_separator PASSED [ 10%] test/test_datequery.py::DateQueryConstructTest::test_datetime_space_separator PASSED [ 10%] test/test_datequery.py::DateQueryConstructTest::test_datetime_uppercase_t_separator PASSED [ 10%] test/test_datequery.py::DateQueryConstructTest::test_invalid_date_query PASSED [ 11%] test/test_datequery.py::DateQueryConstructTest::test_long_numbers PASSED [ 11%] test/test_datequery.py::DateQueryConstructTest::test_too_many_components PASSED [ 11%] test/test_dbcore.py::MigrationTest::test_extra_model_adds_table PASSED [ 11%] test/test_dbcore.py::MigrationTest::test_open_with_fewer_fields_leaves_untouched PASSED [ 11%] test/test_dbcore.py::MigrationTest::test_open_with_multiple_new_fields PASSED [ 11%] test/test_dbcore.py::MigrationTest::test_open_with_new_field_adds_column PASSED [ 11%] test/test_dbcore.py::MigrationTest::test_open_with_same_fields_leaves_untouched PASSED [ 11%] test/test_dbcore.py::ModelTest::test_add_model PASSED [ 11%] test/test_dbcore.py::ModelTest::test_check_db_fails PASSED [ 11%] test/test_dbcore.py::ModelTest::test_computed_field PASSED [ 11%] test/test_dbcore.py::ModelTest::test_delete_fixed_attribute PASSED [ 11%] test/test_dbcore.py::ModelTest::test_delete_flexattr PASSED [ 11%] test/test_dbcore.py::ModelTest::test_delete_flexattr_persists PASSED [ 12%] test/test_dbcore.py::ModelTest::test_delete_flexattr_via_dot PASSED [ 12%] test/test_dbcore.py::ModelTest::test_delete_internal_field PASSED [ 12%] test/test_dbcore.py::ModelTest::test_delete_non_existent_attribute PASSED [ 12%] test/test_dbcore.py::ModelTest::test_items PASSED [ 12%] test/test_dbcore.py::ModelTest::test_load_deleted_flex_field PASSED [ 12%] test/test_dbcore.py::ModelTest::test_missing_field PASSED [ 12%] test/test_dbcore.py::ModelTest::test_normalization_for_typed_flex_fields PASSED [ 12%] test/test_dbcore.py::ModelTest::test_null_value_normalization_by_type PASSED [ 12%] test/test_dbcore.py::ModelTest::test_null_value_stays_none_for_untyped_field PASSED [ 12%] test/test_dbcore.py::ModelTest::test_parse_nonstring PASSED [ 12%] test/test_dbcore.py::ModelTest::test_retrieve_by_id PASSED [ 12%] test/test_dbcore.py::ModelTest::test_store_and_retrieve_flexattr PASSED [ 12%] test/test_dbcore.py::ModelTest::test_store_fixed_field PASSED [ 13%] test/test_dbcore.py::FormatTest::test_format_fixed_field PASSED [ 13%] test/test_dbcore.py::FormatTest::test_format_flex_field PASSED [ 13%] test/test_dbcore.py::FormatTest::test_format_flex_field_bytes PASSED [ 13%] test/test_dbcore.py::FormatTest::test_format_typed_flex_field PASSED [ 13%] test/test_dbcore.py::FormatTest::test_format_unset_field PASSED [ 13%] test/test_dbcore.py::FormattedMappingTest::test_get_method_with_default PASSED [ 13%] test/test_dbcore.py::FormattedMappingTest::test_get_method_with_specified_default PASSED [ 13%] test/test_dbcore.py::FormattedMappingTest::test_get_unset_field PASSED [ 13%] test/test_dbcore.py::FormattedMappingTest::test_keys_equal_model_keys PASSED [ 13%] test/test_dbcore.py::ParseTest::test_parse_fixed_field PASSED [ 13%] test/test_dbcore.py::ParseTest::test_parse_flex_field PASSED [ 13%] test/test_dbcore.py::ParseTest::test_parse_untyped_field PASSED [ 13%] test/test_dbcore.py::QueryParseTest::test_colon_at_end PASSED [ 14%] test/test_dbcore.py::QueryParseTest::test_empty_query_part PASSED [ 14%] test/test_dbcore.py::QueryParseTest::test_escaped_colon PASSED [ 14%] test/test_dbcore.py::QueryParseTest::test_escaped_colon_in_regexp PASSED [ 14%] test/test_dbcore.py::QueryParseTest::test_keyed_regexp PASSED [ 14%] test/test_dbcore.py::QueryParseTest::test_multiple_years PASSED [ 14%] test/test_dbcore.py::QueryParseTest::test_one_basic_regexp PASSED [ 14%] test/test_dbcore.py::QueryParseTest::test_one_basic_term PASSED [ 14%] test/test_dbcore.py::QueryParseTest::test_one_keyed_term PASSED [ 14%] test/test_dbcore.py::QueryParseTest::test_single_year PASSED [ 14%] test/test_dbcore.py::QueryFromStringsTest::test_empty_query_part PASSED [ 14%] test/test_dbcore.py::QueryFromStringsTest::test_parse_fixed_type_query PASSED [ 14%] test/test_dbcore.py::QueryFromStringsTest::test_parse_flex_type_query PASSED [ 14%] test/test_dbcore.py::QueryFromStringsTest::test_parse_named_query PASSED [ 14%] test/test_dbcore.py::QueryFromStringsTest::test_two_parts PASSED [ 15%] test/test_dbcore.py::QueryFromStringsTest::test_zero_parts PASSED [ 15%] test/test_dbcore.py::SortFromStringsTest::test_fixed_field_sort PASSED [ 15%] test/test_dbcore.py::SortFromStringsTest::test_flex_field_sort PASSED [ 15%] test/test_dbcore.py::SortFromStringsTest::test_one_parts PASSED [ 15%] test/test_dbcore.py::SortFromStringsTest::test_special_sort PASSED [ 15%] test/test_dbcore.py::SortFromStringsTest::test_two_parts PASSED [ 15%] test/test_dbcore.py::SortFromStringsTest::test_zero_parts PASSED [ 15%] test/test_dbcore.py::ParseSortedQueryTest::test_and_query PASSED [ 15%] test/test_dbcore.py::ParseSortedQueryTest::test_leading_comma_or_query PASSED [ 15%] test/test_dbcore.py::ParseSortedQueryTest::test_no_space_before_comma_or_query PASSED [ 15%] test/test_dbcore.py::ParseSortedQueryTest::test_no_spaces_or_query PASSED [ 15%] test/test_dbcore.py::ParseSortedQueryTest::test_only_direction PASSED [ 15%] test/test_dbcore.py::ParseSortedQueryTest::test_or_query PASSED [ 16%] test/test_dbcore.py::ParseSortedQueryTest::test_trailing_comma_or_query PASSED [ 16%] test/test_dbcore.py::ResultsIteratorTest::test_concurrent_iterators PASSED [ 16%] test/test_dbcore.py::ResultsIteratorTest::test_iterate_once PASSED [ 16%] test/test_dbcore.py::ResultsIteratorTest::test_iterate_slow_sort PASSED [ 16%] test/test_dbcore.py::ResultsIteratorTest::test_iterate_twice PASSED [ 16%] test/test_dbcore.py::ResultsIteratorTest::test_length PASSED [ 16%] test/test_dbcore.py::ResultsIteratorTest::test_no_results PASSED [ 16%] test/test_dbcore.py::ResultsIteratorTest::test_out_of_range PASSED [ 16%] test/test_dbcore.py::ResultsIteratorTest::test_slow_query PASSED [ 16%] test/test_dbcore.py::ResultsIteratorTest::test_slow_query_negative PASSED [ 16%] test/test_dbcore.py::ResultsIteratorTest::test_slow_sort_subscript PASSED [ 16%] test/test_dbcore.py::ResultsIteratorTest::test_unsorted_subscript PASSED [ 16%] test/test_edit.py::EditCommandTest::test_a_album_edit_apply PASSED [ 17%] test/test_edit.py::EditCommandTest::test_a_albumartist_edit_apply PASSED [ 17%] test/test_edit.py::EditCommandTest::test_album_edit_apply PASSED [ 17%] test/test_edit.py::EditCommandTest::test_invalid_yaml PASSED [ 17%] test/test_edit.py::EditCommandTest::test_malformed_yaml PASSED [ 17%] test/test_edit.py::EditCommandTest::test_noedit PASSED [ 17%] test/test_edit.py::EditCommandTest::test_single_edit_add_field PASSED [ 17%] test/test_edit.py::EditCommandTest::test_single_title_edit_apply PASSED [ 17%] test/test_edit.py::EditCommandTest::test_title_edit_apply PASSED [ 17%] test/test_edit.py::EditCommandTest::test_title_edit_discard PASSED [ 17%] test/test_edit.py::EditDuringImporterTest::test_edit_apply_asis PASSED [ 17%] test/test_edit.py::EditDuringImporterTest::test_edit_apply_asis_singleton PASSED [ 17%] test/test_edit.py::EditDuringImporterTest::test_edit_apply_candidate PASSED [ 17%] test/test_edit.py::EditDuringImporterTest::test_edit_apply_candidate_singleton PASSED [ 18%] test/test_edit.py::EditDuringImporterTest::test_edit_discard_asis PASSED [ 18%] test/test_edit.py::EditDuringImporterTest::test_edit_discard_candidate PASSED [ 18%] test/test_edit.py::EditDuringImporterTest::test_edit_retag_apply PASSED [ 18%] test/test_embedart.py::EmbedartCliTest::test_accept_similar_art PASSED [ 18%] test/test_embedart.py::EmbedartCliTest::test_art_file_missing PASSED [ 18%] test/test_embedart.py::EmbedartCliTest::test_clear_art_with_no_input PASSED [ 18%] test/test_embedart.py::EmbedartCliTest::test_clear_art_with_yes_input PASSED [ 18%] test/test_embedart.py::EmbedartCliTest::test_embed_art_from_album PASSED [ 18%] test/test_embedart.py::EmbedartCliTest::test_embed_art_from_file PASSED [ 18%] test/test_embedart.py::EmbedartCliTest::test_embed_art_from_file_with_no_input PASSED [ 18%] test/test_embedart.py::EmbedartCliTest::test_embed_art_from_file_with_yes_input PASSED [ 18%] test/test_embedart.py::EmbedartCliTest::test_embed_art_remove_art_file PASSED [ 18%] test/test_embedart.py::EmbedartCliTest::test_embed_non_image_file PASSED [ 19%] test/test_embedart.py::EmbedartCliTest::test_extracted_extension PASSED [ 19%] test/test_embedart.py::EmbedartCliTest::test_non_ascii_album_path PASSED [ 19%] test/test_embedart.py::EmbedartCliTest::test_reject_different_art PASSED [ 19%] test/test_embedart.py::ArtSimilarityTest::test_compare_failed PASSED [ 19%] test/test_embedart.py::ArtSimilarityTest::test_compare_parsing_error PASSED [ 19%] test/test_embedart.py::ArtSimilarityTest::test_compare_parsing_error_and_failure PASSED [ 19%] test/test_embedart.py::ArtSimilarityTest::test_compare_status1_different PASSED [ 19%] test/test_embedart.py::ArtSimilarityTest::test_compare_status1_similar PASSED [ 19%] test/test_embedart.py::ArtSimilarityTest::test_compare_success_different PASSED [ 19%] test/test_embedart.py::ArtSimilarityTest::test_compare_success_similar PASSED [ 19%] test/test_embedart.py::ArtSimilarityTest::test_convert_failure PASSED [ 19%] test/test_fetchart.py::FetchartCliTest::test_filesystem_does_not_pick_up_folder PASSED [ 19%] test/test_fetchart.py::FetchartCliTest::test_filesystem_does_not_pick_up_hidden_file PASSED [ 20%] test/test_fetchart.py::FetchartCliTest::test_filesystem_does_not_pick_up_ignored_file PASSED [ 20%] test/test_fetchart.py::FetchartCliTest::test_filesystem_picks_up_hidden_file PASSED [ 20%] test/test_fetchart.py::FetchartCliTest::test_filesystem_picks_up_non_hidden_file PASSED [ 20%] test/test_fetchart.py::FetchartCliTest::test_filesystem_picks_up_non_ignored_file PASSED [ 20%] test/test_fetchart.py::FetchartCliTest::test_set_art_from_folder PASSED [ 20%] test/test_filefilter.py::FileFilterPluginTest::test_import_album PASSED [ 20%] test/test_filefilter.py::FileFilterPluginTest::test_import_both PASSED [ 20%] test/test_filefilter.py::FileFilterPluginTest::test_import_default PASSED [ 20%] test/test_filefilter.py::FileFilterPluginTest::test_import_global PASSED [ 20%] test/test_filefilter.py::FileFilterPluginTest::test_import_nothing PASSED [ 20%] test/test_filefilter.py::FileFilterPluginTest::test_import_singleton PASSED [ 20%] test/test_files.py::MoveTest::test_copy_already_at_destination PASSED [ 20%] test/test_files.py::MoveTest::test_copy_arrives PASSED [ 21%] test/test_files.py::MoveTest::test_copy_does_not_depart PASSED [ 21%] test/test_files.py::MoveTest::test_hardlink_arrives PASSED [ 21%] test/test_files.py::MoveTest::test_hardlink_changes_path PASSED [ 21%] test/test_files.py::MoveTest::test_hardlink_does_not_depart PASSED [ 21%] test/test_files.py::MoveTest::test_link_arrives PASSED [ 21%] test/test_files.py::MoveTest::test_link_changes_path PASSED [ 21%] test/test_files.py::MoveTest::test_link_does_not_depart PASSED [ 21%] test/test_files.py::MoveTest::test_move_already_at_destination PASSED [ 21%] test/test_files.py::MoveTest::test_move_arrives PASSED [ 21%] test/test_files.py::MoveTest::test_move_avoids_collision_with_existing_file PASSED [ 21%] test/test_files.py::MoveTest::test_move_changes_path PASSED [ 21%] test/test_files.py::MoveTest::test_move_departs PASSED [ 21%] test/test_files.py::MoveTest::test_move_in_lib_prunes_empty_dir PASSED [ 21%] test/test_files.py::MoveTest::test_move_to_custom_dir PASSED [ 22%] test/test_files.py::MoveTest::test_read_only_file_copied_writable PASSED [ 22%] test/test_files.py::HelperTest::test_ancestry_works_on_dir PASSED [ 22%] test/test_files.py::HelperTest::test_ancestry_works_on_file PASSED [ 22%] test/test_files.py::HelperTest::test_ancestry_works_on_relative PASSED [ 22%] test/test_files.py::HelperTest::test_components_works_on_dir PASSED [ 22%] test/test_files.py::HelperTest::test_components_works_on_file PASSED [ 22%] test/test_files.py::HelperTest::test_components_works_on_relative PASSED [ 22%] test/test_files.py::AlbumFileTest::test_albuminfo_move_changes_paths PASSED [ 22%] test/test_files.py::AlbumFileTest::test_albuminfo_move_copies_file PASSED [ 22%] test/test_files.py::AlbumFileTest::test_albuminfo_move_moves_file PASSED [ 22%] test/test_files.py::AlbumFileTest::test_albuminfo_move_to_custom_dir PASSED [ 22%] test/test_files.py::ArtFileTest::test_art_deleted_when_items_deleted PASSED [ 22%] test/test_files.py::ArtFileTest::test_art_moves_with_album PASSED [ 23%] test/test_files.py::ArtFileTest::test_art_moves_with_album_to_custom_dir PASSED [ 23%] test/test_files.py::ArtFileTest::test_move_last_file_moves_albumart PASSED [ 23%] test/test_files.py::ArtFileTest::test_move_not_last_file_does_not_move_albumart PASSED [ 23%] test/test_files.py::ArtFileTest::test_setart_copies_image PASSED [ 23%] test/test_files.py::ArtFileTest::test_setart_sets_permissions PASSED [ 23%] test/test_files.py::ArtFileTest::test_setart_to_conflicting_file_gets_new_path PASSED [ 23%] test/test_files.py::ArtFileTest::test_setart_to_existing_art_works PASSED [ 23%] test/test_files.py::ArtFileTest::test_setart_to_existing_but_unset_art_works PASSED [ 23%] test/test_files.py::RemoveTest::test_removing_item_outside_of_library_deletes_nothing PASSED [ 23%] test/test_files.py::RemoveTest::test_removing_last_item_in_album_with_albumart_prunes_dir PASSED [ 23%] test/test_files.py::RemoveTest::test_removing_last_item_preserves_library_dir PASSED [ 23%] test/test_files.py::RemoveTest::test_removing_last_item_preserves_nonempty_dir PASSED [ 23%] test/test_files.py::RemoveTest::test_removing_last_item_prunes_dir_with_blacklisted_file PASSED [ 24%] test/test_files.py::RemoveTest::test_removing_last_item_prunes_empty_dir PASSED [ 24%] test/test_files.py::RemoveTest::test_removing_without_delete_leaves_file PASSED [ 24%] test/test_files.py::SoftRemoveTest::test_soft_remove_deletes_file PASSED [ 24%] test/test_files.py::SoftRemoveTest::test_soft_remove_silent_on_no_file PASSED [ 24%] test/test_files.py::SafeMoveCopyTest::test_self_copy PASSED [ 24%] test/test_files.py::SafeMoveCopyTest::test_self_move PASSED [ 24%] test/test_files.py::SafeMoveCopyTest::test_successful_copy PASSED [ 24%] test/test_files.py::SafeMoveCopyTest::test_successful_move PASSED [ 24%] test/test_files.py::SafeMoveCopyTest::test_unsuccessful_copy PASSED [ 24%] test/test_files.py::SafeMoveCopyTest::test_unsuccessful_move PASSED [ 24%] test/test_files.py::PruneTest::test_prune_existent_directory PASSED [ 24%] test/test_files.py::PruneTest::test_prune_nonexistent_directory PASSED [ 24%] test/test_files.py::WalkTest::test_ignore_directory PASSED [ 25%] test/test_files.py::WalkTest::test_ignore_everything PASSED [ 25%] test/test_files.py::WalkTest::test_ignore_file PASSED [ 25%] test/test_files.py::WalkTest::test_sorted_files PASSED [ 25%] test/test_files.py::UniquePathTest::test_conflicting_file_appends_1 PASSED [ 25%] test/test_files.py::UniquePathTest::test_conflicting_file_appends_higher_number PASSED [ 25%] test/test_files.py::UniquePathTest::test_conflicting_file_with_number_increases_number PASSED [ 25%] test/test_files.py::UniquePathTest::test_new_file_unchanged PASSED [ 25%] test/test_files.py::MkDirAllTest::test_child_does_not_exist PASSED [ 25%] test/test_files.py::MkDirAllTest::test_parent_exists PASSED [ 25%] test/test_ftintitle.py::FtInTitlePluginFunctional::test_functional_custom_format PASSED [ 25%] test/test_ftintitle.py::FtInTitlePluginFunctional::test_functional_drop PASSED [ 25%] test/test_ftintitle.py::FtInTitlePluginFunctional::test_functional_not_found PASSED [ 25%] test/test_ftintitle.py::FtInTitlePluginTest::test_contains_feat PASSED [ 26%] test/test_ftintitle.py::FtInTitlePluginTest::test_find_feat_part PASSED [ 26%] test/test_ftintitle.py::FtInTitlePluginTest::test_split_on_feat PASSED [ 26%] test/test_hidden.py::HiddenFileTest::test_osx_hidden SKIPPED [ 26%] test/test_hidden.py::HiddenFileTest::test_other_hidden PASSED [ 26%] test/test_hidden.py::HiddenFileTest::test_windows_hidden SKIPPED [ 26%] test/test_hook.py::HookTest::test_hook_argument_substitution PASSED [ 26%] test/test_hook.py::HookTest::test_hook_bytes_interpolation PASSED [ 26%] test/test_hook.py::HookTest::test_hook_event_substitution PASSED [ 26%] test/test_hook.py::HookTest::test_hook_no_arguments PASSED [ 26%] test/test_ihate.py::IHatePluginTest::test_hate PASSED [ 26%] test/test_importadded.py::ImportAddedTest::test_import_album_inplace_with_added_dates PASSED [ 26%] test/test_importadded.py::ImportAddedTest::test_import_album_with_added_dates PASSED [ 26%] test/test_importadded.py::ImportAddedTest::test_import_album_with_preserved_mtimes PASSED [ 27%] test/test_importadded.py::ImportAddedTest::test_import_singletons_with_added_dates PASSED [ 27%] test/test_importadded.py::ImportAddedTest::test_import_singletons_with_preserved_mtimes PASSED [ 27%] test/test_importadded.py::ImportAddedTest::test_reimported_album_skipped PASSED [ 27%] test/test_importadded.py::ImportAddedTest::test_reimported_singletons_skipped PASSED [ 27%] test/test_importer.py::NonAutotaggedImportTest::test_album_created_with_track_artist PASSED [ 27%] test/test_importer.py::NonAutotaggedImportTest::test_import_copy_arrives PASSED [ 27%] test/test_importer.py::NonAutotaggedImportTest::test_import_hardlink_arrives PASSED [ 27%] test/test_importer.py::NonAutotaggedImportTest::test_import_link_arrives PASSED [ 27%] test/test_importer.py::NonAutotaggedImportTest::test_import_with_delete_prunes_directory_empty PASSED [ 27%] test/test_importer.py::NonAutotaggedImportTest::test_import_with_delete_removes_files PASSED [ 27%] test/test_importer.py::NonAutotaggedImportTest::test_import_with_move_deletes_import_files PASSED [ 27%] test/test_importer.py::NonAutotaggedImportTest::test_import_with_move_prunes_directory_empty PASSED [ 27%] test/test_importer.py::NonAutotaggedImportTest::test_import_with_move_prunes_with_extra_clutter PASSED [ 28%] test/test_importer.py::NonAutotaggedImportTest::test_import_without_delete_retains_files PASSED [ 28%] test/test_importer.py::NonAutotaggedImportTest::test_threaded_import_copy_arrives PASSED [ 28%] test/test_importer.py::NonAutotaggedImportTest::test_threaded_import_move_arrives PASSED [ 28%] test/test_importer.py::NonAutotaggedImportTest::test_threaded_import_move_deletes_import PASSED [ 28%] test/test_importer.py::RmTempTest::test_rm PASSED [ 28%] test/test_importer.py::ImportZipTest::test_import_zip PASSED [ 28%] test/test_importer.py::ImportTarTest::test_import_zip PASSED [ 28%] test/test_importer.py::ImportRarTest::test_import_zip SKIPPED [ 28%] test/test_importer.py::ImportPasswordRarTest::test_import_zip SKIPPED [ 28%] test/test_importer.py::ImportSingletonTest::test_apply_asis_adds_singleton_path PASSED [ 28%] test/test_importer.py::ImportSingletonTest::test_apply_asis_adds_track PASSED [ 28%] test/test_importer.py::ImportSingletonTest::test_apply_asis_does_not_add_album PASSED [ 28%] test/test_importer.py::ImportSingletonTest::test_apply_candidate_adds_singleton_path PASSED [ 28%] test/test_importer.py::ImportSingletonTest::test_apply_candidate_adds_track PASSED [ 29%] test/test_importer.py::ImportSingletonTest::test_apply_candidate_does_not_add_album PASSED [ 29%] test/test_importer.py::ImportSingletonTest::test_import_single_files PASSED [ 29%] test/test_importer.py::ImportSingletonTest::test_set_fields PASSED [ 29%] test/test_importer.py::ImportSingletonTest::test_skip_adds_other_tracks PASSED [ 29%] test/test_importer.py::ImportSingletonTest::test_skip_does_not_add_first_track PASSED [ 29%] test/test_importer.py::ImportTest::test_apply_asis_adds_album PASSED [ 29%] test/test_importer.py::ImportTest::test_apply_asis_adds_album_path PASSED [ 29%] test/test_importer.py::ImportTest::test_apply_asis_adds_tracks PASSED [ 29%] test/test_importer.py::ImportTest::test_apply_candidate_adds_album PASSED [ 29%] test/test_importer.py::ImportTest::test_apply_candidate_adds_album_path PASSED [ 29%] test/test_importer.py::ImportTest::test_apply_candidate_adds_tracks PASSED [ 29%] test/test_importer.py::ImportTest::test_apply_from_scratch_keeps_bitrate PASSED [ 29%] test/test_importer.py::ImportTest::test_apply_from_scratch_keeps_format PASSED [ 30%] test/test_importer.py::ImportTest::test_apply_from_scratch_removes_other_metadata PASSED [ 30%] test/test_importer.py::ImportTest::test_apply_with_delete_deletes_import PASSED [ 30%] test/test_importer.py::ImportTest::test_apply_with_move_deletes_import PASSED [ 30%] test/test_importer.py::ImportTest::test_asis_no_data_source PASSED [ 30%] test/test_importer.py::ImportTest::test_empty_directory_singleton_warning PASSED [ 30%] test/test_importer.py::ImportTest::test_empty_directory_warning PASSED [ 30%] test/test_importer.py::ImportTest::test_set_fields PASSED [ 30%] test/test_importer.py::ImportTest::test_skip_does_not_add_track PASSED [ 30%] test/test_importer.py::ImportTest::test_skip_non_album_dirs PASSED [ 30%] test/test_importer.py::ImportTest::test_unmatched_tracks_not_added PASSED [ 30%] test/test_importer.py::ImportTracksTest::test_apply_tracks_adds_singleton_path PASSED [ 30%] test/test_importer.py::ImportTracksTest::test_apply_tracks_adds_singleton_track PASSED [ 30%] test/test_importer.py::ImportCompilationTest::test_asis_albumartist_tag_sets_albumartist PASSED [ 31%] test/test_importer.py::ImportCompilationTest::test_asis_heterogenous_sets_sompilation PASSED [ 31%] test/test_importer.py::ImportCompilationTest::test_asis_heterogenous_sets_various_albumartist PASSED [ 31%] test/test_importer.py::ImportCompilationTest::test_asis_homogenous_sets_albumartist PASSED [ 31%] test/test_importer.py::ImportCompilationTest::test_asis_sets_majority_albumartist PASSED [ 31%] test/test_importer.py::ImportExistingTest::test_asis_updated_moves_file PASSED [ 31%] test/test_importer.py::ImportExistingTest::test_asis_updated_without_copy_does_not_move_file PASSED [ 31%] test/test_importer.py::ImportExistingTest::test_asis_updates_metadata PASSED [ 31%] test/test_importer.py::ImportExistingTest::test_does_not_duplicate_album PASSED [ 31%] test/test_importer.py::ImportExistingTest::test_does_not_duplicate_item PASSED [ 31%] test/test_importer.py::ImportExistingTest::test_does_not_duplicate_singleton_track PASSED [ 31%] test/test_importer.py::ImportExistingTest::test_outside_file_is_copied PASSED [ 31%] test/test_importer.py::ImportExistingTest::test_outside_file_is_moved PASSED [ 31%] test/test_importer.py::GroupAlbumsImportTest::test_add_album_for_different_artist_and_different_album PASSED [ 32%] test/test_importer.py::GroupAlbumsImportTest::test_add_album_for_different_artist_and_same_albumartist PASSED [ 32%] test/test_importer.py::GroupAlbumsImportTest::test_add_album_for_same_album_and_different_artist PASSED [ 32%] test/test_importer.py::GroupAlbumsImportTest::test_add_album_for_same_artist_and_different_album PASSED [ 32%] test/test_importer.py::GroupAlbumsImportTest::test_incremental PASSED [ 32%] test/test_importer.py::GlobalGroupAlbumsImportTest::test_add_album_for_different_artist_and_different_album PASSED [ 32%] test/test_importer.py::GlobalGroupAlbumsImportTest::test_add_album_for_different_artist_and_same_albumartist PASSED [ 32%] test/test_importer.py::GlobalGroupAlbumsImportTest::test_add_album_for_same_album_and_different_artist PASSED [ 32%] test/test_importer.py::GlobalGroupAlbumsImportTest::test_add_album_for_same_artist_and_different_album PASSED [ 32%] test/test_importer.py::GlobalGroupAlbumsImportTest::test_incremental PASSED [ 32%] test/test_importer.py::ChooseCandidateTest::test_choose_first_candidate PASSED [ 32%] test/test_importer.py::ChooseCandidateTest::test_choose_second_candidate PASSED [ 32%] test/test_importer.py::InferAlbumDataTest::test_apply_gets_artist_and_id PASSED [ 32%] test/test_importer.py::InferAlbumDataTest::test_apply_lets_album_values_override PASSED [ 33%] test/test_importer.py::InferAlbumDataTest::test_asis_comp_applied_to_all_items PASSED [ 33%] test/test_importer.py::InferAlbumDataTest::test_asis_heterogenous_va PASSED [ 33%] test/test_importer.py::InferAlbumDataTest::test_asis_homogenous_single_artist PASSED [ 33%] test/test_importer.py::InferAlbumDataTest::test_asis_majority_artist_single_artist PASSED [ 33%] test/test_importer.py::InferAlbumDataTest::test_asis_track_albumartist_override PASSED [ 33%] test/test_importer.py::InferAlbumDataTest::test_small_single_artist_album PASSED [ 33%] test/test_importer.py::test_album_info PASSED [ 33%] test/test_importer.py::ImportDuplicateAlbumTest::test_keep_duplicate_album PASSED [ 33%] test/test_importer.py::ImportDuplicateAlbumTest::test_merge_duplicate_album PASSED [ 33%] test/test_importer.py::ImportDuplicateAlbumTest::test_no_autotag_keeps_duplicate_album PASSED [ 33%] test/test_importer.py::ImportDuplicateAlbumTest::test_remove_duplicate_album PASSED [ 33%] test/test_importer.py::ImportDuplicateAlbumTest::test_skip_duplicate_album PASSED [ 33%] test/test_importer.py::ImportDuplicateAlbumTest::test_twice_in_import_dir SKIPPED [ 34%] test/test_importer.py::test_track_info PASSED [ 34%] test/test_importer.py::ImportDuplicateSingletonTest::test_keep_duplicate PASSED [ 34%] test/test_importer.py::ImportDuplicateSingletonTest::test_remove_duplicate PASSED [ 34%] test/test_importer.py::ImportDuplicateSingletonTest::test_skip_duplicate PASSED [ 34%] test/test_importer.py::ImportDuplicateSingletonTest::test_twice_in_import_dir SKIPPED [ 34%] test/test_importer.py::TagLogTest::test_tag_log_line PASSED [ 34%] test/test_importer.py::TagLogTest::test_tag_log_unicode PASSED [ 34%] test/test_importer.py::ResumeImportTest::test_resume_album PASSED [ 34%] test/test_importer.py::ResumeImportTest::test_resume_singleton PASSED [ 34%] test/test_importer.py::IncrementalImportTest::test_incremental_album PASSED [ 34%] test/test_importer.py::IncrementalImportTest::test_incremental_item PASSED [ 34%] test/test_importer.py::IncrementalImportTest::test_invalid_state_file PASSED [ 34%] test/test_importer.py::AlbumsInDirTest::test_finds_all_albums PASSED [ 35%] test/test_importer.py::AlbumsInDirTest::test_finds_multiple_songs PASSED [ 35%] test/test_importer.py::AlbumsInDirTest::test_separates_contents PASSED [ 35%] test/test_importer.py::MultiDiscAlbumsInDirTest::test_coalesce_flattened_album_case_typo PASSED [ 35%] test/test_importer.py::MultiDiscAlbumsInDirTest::test_coalesce_multiple_unicode PASSED [ 35%] test/test_importer.py::MultiDiscAlbumsInDirTest::test_coalesce_nested_album_multiple_subdirs PASSED [ 35%] test/test_importer.py::MultiDiscAlbumsInDirTest::test_coalesce_nested_album_single_subdir PASSED [ 35%] test/test_importer.py::MultiDiscAlbumsInDirTest::test_do_not_yield_empty_album PASSED [ 35%] test/test_importer.py::MultiDiscAlbumsInDirTest::test_single_disc_album PASSED [ 35%] test/test_importer.py::MultiDiscAlbumsInDirTest::test_single_disc_unicode PASSED [ 35%] test/test_importer.py::ReimportTest::test_reimported_album_gets_new_metadata PASSED [ 35%] test/test_importer.py::ReimportTest::test_reimported_album_preserves_added PASSED [ 35%] test/test_importer.py::ReimportTest::test_reimported_album_preserves_flexattr PASSED [ 35%] test/test_importer.py::ReimportTest::test_reimported_album_preserves_item_added PASSED [ 35%] test/test_importer.py::ReimportTest::test_reimported_album_preserves_item_flexattr PASSED [ 36%] test/test_importer.py::ReimportTest::test_reimported_item_gets_new_metadata PASSED [ 36%] test/test_importer.py::ReimportTest::test_reimported_item_preserves_added PASSED [ 36%] test/test_importer.py::ReimportTest::test_reimported_item_preserves_art PASSED [ 36%] test/test_importer.py::ReimportTest::test_reimported_item_preserves_flexattr PASSED [ 36%] test/test_importer.py::ImportPretendTest::test_import_album_pretend PASSED [ 36%] test/test_importer.py::ImportPretendTest::test_import_pretend_empty PASSED [ 36%] test/test_importer.py::ImportPretendTest::test_import_singletons_pretend PASSED [ 36%] test/test_importer.py::ImportMusicBrainzIdTest::test_candidates_album PASSED [ 36%] test/test_importer.py::ImportMusicBrainzIdTest::test_candidates_singleton PASSED [ 36%] test/test_importer.py::ImportMusicBrainzIdTest::test_one_mbid_one_album PASSED [ 36%] test/test_importer.py::ImportMusicBrainzIdTest::test_one_mbid_one_singleton PASSED [ 36%] test/test_importer.py::ImportMusicBrainzIdTest::test_several_mbid_one_album PASSED [ 36%] test/test_importer.py::ImportMusicBrainzIdTest::test_several_mbid_one_singleton PASSED [ 37%] test/test_importfeeds.py::ImportfeedsTestTest::test_multi_format_album_playlist PASSED [ 37%] test/test_importfeeds.py::ImportfeedsTestTest::test_playlist_in_subdir PASSED [ 37%] test/test_info.py::InfoTest::test_collect_item_and_path PASSED [ 37%] test/test_info.py::InfoTest::test_custom_format PASSED [ 37%] test/test_info.py::InfoTest::test_include_pattern PASSED [ 37%] test/test_info.py::InfoTest::test_item_library_query PASSED [ 37%] test/test_info.py::InfoTest::test_item_query PASSED [ 37%] test/test_info.py::InfoTest::test_path PASSED [ 37%] test/test_ipfs.py::IPFSPluginTest::test_stored_hashes PASSED [ 37%] test/test_keyfinder.py::KeyFinderTest::test_add_key PASSED [ 37%] test/test_keyfinder.py::KeyFinderTest::test_add_key_on_import PASSED [ 37%] test/test_keyfinder.py::KeyFinderTest::test_do_not_overwrite PASSED [ 37%] test/test_keyfinder.py::KeyFinderTest::test_force_overwrite PASSED [ 38%] test/test_library.py::LoadTest::test_load_clears_dirty_flags PASSED [ 38%] test/test_library.py::LoadTest::test_load_restores_data_from_db PASSED [ 38%] test/test_library.py::StoreTest::test_store_changes_database_value PASSED [ 38%] test/test_library.py::StoreTest::test_store_clears_dirty_flags PASSED [ 38%] test/test_library.py::StoreTest::test_store_only_writes_dirty_fields PASSED [ 38%] test/test_library.py::AddTest::test_item_add_inserts_row PASSED [ 38%] test/test_library.py::AddTest::test_library_add_path_inserts_row PASSED [ 38%] test/test_library.py::RemoveTest::test_remove_deletes_from_db PASSED [ 38%] test/test_library.py::GetSetTest::test_invalid_field_raises_attributeerror PASSED [ 38%] test/test_library.py::GetSetTest::test_set_changes_value PASSED [ 38%] test/test_library.py::GetSetTest::test_set_does_not_dirty_if_value_unchanged PASSED [ 38%] test/test_library.py::GetSetTest::test_set_sets_dirty_flag PASSED [ 38%] test/test_library.py::DestinationTest::test_albumartist_falls_back_to_artist PASSED [ 39%] test/test_library.py::DestinationTest::test_albumartist_overrides_artist PASSED [ 39%] test/test_library.py::DestinationTest::test_albumtype_path_fallback_to_comp PASSED [ 39%] test/test_library.py::DestinationTest::test_albumtype_query_path PASSED [ 39%] test/test_library.py::DestinationTest::test_artist_falls_back_to_albumartist PASSED [ 39%] test/test_library.py::DestinationTest::test_artist_overrides_albumartist PASSED [ 39%] test/test_library.py::DestinationTest::test_asciify_and_replace PASSED [ 39%] test/test_library.py::DestinationTest::test_asciify_character_expanding_to_slash PASSED [ 39%] test/test_library.py::DestinationTest::test_comp_before_singleton_path PASSED [ 39%] test/test_library.py::DestinationTest::test_comp_path PASSED [ 39%] test/test_library.py::DestinationTest::test_default_path_for_non_compilations PASSED [ 39%] test/test_library.py::DestinationTest::test_destination_escapes_leading_dot PASSED [ 39%] test/test_library.py::DestinationTest::test_destination_escapes_slashes PASSED [ 39%] test/test_library.py::DestinationTest::test_destination_long_names_keep_extension PASSED [ 40%] test/test_library.py::DestinationTest::test_destination_long_names_truncated PASSED [ 40%] test/test_library.py::DestinationTest::test_destination_pads_date_values PASSED [ 40%] test/test_library.py::DestinationTest::test_destination_pads_some_indices PASSED [ 40%] test/test_library.py::DestinationTest::test_destination_preserves_extension PASSED [ 40%] test/test_library.py::DestinationTest::test_destination_preserves_legitimate_slashes PASSED [ 40%] test/test_library.py::DestinationTest::test_destination_substitutes_metadata_values PASSED [ 40%] test/test_library.py::DestinationTest::test_destination_with_empty_component SKIPPED [ 40%] test/test_library.py::DestinationTest::test_destination_with_empty_final_component SKIPPED [ 40%] test/test_library.py::DestinationTest::test_destination_with_replacements PASSED [ 40%] test/test_library.py::DestinationTest::test_directory_works_with_trailing_slash PASSED [ 40%] test/test_library.py::DestinationTest::test_directory_works_without_trailing_slash PASSED [ 40%] test/test_library.py::DestinationTest::test_distination_windows_removes_both_separators PASSED [ 40%] test/test_library.py::DestinationTest::test_get_formatted_datetime PASSED [ 41%] test/test_library.py::DestinationTest::test_get_formatted_does_not_replace_separators PASSED [ 41%] test/test_library.py::DestinationTest::test_get_formatted_none PASSED [ 41%] test/test_library.py::DestinationTest::test_get_formatted_pads_with_zero PASSED [ 41%] test/test_library.py::DestinationTest::test_get_formatted_uses_kbps_bitrate PASSED [ 41%] test/test_library.py::DestinationTest::test_get_formatted_uses_khz_samplerate PASSED [ 41%] test/test_library.py::DestinationTest::test_heterogeneous_album_gets_single_directory PASSED [ 41%] test/test_library.py::DestinationTest::test_legalize_path_one_for_many_replacement PASSED [ 41%] test/test_library.py::DestinationTest::test_legalize_path_one_for_one_replacement PASSED [ 41%] test/test_library.py::DestinationTest::test_lower_case_extension PASSED [ 41%] test/test_library.py::DestinationTest::test_non_mbcs_characters_on_windows PASSED [ 41%] test/test_library.py::DestinationTest::test_path_with_format PASSED [ 41%] test/test_library.py::DestinationTest::test_singleton_path PASSED [ 41%] test/test_library.py::DestinationTest::test_unicode_extension_in_fragment PASSED [ 42%] test/test_library.py::DestinationTest::test_unicode_normalized_nfc_on_linux PASSED [ 42%] test/test_library.py::DestinationTest::test_unicode_normalized_nfd_on_mac PASSED [ 42%] test/test_library.py::ItemFormattedMappingTest::test_album_field_overrides_item_field_for_path PASSED [ 42%] test/test_library.py::ItemFormattedMappingTest::test_album_flex_field PASSED [ 42%] test/test_library.py::ItemFormattedMappingTest::test_albumartist_falls_back_to_artist PASSED [ 42%] test/test_library.py::ItemFormattedMappingTest::test_artist_falls_back_to_albumartist PASSED [ 42%] test/test_library.py::ItemFormattedMappingTest::test_both_artist_and_albumartist_empty PASSED [ 42%] test/test_library.py::ItemFormattedMappingTest::test_formatted_item_value PASSED [ 42%] test/test_library.py::ItemFormattedMappingTest::test_get_method_with_default PASSED [ 42%] test/test_library.py::ItemFormattedMappingTest::test_get_method_with_specified_default PASSED [ 42%] test/test_library.py::ItemFormattedMappingTest::test_get_unset_field PASSED [ 42%] test/test_library.py::ItemFormattedMappingTest::test_item_precedence PASSED [ 42%] test/test_library.py::DestinationFunctionTest::test_asciify_variable PASSED [ 42%] test/test_library.py::DestinationFunctionTest::test_first PASSED [ 43%] test/test_library.py::DestinationFunctionTest::test_first_different_sep PASSED [ 43%] test/test_library.py::DestinationFunctionTest::test_first_skip PASSED [ 43%] test/test_library.py::DestinationFunctionTest::test_if_def_false_complete PASSED [ 43%] test/test_library.py::DestinationFunctionTest::test_if_def_field_not_defined PASSED [ 43%] test/test_library.py::DestinationFunctionTest::test_if_def_field_not_defined_2 PASSED [ 43%] test/test_library.py::DestinationFunctionTest::test_if_def_field_return_self PASSED [ 43%] test/test_library.py::DestinationFunctionTest::test_if_def_true PASSED [ 43%] test/test_library.py::DestinationFunctionTest::test_if_def_true_complete PASSED [ 43%] test/test_library.py::DestinationFunctionTest::test_if_else_false PASSED [ 43%] test/test_library.py::DestinationFunctionTest::test_if_else_false_value PASSED [ 43%] test/test_library.py::DestinationFunctionTest::test_if_false PASSED [ 43%] test/test_library.py::DestinationFunctionTest::test_if_false_value PASSED [ 43%] test/test_library.py::DestinationFunctionTest::test_if_int_value PASSED [ 44%] test/test_library.py::DestinationFunctionTest::test_if_true PASSED [ 44%] test/test_library.py::DestinationFunctionTest::test_left_variable PASSED [ 44%] test/test_library.py::DestinationFunctionTest::test_nonexistent_function PASSED [ 44%] test/test_library.py::DestinationFunctionTest::test_right_variable PASSED [ 44%] test/test_library.py::DestinationFunctionTest::test_title_case_variable PASSED [ 44%] test/test_library.py::DestinationFunctionTest::test_title_case_variable_aphostrophe PASSED [ 44%] test/test_library.py::DestinationFunctionTest::test_upper_case_literal PASSED [ 44%] test/test_library.py::DestinationFunctionTest::test_upper_case_variable PASSED [ 44%] test/test_library.py::DisambiguationTest::test_change_brackets PASSED [ 44%] test/test_library.py::DisambiguationTest::test_drop_empty_disambig_string PASSED [ 44%] test/test_library.py::DisambiguationTest::test_remove_brackets PASSED [ 44%] test/test_library.py::DisambiguationTest::test_unique_expands_to_disambiguating_year PASSED [ 44%] test/test_library.py::DisambiguationTest::test_unique_expands_to_nothing_for_distinct_albums PASSED [ 45%] test/test_library.py::DisambiguationTest::test_unique_falls_back_to_second_distinguishing_field PASSED [ 45%] test/test_library.py::DisambiguationTest::test_unique_sanitized PASSED [ 45%] test/test_library.py::DisambiguationTest::test_unique_with_default_arguments_uses_albumtype PASSED [ 45%] test/test_library.py::DisambiguationTest::test_use_fallback_numbers_when_identical PASSED [ 45%] test/test_library.py::PluginDestinationTest::test_plugin_value_not_substituted PASSED [ 45%] test/test_library.py::PluginDestinationTest::test_plugin_value_overrides_attribute PASSED [ 45%] test/test_library.py::PluginDestinationTest::test_plugin_value_sanitized PASSED [ 45%] test/test_library.py::PluginDestinationTest::test_undefined_value_not_substituted PASSED [ 45%] test/test_library.py::AlbumInfoTest::test_album_items_consistent PASSED [ 45%] test/test_library.py::AlbumInfoTest::test_albuminfo_change_albumartist_changes_items PASSED [ 45%] test/test_library.py::AlbumInfoTest::test_albuminfo_change_artist_does_not_change_items PASSED [ 45%] test/test_library.py::AlbumInfoTest::test_albuminfo_changes_affect_items PASSED [ 45%] test/test_library.py::AlbumInfoTest::test_albuminfo_for_two_items_doesnt_duplicate_row PASSED [ 46%] test/test_library.py::AlbumInfoTest::test_albuminfo_reflects_metadata PASSED [ 46%] test/test_library.py::AlbumInfoTest::test_albuminfo_remove_removes_items PASSED [ 46%] test/test_library.py::AlbumInfoTest::test_albuminfo_stores_art PASSED [ 46%] test/test_library.py::AlbumInfoTest::test_get_album_by_id PASSED [ 46%] test/test_library.py::AlbumInfoTest::test_individual_tracks_have_no_albuminfo PASSED [ 46%] test/test_library.py::AlbumInfoTest::test_noop_albuminfo_changes_affect_items PASSED [ 46%] test/test_library.py::AlbumInfoTest::test_removing_last_item_removes_album PASSED [ 46%] test/test_library.py::ArtDestinationTest::test_art_filename_respects_setting PASSED [ 46%] test/test_library.py::ArtDestinationTest::test_art_path_in_item_dir PASSED [ 46%] test/test_library.py::ArtDestinationTest::test_art_path_sanitized PASSED [ 46%] test/test_library.py::PathStringTest::test_art_destination_returns_bytestring PASSED [ 46%] test/test_library.py::PathStringTest::test_artpath_stores_special_chars PASSED [ 46%] test/test_library.py::PathStringTest::test_destination_returns_bytestring PASSED [ 47%] test/test_library.py::PathStringTest::test_fetched_item_path_is_bytestring PASSED [ 47%] test/test_library.py::PathStringTest::test_item_path_is_bytestring PASSED [ 47%] test/test_library.py::PathStringTest::test_sanitize_path_returns_unicode PASSED [ 47%] test/test_library.py::PathStringTest::test_sanitize_path_with_special_chars PASSED [ 47%] test/test_library.py::PathStringTest::test_special_char_path_added_to_database PASSED [ 47%] test/test_library.py::PathStringTest::test_special_chars_preserved_in_database PASSED [ 47%] test/test_library.py::PathStringTest::test_unicode_artpath_becomes_bytestring PASSED [ 47%] test/test_library.py::PathStringTest::test_unicode_artpath_in_database_decoded PASSED [ 47%] test/test_library.py::PathStringTest::test_unicode_in_database_becomes_bytestring PASSED [ 47%] test/test_library.py::PathStringTest::test_unicode_path_becomes_bytestring PASSED [ 47%] test/test_library.py::MtimeTest::test_mtime_initially_up_to_date PASSED [ 47%] test/test_library.py::MtimeTest::test_mtime_reset_on_db_modify PASSED [ 47%] test/test_library.py::MtimeTest::test_mtime_up_to_date_after_read PASSED [ 48%] test/test_library.py::MtimeTest::test_mtime_up_to_date_after_write PASSED [ 48%] test/test_library.py::ImportTimeTest::test_atime_for_singleton PASSED [ 48%] test/test_library.py::TemplateTest::test_album_and_item_format PASSED [ 48%] test/test_library.py::TemplateTest::test_album_flexattr_appears_in_item_template PASSED [ 48%] test/test_library.py::TemplateTest::test_year_formatted_in_template PASSED [ 48%] test/test_library.py::UnicodePathTest::test_unicode_path PASSED [ 48%] test/test_library.py::WriteTest::test_no_write_permission PASSED [ 48%] test/test_library.py::WriteTest::test_write_custom_tags PASSED [ 48%] test/test_library.py::WriteTest::test_write_date_field PASSED [ 48%] test/test_library.py::WriteTest::test_write_nonexistant PASSED [ 48%] test/test_library.py::WriteTest::test_write_with_custom_path PASSED [ 48%] test/test_library.py::ItemReadTest::test_nonexistent_raise_read_error PASSED [ 48%] test/test_library.py::ItemReadTest::test_unreadable_raise_read_error PASSED [ 49%] test/test_library.py::FilesizeTest::test_filesize PASSED [ 49%] test/test_library.py::FilesizeTest::test_nonexistent_file PASSED [ 49%] test/test_library.py::ParseQueryTest::test_parse_bytes PASSED [ 49%] test/test_library.py::ParseQueryTest::test_parse_invalid_query_string PASSED [ 49%] test/test_library.py::LibraryFieldTypesTest::test_datetype PASSED [ 49%] test/test_library.py::LibraryFieldTypesTest::test_durationtype PASSED [ 49%] test/test_library.py::LibraryFieldTypesTest::test_musicalkey PASSED [ 49%] test/test_library.py::LibraryFieldTypesTest::test_pathtype PASSED [ 49%] test/test_logging.py::LoggingTest::test_logging_management PASSED [ 49%] test/test_logging.py::LoggingTest::test_str_format_logging PASSED [ 49%] test/test_logging.py::LoggingLevelTest::test_command_level0 PASSED [ 49%] test/test_logging.py::LoggingLevelTest::test_command_level1 PASSED [ 49%] test/test_logging.py::LoggingLevelTest::test_command_level2 PASSED [ 50%] test/test_logging.py::LoggingLevelTest::test_import_stage_level0 PASSED [ 50%] test/test_logging.py::LoggingLevelTest::test_import_stage_level1 PASSED [ 50%] test/test_logging.py::LoggingLevelTest::test_import_stage_level2 PASSED [ 50%] test/test_logging.py::LoggingLevelTest::test_listener_level0 PASSED [ 50%] test/test_logging.py::LoggingLevelTest::test_listener_level1 PASSED [ 50%] test/test_logging.py::LoggingLevelTest::test_listener_level2 PASSED [ 50%] test/test_logging.py::ConcurrentEventsTest::test_concurrent_events PASSED [ 50%] test/test_logging.py::ConcurrentEventsTest::test_root_logger_levels PASSED [ 50%] test/test_lyrics.py::LyricsPluginTest::test_is_lyrics PASSED [ 50%] test/test_lyrics.py::LyricsPluginTest::test_missing_lyrics PASSED [ 50%] test/test_lyrics.py::LyricsPluginTest::test_remove_credits PASSED [ 50%] test/test_lyrics.py::LyricsPluginTest::test_scrape_merge_paragraphs PASSED [ 50%] test/test_lyrics.py::LyricsPluginTest::test_scrape_strip_cruft PASSED [ 50%] test/test_lyrics.py::LyricsPluginTest::test_scrape_strip_scripts PASSED [ 51%] test/test_lyrics.py::LyricsPluginTest::test_scrape_strip_tag_in_comment PASSED [ 51%] test/test_lyrics.py::LyricsPluginTest::test_search_artist PASSED [ 51%] test/test_lyrics.py::LyricsPluginTest::test_search_pairs_multi_titles PASSED [ 51%] test/test_lyrics.py::LyricsPluginTest::test_search_pairs_titles PASSED [ 51%] test/test_lyrics.py::LyricsPluginTest::test_slugify PASSED [ 51%] test/test_lyrics.py::LyricsPluginSourcesTest::test_backend_sources_ok SKIPPED [ 51%] test/test_lyrics.py::LyricsPluginSourcesTest::test_google_sources_ok SKIPPED [ 51%] test/test_lyrics.py::LyricsGooglePluginMachineryTest::test_is_page_candidate_exact_match PASSED [ 51%] test/test_lyrics.py::LyricsGooglePluginMachineryTest::test_is_page_candidate_fuzzy_match PASSED [ 51%] test/test_lyrics.py::LyricsGooglePluginMachineryTest::test_is_page_candidate_special_chars PASSED [ 51%] test/test_lyrics.py::LyricsGooglePluginMachineryTest::test_mocked_source_ok PASSED [ 51%] test/test_lyrics.py::SlugTests::test_slug PASSED [ 51%] test/test_mb.py::MBAlbumInfoTest::test_data_source PASSED [ 52%] test/test_mb.py::MBAlbumInfoTest::test_detect_various_artists PASSED [ 52%] test/test_mb.py::MBAlbumInfoTest::test_ignored_media PASSED [ 52%] test/test_mb.py::MBAlbumInfoTest::test_missing_language PASSED [ 52%] test/test_mb.py::MBAlbumInfoTest::test_no_durations PASSED [ 52%] test/test_mb.py::MBAlbumInfoTest::test_no_ignored_media PASSED [ 52%] test/test_mb.py::MBAlbumInfoTest::test_no_release_date PASSED [ 52%] test/test_mb.py::MBAlbumInfoTest::test_no_skip_audio_data_tracks_if_configured PASSED [ 52%] test/test_mb.py::MBAlbumInfoTest::test_no_skip_video_data_tracks_if_configured PASSED [ 52%] test/test_mb.py::MBAlbumInfoTest::test_no_skip_video_tracks_if_configured PASSED [ 52%] test/test_mb.py::MBAlbumInfoTest::test_parse_artist_sort_name PASSED [ 52%] test/test_mb.py::MBAlbumInfoTest::test_parse_asin PASSED [ 52%] test/test_mb.py::MBAlbumInfoTest::test_parse_catalognum PASSED [ 52%] test/test_mb.py::MBAlbumInfoTest::test_parse_country PASSED [ 53%] test/test_mb.py::MBAlbumInfoTest::test_parse_disambig PASSED [ 53%] test/test_mb.py::MBAlbumInfoTest::test_parse_disctitle PASSED [ 53%] test/test_mb.py::MBAlbumInfoTest::test_parse_media PASSED [ 53%] test/test_mb.py::MBAlbumInfoTest::test_parse_medium_numbers_single_medium PASSED [ 53%] test/test_mb.py::MBAlbumInfoTest::test_parse_medium_numbers_two_mediums PASSED [ 53%] test/test_mb.py::MBAlbumInfoTest::test_parse_recording_artist PASSED [ 53%] test/test_mb.py::MBAlbumInfoTest::test_parse_release_full_date PASSED [ 53%] test/test_mb.py::MBAlbumInfoTest::test_parse_release_type PASSED [ 53%] test/test_mb.py::MBAlbumInfoTest::test_parse_release_with_year PASSED [ 53%] test/test_mb.py::MBAlbumInfoTest::test_parse_release_year_month_only PASSED [ 53%] test/test_mb.py::MBAlbumInfoTest::test_parse_releasegroupid PASSED [ 53%] test/test_mb.py::MBAlbumInfoTest::test_parse_status PASSED [ 53%] test/test_mb.py::MBAlbumInfoTest::test_parse_textrepr PASSED [ 54%] test/test_mb.py::MBAlbumInfoTest::test_parse_track_indices PASSED [ 54%] test/test_mb.py::MBAlbumInfoTest::test_parse_tracks PASSED [ 54%] test/test_mb.py::MBAlbumInfoTest::test_skip_audio_data_tracks_by_default PASSED [ 54%] test/test_mb.py::MBAlbumInfoTest::test_skip_data_track PASSED [ 54%] test/test_mb.py::MBAlbumInfoTest::test_skip_video_data_tracks_by_default PASSED [ 54%] test/test_mb.py::MBAlbumInfoTest::test_skip_video_tracks_by_default PASSED [ 54%] test/test_mb.py::MBAlbumInfoTest::test_track_artist_overrides_recording_artist PASSED [ 54%] test/test_mb.py::MBAlbumInfoTest::test_track_length_overrides_recording_length PASSED [ 54%] test/test_mb.py::MBAlbumInfoTest::test_various_artists_defaults_false PASSED [ 54%] test/test_mb.py::ParseIDTest::test_parse_id_correct PASSED [ 54%] test/test_mb.py::ParseIDTest::test_parse_id_non_id_returns_none PASSED [ 54%] test/test_mb.py::ParseIDTest::test_parse_id_url_finds_id PASSED [ 54%] test/test_mb.py::ArtistFlatteningTest::test_alias PASSED [ 55%] test/test_mb.py::ArtistFlatteningTest::test_single_artist PASSED [ 55%] test/test_mb.py::ArtistFlatteningTest::test_two_artists PASSED [ 55%] test/test_mb.py::MBLibraryTest::test_match_album PASSED [ 55%] test/test_mb.py::MBLibraryTest::test_match_album_empty PASSED [ 55%] test/test_mb.py::MBLibraryTest::test_match_track PASSED [ 55%] test/test_mb.py::MBLibraryTest::test_match_track_empty PASSED [ 55%] test/test_mbsubmit.py::MBSubmitPluginTest::test_print_tracks_output PASSED [ 55%] test/test_mbsubmit.py::MBSubmitPluginTest::test_print_tracks_output_as_tracks PASSED [ 55%] test/test_mbsync.py::MbsyncCliTest::test_message_when_invalid PASSED [ 55%] test/test_mbsync.py::MbsyncCliTest::test_message_when_skipping PASSED [ 55%] test/test_mbsync.py::MbsyncCliTest::test_update_library PASSED [ 55%] test/test_mediafile_edge.py::EdgeTest::test_discc_alternate_field PASSED [ 55%] test/test_mediafile_edge.py::EdgeTest::test_emptylist PASSED [ 56%] test/test_mediafile_edge.py::EdgeTest::test_old_ape_version_bitrate PASSED [ 56%] test/test_mediafile_edge.py::EdgeTest::test_only_magic_bytes_jpeg PASSED [ 56%] test/test_mediafile_edge.py::EdgeTest::test_release_time_with_space PASSED [ 56%] test/test_mediafile_edge.py::EdgeTest::test_release_time_with_t PASSED [ 56%] test/test_mediafile_edge.py::EdgeTest::test_soundcheck_non_ascii PASSED [ 56%] test/test_mediafile_edge.py::EdgeTest::test_tempo_with_bpm PASSED [ 56%] test/test_mediafile_edge.py::InvalidValueToleranceTest::test_safe_cast_float_with_dot_only PASSED [ 56%] test/test_mediafile_edge.py::InvalidValueToleranceTest::test_safe_cast_float_with_multiple_dots PASSED [ 56%] test/test_mediafile_edge.py::InvalidValueToleranceTest::test_safe_cast_float_with_no_numbers PASSED [ 56%] test/test_mediafile_edge.py::InvalidValueToleranceTest::test_safe_cast_int_string_to_int PASSED [ 56%] test/test_mediafile_edge.py::InvalidValueToleranceTest::test_safe_cast_int_to_float PASSED [ 56%] test/test_mediafile_edge.py::InvalidValueToleranceTest::test_safe_cast_intstring_to_bool PASSED [ 56%] test/test_mediafile_edge.py::InvalidValueToleranceTest::test_safe_cast_negative_string_to_float PASSED [ 57%] test/test_mediafile_edge.py::InvalidValueToleranceTest::test_safe_cast_special_chars_to_unicode PASSED [ 57%] test/test_mediafile_edge.py::InvalidValueToleranceTest::test_safe_cast_string_to_bool PASSED [ 57%] test/test_mediafile_edge.py::InvalidValueToleranceTest::test_safe_cast_string_to_float PASSED [ 57%] test/test_mediafile_edge.py::InvalidValueToleranceTest::test_safe_cast_string_to_int PASSED [ 57%] test/test_mediafile_edge.py::InvalidValueToleranceTest::test_safe_cast_string_to_int_with_no_numbers PASSED [ 57%] test/test_mediafile_edge.py::InvalidValueToleranceTest::test_safe_cast_string_with_cruft_to_float PASSED [ 57%] test/test_mediafile_edge.py::SafetyTest::test_broken_symlink PASSED [ 57%] test/test_mediafile_edge.py::SafetyTest::test_corrupt_flac_raises_unreadablefileerror PASSED [ 57%] test/test_mediafile_edge.py::SafetyTest::test_corrupt_monkeys_raises_unreadablefileerror PASSED [ 57%] test/test_mediafile_edge.py::SafetyTest::test_corrupt_mp3_raises_unreadablefileerror PASSED [ 57%] test/test_mediafile_edge.py::SafetyTest::test_corrupt_mp4_raises_unreadablefileerror PASSED [ 57%] test/test_mediafile_edge.py::SafetyTest::test_corrupt_ogg_raises_unreadablefileerror PASSED [ 57%] test/test_mediafile_edge.py::SafetyTest::test_invalid_extension_raises_filetypeerror PASSED [ 57%] test/test_mediafile_edge.py::SafetyTest::test_invalid_ogg_header_raises_unreadablefileerror PASSED [ 58%] test/test_mediafile_edge.py::SafetyTest::test_magic_xml_raises_unreadablefileerror PASSED [ 58%] test/test_mediafile_edge.py::SideEffectsTest::test_opening_tagless_file_leaves_untouched PASSED [ 58%] test/test_mediafile_edge.py::MP4EncodingTest::test_unicode_label_in_m4a PASSED [ 58%] test/test_mediafile_edge.py::MP3EncodingTest::test_comment_with_latin1_encoding PASSED [ 58%] test/test_mediafile_edge.py::MissingAudioDataTest::test_bitrate_with_zero_length PASSED [ 58%] test/test_mediafile_edge.py::TypeTest::test_set_date_to_none PASSED [ 58%] test/test_mediafile_edge.py::TypeTest::test_set_replaygain_gain_to_none PASSED [ 58%] test/test_mediafile_edge.py::TypeTest::test_set_replaygain_peak_to_none PASSED [ 58%] test/test_mediafile_edge.py::TypeTest::test_set_track_to_none PASSED [ 58%] test/test_mediafile_edge.py::TypeTest::test_set_year_to_none PASSED [ 58%] test/test_mediafile_edge.py::TypeTest::test_year_integer_in_string PASSED [ 58%] test/test_mediafile_edge.py::SoundCheckTest::test_decode_handles_unicode PASSED [ 58%] test/test_mediafile_edge.py::SoundCheckTest::test_decode_zero PASSED [ 59%] test/test_mediafile_edge.py::SoundCheckTest::test_malformatted PASSED [ 59%] test/test_mediafile_edge.py::SoundCheckTest::test_round_trip PASSED [ 59%] test/test_mediafile_edge.py::SoundCheckTest::test_special_characters PASSED [ 59%] test/test_mediafile_edge.py::ID3v23Test::test_image_encoding PASSED [ 59%] test/test_mediafile_edge.py::ID3v23Test::test_v23_on_non_mp3_is_noop PASSED [ 59%] test/test_mediafile_edge.py::ID3v23Test::test_v23_year_tag PASSED [ 59%] test/test_mediafile_edge.py::ID3v23Test::test_v24_year_tag PASSED [ 59%] test/test_metasync.py::MetaSyncTest::test_load_item_types PASSED [ 59%] test/test_metasync.py::MetaSyncTest::test_pretend_sync_from_itunes PASSED [ 59%] test/test_metasync.py::MetaSyncTest::test_sync_from_itunes PASSED [ 59%] test/test_permissions.py::PermissionsPluginTest::test_convert_perm_from_int PASSED [ 59%] test/test_permissions.py::PermissionsPluginTest::test_convert_perm_from_string PASSED [ 59%] test/test_permissions.py::PermissionsPluginTest::test_failing_to_set_permissions PASSED [ 60%] test/test_permissions.py::PermissionsPluginTest::test_permissions_on_album_imported PASSED [ 60%] test/test_permissions.py::PermissionsPluginTest::test_permissions_on_item_imported PASSED [ 60%] test/test_pipeline.py::SimplePipelineTest::test_pull PASSED [ 60%] test/test_pipeline.py::SimplePipelineTest::test_pull_chain PASSED [ 60%] test/test_pipeline.py::SimplePipelineTest::test_run_parallel PASSED [ 60%] test/test_pipeline.py::SimplePipelineTest::test_run_sequential PASSED [ 60%] test/test_pipeline.py::ParallelStageTest::test_pull PASSED [ 60%] test/test_pipeline.py::ParallelStageTest::test_run_parallel PASSED [ 60%] test/test_pipeline.py::ParallelStageTest::test_run_sequential PASSED [ 60%] test/test_pipeline.py::ExceptionTest::test_pull PASSED [ 60%] test/test_pipeline.py::ExceptionTest::test_run_parallel PASSED [ 60%] test/test_pipeline.py::ExceptionTest::test_run_sequential PASSED [ 60%] test/test_pipeline.py::ParallelExceptionTest::test_run_parallel PASSED [ 61%] test/test_pipeline.py::ConstrainedThreadedPipelineTest::test_constrained PASSED [ 61%] test/test_pipeline.py::ConstrainedThreadedPipelineTest::test_constrained_exception PASSED [ 61%] test/test_pipeline.py::ConstrainedThreadedPipelineTest::test_constrained_parallel PASSED [ 61%] test/test_pipeline.py::BubbleTest::test_pull PASSED [ 61%] test/test_pipeline.py::BubbleTest::test_run_parallel PASSED [ 61%] test/test_pipeline.py::BubbleTest::test_run_sequential PASSED [ 61%] test/test_pipeline.py::MultiMessageTest::test_pull PASSED [ 61%] test/test_pipeline.py::MultiMessageTest::test_run_parallel PASSED [ 61%] test/test_pipeline.py::MultiMessageTest::test_run_sequential PASSED [ 61%] test/test_pipeline.py::StageDecoratorTest::test_mutator_stage_decorator PASSED [ 61%] test/test_pipeline.py::StageDecoratorTest::test_stage_decorator PASSED [ 61%] test/test_play.py::PlayPluginTest::test_album_option PASSED [ 61%] test/test_play.py::PlayPluginTest::test_args_option PASSED [ 62%] test/test_play.py::PlayPluginTest::test_args_option_in_middle PASSED [ 62%] test/test_play.py::PlayPluginTest::test_basic PASSED [ 62%] test/test_play.py::PlayPluginTest::test_command_failed PASSED [ 62%] test/test_play.py::PlayPluginTest::test_not_found PASSED [ 62%] test/test_play.py::PlayPluginTest::test_raw PASSED [ 62%] test/test_play.py::PlayPluginTest::test_relative_to PASSED [ 62%] test/test_play.py::PlayPluginTest::test_skip_warning_threshold_bypass PASSED [ 62%] test/test_play.py::PlayPluginTest::test_unset_args_option_in_middle PASSED [ 62%] test/test_play.py::PlayPluginTest::test_use_folders PASSED [ 62%] test/test_play.py::PlayPluginTest::test_warning_threshold PASSED [ 62%] test/test_playlist.py::PlaylistTestRelativeToLib::test_name_query_with_absolute_paths_in_playlist PASSED [ 62%] test/test_playlist.py::PlaylistTestRelativeToLib::test_name_query_with_nonexisting_playlist PASSED [ 62%] test/test_playlist.py::PlaylistTestRelativeToLib::test_name_query_with_relative_paths_in_playlist PASSED [ 63%] test/test_playlist.py::PlaylistTestRelativeToLib::test_path_query_with_absolute_paths_in_playlist PASSED [ 63%] test/test_playlist.py::PlaylistTestRelativeToLib::test_path_query_with_nonexisting_playlist PASSED [ 63%] test/test_playlist.py::PlaylistTestRelativeToLib::test_path_query_with_relative_paths_in_playlist PASSED [ 63%] test/test_playlist.py::PlaylistTestRelativeToDir::test_name_query_with_absolute_paths_in_playlist PASSED [ 63%] test/test_playlist.py::PlaylistTestRelativeToDir::test_name_query_with_nonexisting_playlist PASSED [ 63%] test/test_playlist.py::PlaylistTestRelativeToDir::test_name_query_with_relative_paths_in_playlist PASSED [ 63%] test/test_playlist.py::PlaylistTestRelativeToDir::test_path_query_with_absolute_paths_in_playlist PASSED [ 63%] test/test_playlist.py::PlaylistTestRelativeToDir::test_path_query_with_nonexisting_playlist PASSED [ 63%] test/test_playlist.py::PlaylistTestRelativeToDir::test_path_query_with_relative_paths_in_playlist PASSED [ 63%] test/test_playlist.py::PlaylistTestRelativeToPls::test_name_query_with_absolute_paths_in_playlist PASSED [ 63%] test/test_playlist.py::PlaylistTestRelativeToPls::test_name_query_with_nonexisting_playlist PASSED [ 63%] test/test_playlist.py::PlaylistTestRelativeToPls::test_name_query_with_relative_paths_in_playlist PASSED [ 63%] test/test_playlist.py::PlaylistTestRelativeToPls::test_path_query_with_absolute_paths_in_playlist PASSED [ 64%] test/test_playlist.py::PlaylistTestRelativeToPls::test_path_query_with_nonexisting_playlist PASSED [ 64%] test/test_playlist.py::PlaylistTestRelativeToPls::test_path_query_with_relative_paths_in_playlist PASSED [ 64%] test/test_playlist.py::PlaylistTestItemMoved::test_item_moved PASSED [ 64%] test/test_playlist.py::PlaylistTestItemRemoved::test_item_removed PASSED [ 64%] test/test_plexupdate.py::PlexUpdateTest::test_get_music_section PASSED [ 64%] test/test_plexupdate.py::PlexUpdateTest::test_get_named_music_section PASSED [ 64%] test/test_plexupdate.py::PlexUpdateTest::test_update_plex PASSED [ 64%] test/test_plugin_mediafield.py::ExtendedFieldTestMixin::test_extended_field_write PASSED [ 64%] test/test_plugin_mediafield.py::ExtendedFieldTestMixin::test_invalid_descriptor PASSED [ 64%] test/test_plugin_mediafield.py::ExtendedFieldTestMixin::test_overwrite_property PASSED [ 64%] test/test_plugin_mediafield.py::ExtendedFieldTestMixin::test_read_flexible_attribute_from_file PASSED [ 64%] test/test_plugin_mediafield.py::ExtendedFieldTestMixin::test_write_extended_tag_from_item PASSED [ 64%] test/test_plugins.py::ItemTypesTest::test_flex_field_type PASSED [ 64%] test/test_plugins.py::ItemWriteTest::test_change_tags PASSED [ 65%] test/test_plugins.py::ItemTypeConflictTest::test_match PASSED [ 65%] test/test_plugins.py::ItemTypeConflictTest::test_mismatch PASSED [ 65%] test/test_plugins.py::EventsTest::test_import_task_created PASSED [ 65%] test/test_plugins.py::EventsTest::test_import_task_created_with_plugin PASSED [ 65%] test/test_plugins.py::HelpersTest::test_sanitize_choices PASSED [ 65%] test/test_plugins.py::ListenersTest::test_events_called PASSED [ 65%] test/test_plugins.py::ListenersTest::test_listener_params PASSED [ 65%] test/test_plugins.py::ListenersTest::test_register PASSED [ 65%] test/test_plugins.py::PromptChoicesTest::test_choices_conflicts PASSED [ 65%] test/test_plugins.py::PromptChoicesTest::test_plugin_callback PASSED [ 65%] test/test_plugins.py::PromptChoicesTest::test_plugin_callback_return PASSED [ 65%] test/test_plugins.py::PromptChoicesTest::test_plugin_choices_in_ui_input_options_album PASSED [ 65%] test/test_plugins.py::PromptChoicesTest::test_plugin_choices_in_ui_input_options_singleton PASSED [ 66%] test/test_query.py::AnyFieldQueryTest::test_eq PASSED [ 66%] test/test_query.py::AnyFieldQueryTest::test_no_restriction PASSED [ 66%] test/test_query.py::AnyFieldQueryTest::test_restriction_completeness PASSED [ 66%] test/test_query.py::AnyFieldQueryTest::test_restriction_soundness PASSED [ 66%] test/test_query.py::GetTest::test_compilation_false PASSED [ 66%] test/test_query.py::GetTest::test_compilation_true PASSED [ 66%] test/test_query.py::GetTest::test_get_empty PASSED [ 66%] test/test_query.py::GetTest::test_get_no_matches PASSED [ 66%] test/test_query.py::GetTest::test_get_none PASSED [ 66%] test/test_query.py::GetTest::test_get_one_keyed_regexp PASSED [ 66%] test/test_query.py::GetTest::test_get_one_keyed_term PASSED [ 66%] test/test_query.py::GetTest::test_get_one_unkeyed_regexp PASSED [ 66%] test/test_query.py::GetTest::test_get_one_unkeyed_term PASSED [ 67%] test/test_query.py::GetTest::test_invalid_key PASSED [ 67%] test/test_query.py::GetTest::test_invalid_query PASSED [ 67%] test/test_query.py::GetTest::test_item_field_name_matches_nothing_in_album_query PASSED [ 67%] test/test_query.py::GetTest::test_key_case_insensitive PASSED [ 67%] test/test_query.py::GetTest::test_keyed_regexp_matches_only_one_column PASSED [ 67%] test/test_query.py::GetTest::test_keyed_term_matches_only_one_column PASSED [ 67%] test/test_query.py::GetTest::test_mixed_terms_regexps_narrow_search PASSED [ 67%] test/test_query.py::GetTest::test_multiple_regexps_narrow_search PASSED [ 67%] test/test_query.py::GetTest::test_multiple_terms_narrow_search PASSED [ 67%] test/test_query.py::GetTest::test_numeric_search_negative PASSED [ 67%] test/test_query.py::GetTest::test_numeric_search_positive PASSED [ 67%] test/test_query.py::GetTest::test_regexp_case_sensitive PASSED [ 67%] test/test_query.py::GetTest::test_single_year PASSED [ 68%] test/test_query.py::GetTest::test_singleton_false PASSED [ 68%] test/test_query.py::GetTest::test_singleton_true PASSED [ 68%] test/test_query.py::GetTest::test_term_case_insensitive PASSED [ 68%] test/test_query.py::GetTest::test_term_case_insensitive_with_key PASSED [ 68%] test/test_query.py::GetTest::test_unicode_query PASSED [ 68%] test/test_query.py::GetTest::test_unkeyed_regexp_matches_multiple_columns PASSED [ 68%] test/test_query.py::GetTest::test_unkeyed_term_matches_multiple_columns PASSED [ 68%] test/test_query.py::GetTest::test_unknown_field_name_no_results PASSED [ 68%] test/test_query.py::GetTest::test_unknown_field_name_no_results_in_album_query PASSED [ 68%] test/test_query.py::GetTest::test_year_range PASSED [ 68%] test/test_query.py::MatchTest::test_bitrate_range_negative PASSED [ 68%] test/test_query.py::MatchTest::test_bitrate_range_positive PASSED [ 68%] test/test_query.py::MatchTest::test_eq PASSED [ 69%] test/test_query.py::MatchTest::test_open_range PASSED [ 69%] test/test_query.py::MatchTest::test_regex_match_negative PASSED [ 69%] test/test_query.py::MatchTest::test_regex_match_non_string_value PASSED [ 69%] test/test_query.py::MatchTest::test_regex_match_positive PASSED [ 69%] test/test_query.py::MatchTest::test_substring_match_negative PASSED [ 69%] test/test_query.py::MatchTest::test_substring_match_non_string_value PASSED [ 69%] test/test_query.py::MatchTest::test_substring_match_positive PASSED [ 69%] test/test_query.py::MatchTest::test_year_match_negative PASSED [ 69%] test/test_query.py::MatchTest::test_year_match_positive PASSED [ 69%] test/test_query.py::PathQueryTest::test_case_sensitivity PASSED [ 69%] test/test_query.py::PathQueryTest::test_detect_absolute_path PASSED [ 69%] test/test_query.py::PathQueryTest::test_detect_relative_path PASSED [ 69%] test/test_query.py::PathQueryTest::test_escape_backslash PASSED [ 70%] test/test_query.py::PathQueryTest::test_escape_percent PASSED [ 70%] test/test_query.py::PathQueryTest::test_escape_underscore PASSED [ 70%] test/test_query.py::PathQueryTest::test_fragment_no_match PASSED [ 70%] test/test_query.py::PathQueryTest::test_no_match PASSED [ 70%] test/test_query.py::PathQueryTest::test_non_slashed_does_not_match_path PASSED [ 70%] test/test_query.py::PathQueryTest::test_nonnorm_path PASSED [ 70%] test/test_query.py::PathQueryTest::test_parent_directory_no_slash PASSED [ 70%] test/test_query.py::PathQueryTest::test_parent_directory_with_slash PASSED [ 70%] test/test_query.py::PathQueryTest::test_path_album_regex PASSED [ 70%] test/test_query.py::PathQueryTest::test_path_exact_match PASSED [ 70%] test/test_query.py::PathQueryTest::test_path_item_regex PASSED [ 70%] test/test_query.py::PathQueryTest::test_path_query_in_or_query SKIPPED [ 70%] test/test_query.py::PathQueryTest::test_path_sep_detection PASSED [ 71%] test/test_query.py::PathQueryTest::test_slashed_query_matches_path PASSED [ 71%] test/test_query.py::PathQueryTest::test_slashes_in_explicit_field_does_not_match_path PASSED [ 71%] test/test_query.py::IntQueryTest::test_exact_value_match PASSED [ 71%] test/test_query.py::IntQueryTest::test_flex_dont_match_missing PASSED [ 71%] test/test_query.py::IntQueryTest::test_flex_range_match PASSED [ 71%] test/test_query.py::IntQueryTest::test_no_substring_match PASSED [ 71%] test/test_query.py::IntQueryTest::test_range_match PASSED [ 71%] test/test_query.py::BoolQueryTest::test_flex_parse_0 PASSED [ 71%] test/test_query.py::BoolQueryTest::test_flex_parse_1 PASSED [ 71%] test/test_query.py::BoolQueryTest::test_flex_parse_any_string PASSED [ 71%] test/test_query.py::BoolQueryTest::test_flex_parse_false PASSED [ 71%] test/test_query.py::BoolQueryTest::test_flex_parse_true PASSED [ 71%] test/test_query.py::BoolQueryTest::test_parse_true PASSED [ 71%] test/test_query.py::DefaultSearchFieldsTest::test_albums_matches_album PASSED [ 72%] test/test_query.py::DefaultSearchFieldsTest::test_albums_matches_albumartist PASSED [ 72%] test/test_query.py::DefaultSearchFieldsTest::test_items_does_not_match_year PASSED [ 72%] test/test_query.py::DefaultSearchFieldsTest::test_items_matches_title PASSED [ 72%] test/test_query.py::NoneQueryTest::test_match_after_set_none PASSED [ 72%] test/test_query.py::NoneQueryTest::test_match_singletons PASSED [ 72%] test/test_query.py::NotQueryMatchTest::test_bitrate_range_negative PASSED [ 72%] test/test_query.py::NotQueryMatchTest::test_bitrate_range_positive PASSED [ 72%] test/test_query.py::NotQueryMatchTest::test_open_range PASSED [ 72%] test/test_query.py::NotQueryMatchTest::test_regex_match_negative PASSED [ 72%] test/test_query.py::NotQueryMatchTest::test_regex_match_non_string_value PASSED [ 72%] test/test_query.py::NotQueryMatchTest::test_regex_match_positive PASSED [ 72%] test/test_query.py::NotQueryMatchTest::test_substring_match_negative PASSED [ 72%] test/test_query.py::NotQueryMatchTest::test_substring_match_non_string_value PASSED [ 73%] test/test_query.py::NotQueryMatchTest::test_substring_match_positive PASSED [ 73%] test/test_query.py::NotQueryMatchTest::test_year_match_negative PASSED [ 73%] test/test_query.py::NotQueryMatchTest::test_year_match_positive PASSED [ 73%] test/test_query.py::NotQueryTest::test_fast_vs_slow PASSED [ 73%] test/test_query.py::NotQueryTest::test_get_mixed_terms PASSED [ 73%] test/test_query.py::NotQueryTest::test_get_multiple_terms PASSED [ 73%] test/test_query.py::NotQueryTest::test_get_one_keyed_regexp PASSED [ 73%] test/test_query.py::NotQueryTest::test_get_one_unkeyed_regexp PASSED [ 73%] test/test_query.py::NotQueryTest::test_get_prefixes_keyed PASSED [ 73%] test/test_query.py::NotQueryTest::test_get_prefixes_unkeyed PASSED [ 73%] test/test_query.py::NotQueryTest::test_type_and PASSED [ 73%] test/test_query.py::NotQueryTest::test_type_anyfield PASSED [ 73%] test/test_query.py::NotQueryTest::test_type_boolean PASSED [ 74%] test/test_query.py::NotQueryTest::test_type_date PASSED [ 74%] test/test_query.py::NotQueryTest::test_type_false PASSED [ 74%] test/test_query.py::NotQueryTest::test_type_match PASSED [ 74%] test/test_query.py::NotQueryTest::test_type_none PASSED [ 74%] test/test_query.py::NotQueryTest::test_type_numeric PASSED [ 74%] test/test_query.py::NotQueryTest::test_type_or PASSED [ 74%] test/test_query.py::NotQueryTest::test_type_regexp PASSED [ 74%] test/test_query.py::NotQueryTest::test_type_substring PASSED [ 74%] test/test_query.py::NotQueryTest::test_type_true PASSED [ 74%] test/test_random.py::RandomTest::test_equal_permutation PASSED [ 74%] test/test_smartplaylist.py::SmartPlaylistTest::test_build_queries PASSED [ 74%] test/test_smartplaylist.py::SmartPlaylistTest::test_build_queries_with_sorts PASSED [ 74%] test/test_smartplaylist.py::SmartPlaylistTest::test_db_changes PASSED [ 75%] test/test_smartplaylist.py::SmartPlaylistTest::test_matches PASSED [ 75%] test/test_smartplaylist.py::SmartPlaylistTest::test_playlist_update PASSED [ 75%] test/test_smartplaylist.py::SmartPlaylistCLITest::test_splupdate PASSED [ 75%] test/test_sort.py::SortFixedFieldTest::test_sort_asc PASSED [ 75%] test/test_sort.py::SortFixedFieldTest::test_sort_desc PASSED [ 75%] test/test_sort.py::SortFixedFieldTest::test_sort_path_field PASSED [ 75%] test/test_sort.py::SortFixedFieldTest::test_sort_two_field_asc PASSED [ 75%] test/test_sort.py::SortFlexFieldTest::test_sort_asc PASSED [ 75%] test/test_sort.py::SortFlexFieldTest::test_sort_desc PASSED [ 75%] test/test_sort.py::SortFlexFieldTest::test_sort_two_field PASSED [ 75%] test/test_sort.py::SortAlbumFixedFieldTest::test_sort_asc PASSED [ 75%] test/test_sort.py::SortAlbumFixedFieldTest::test_sort_desc PASSED [ 75%] test/test_sort.py::SortAlbumFixedFieldTest::test_sort_two_field_asc PASSED [ 76%] test/test_sort.py::SortAlbumFlexFieldTest::test_sort_asc PASSED [ 76%] test/test_sort.py::SortAlbumFlexFieldTest::test_sort_desc PASSED [ 76%] test/test_sort.py::SortAlbumFlexFieldTest::test_sort_two_field_asc PASSED [ 76%] test/test_sort.py::SortAlbumComputedFieldTest::test_sort_asc PASSED [ 76%] test/test_sort.py::SortAlbumComputedFieldTest::test_sort_desc PASSED [ 76%] test/test_sort.py::SortCombinedFieldTest::test_computed_first PASSED [ 76%] test/test_sort.py::SortCombinedFieldTest::test_computed_second PASSED [ 76%] test/test_sort.py::ConfigSortTest::test_config_opposite_sort_album PASSED [ 76%] test/test_sort.py::ConfigSortTest::test_config_opposite_sort_item PASSED [ 76%] test/test_sort.py::ConfigSortTest::test_default_sort_album PASSED [ 76%] test/test_sort.py::ConfigSortTest::test_default_sort_item PASSED [ 76%] test/test_sort.py::CaseSensitivityTest::test_case_sensitive_only_affects_text PASSED [ 76%] test/test_sort.py::CaseSensitivityTest::test_fixed_field_case_insensitive PASSED [ 77%] test/test_sort.py::CaseSensitivityTest::test_fixed_field_case_sensitive PASSED [ 77%] test/test_sort.py::CaseSensitivityTest::test_flex_field_case_insensitive PASSED [ 77%] test/test_sort.py::CaseSensitivityTest::test_flex_field_case_sensitive PASSED [ 77%] test/test_sort.py::CaseSensitivityTest::test_smart_artist_case_insensitive PASSED [ 77%] test/test_sort.py::CaseSensitivityTest::test_smart_artist_case_sensitive PASSED [ 77%] test/test_sort.py::NonExistingFieldTest::test_combined_non_existing_field_asc PASSED [ 77%] test/test_sort.py::NonExistingFieldTest::test_combined_non_existing_field_desc PASSED [ 77%] test/test_sort.py::NonExistingFieldTest::test_field_present_in_some_items PASSED [ 77%] test/test_sort.py::NonExistingFieldTest::test_negation_interaction PASSED [ 77%] test/test_sort.py::NonExistingFieldTest::test_non_existing_fields_not_fail PASSED [ 77%] test/test_template.py::ParseTest::test_bare_closer_kept_intact PASSED [ 77%] test/test_template.py::ParseTest::test_bare_function_delim_kept_intact PASSED [ 77%] test/test_template.py::ParseTest::test_bare_opener_kept_intact PASSED [ 78%] test/test_template.py::ParseTest::test_bare_sep_kept_intact PASSED [ 78%] test/test_template.py::ParseTest::test_bare_value_delim_kept_intact PASSED [ 78%] test/test_template.py::ParseTest::test_call_empty_arg PASSED [ 78%] test/test_template.py::ParseTest::test_call_single_arg PASSED [ 78%] test/test_template.py::ParseTest::test_call_two_args PASSED [ 78%] test/test_template.py::ParseTest::test_call_with_escaped_close PASSED [ 78%] test/test_template.py::ParseTest::test_call_with_escaped_sep PASSED [ 78%] test/test_template.py::ParseTest::test_call_with_nested_call_argument PASSED [ 78%] test/test_template.py::ParseTest::test_call_with_symbol_argument PASSED [ 78%] test/test_template.py::ParseTest::test_call_with_unclosed_args PASSED [ 78%] test/test_template.py::ParseTest::test_call_with_unclosed_multiple_args PASSED [ 78%] test/test_template.py::ParseTest::test_call_without_args PASSED [ 78%] test/test_template.py::ParseTest::test_call_without_args_at_end PASSED [ 78%] test/test_template.py::ParseTest::test_empty_braces_symbol PASSED [ 79%] test/test_template.py::ParseTest::test_empty_string PASSED [ 79%] test/test_template.py::ParseTest::test_escaped_character_at_end PASSED [ 79%] test/test_template.py::ParseTest::test_escaped_character_at_start PASSED [ 79%] test/test_template.py::ParseTest::test_escaped_character_in_text PASSED [ 79%] test/test_template.py::ParseTest::test_escaped_character_only PASSED [ 79%] test/test_template.py::ParseTest::test_escaped_close_brace PASSED [ 79%] test/test_template.py::ParseTest::test_escaped_function_delim PASSED [ 79%] test/test_template.py::ParseTest::test_escaped_sep PASSED [ 79%] test/test_template.py::ParseTest::test_nested_call_with_argument PASSED [ 79%] test/test_template.py::ParseTest::test_newline_at_end PASSED [ 79%] test/test_template.py::ParseTest::test_plain_text PASSED [ 79%] test/test_template.py::ParseTest::test_sep_before_call_two_args PASSED [ 79%] test/test_template.py::ParseTest::test_sep_with_symbols PASSED [ 80%] test/test_template.py::ParseTest::test_symbol_alone PASSED [ 80%] test/test_template.py::ParseTest::test_symbol_in_text PASSED [ 80%] test/test_template.py::ParseTest::test_symbol_with_braces PASSED [ 80%] test/test_template.py::ParseTest::test_unclosed_braces_symbol PASSED [ 80%] test/test_template.py::EvalTest::test_function_call PASSED [ 80%] test/test_template.py::EvalTest::test_function_call_exception PASSED [ 80%] test/test_template.py::EvalTest::test_function_call_with_empty_arg PASSED [ 80%] test/test_template.py::EvalTest::test_function_call_with_text PASSED [ 80%] test/test_template.py::EvalTest::test_function_returning_integer PASSED [ 80%] test/test_template.py::EvalTest::test_nested_function_call PASSED [ 80%] test/test_template.py::EvalTest::test_not_subtitute_func_with_no_args PASSED [ 80%] test/test_template.py::EvalTest::test_not_subtitute_undefined_func PASSED [ 80%] test/test_template.py::EvalTest::test_not_subtitute_undefined_value PASSED [ 81%] test/test_template.py::EvalTest::test_plain_text PASSED [ 81%] test/test_template.py::EvalTest::test_subtitute_value PASSED [ 81%] test/test_template.py::EvalTest::test_subtitute_value_in_text PASSED [ 81%] test/test_template.py::EvalTest::test_symbol_in_argument PASSED [ 81%] test/test_the.py::ThePluginTest::test_custom_format PASSED [ 81%] test/test_the.py::ThePluginTest::test_custom_pattern PASSED [ 81%] test/test_the.py::ThePluginTest::test_template_function_with_defaults PASSED [ 81%] test/test_the.py::ThePluginTest::test_unthe_with_default_patterns PASSED [ 81%] test/test_the.py::ThePluginTest::test_unthe_with_strip PASSED [ 81%] test/test_types_plugin.py::TypesPluginTest::test_album_integer_modify_and_query PASSED [ 81%] test/test_types_plugin.py::TypesPluginTest::test_bool_modify_and_query PASSED [ 81%] test/test_types_plugin.py::TypesPluginTest::test_date_modify_and_query PASSED [ 81%] test/test_types_plugin.py::TypesPluginTest::test_float_modify_and_query PASSED [ 82%] test/test_types_plugin.py::TypesPluginTest::test_integer_modify_and_query PASSED [ 82%] test/test_types_plugin.py::TypesPluginTest::test_unknown_type_error PASSED [ 82%] test/test_ui.py::ListTest::test_list_album_format PASSED [ 82%] test/test_ui.py::ListTest::test_list_album_omits_title PASSED [ 82%] test/test_ui.py::ListTest::test_list_album_outputs_something PASSED [ 82%] test/test_ui.py::ListTest::test_list_album_path PASSED [ 82%] test/test_ui.py::ListTest::test_list_album_uses_album_artist PASSED [ 82%] test/test_ui.py::ListTest::test_list_item_format_artist PASSED [ 82%] test/test_ui.py::ListTest::test_list_item_format_multiple PASSED [ 82%] test/test_ui.py::ListTest::test_list_item_path PASSED [ 82%] test/test_ui.py::ListTest::test_list_outputs_item PASSED [ 82%] test/test_ui.py::ListTest::test_list_unicode_query PASSED [ 82%] test/test_ui.py::ListTest::test_list_uses_track_artist PASSED [ 83%] test/test_ui.py::RemoveTest::test_remove_items_no_delete PASSED [ 83%] test/test_ui.py::RemoveTest::test_remove_items_with_delete PASSED [ 83%] test/test_ui.py::RemoveTest::test_remove_items_with_force_delete PASSED [ 83%] test/test_ui.py::RemoveTest::test_remove_items_with_force_no_delete PASSED [ 83%] test/test_ui.py::ModifyTest::test_album_move PASSED [ 83%] test/test_ui.py::ModifyTest::test_album_not_move PASSED [ 83%] test/test_ui.py::ModifyTest::test_arg_parsing_colon_query PASSED [ 83%] test/test_ui.py::ModifyTest::test_arg_parsing_delete PASSED [ 83%] test/test_ui.py::ModifyTest::test_arg_parsing_equals_in_value PASSED [ 83%] test/test_ui.py::ModifyTest::test_arg_parsing_query_with_exclaimation PASSED [ 83%] test/test_ui.py::ModifyTest::test_delete_initial_key_tag SKIPPED [ 83%] test/test_ui.py::ModifyTest::test_modify_album PASSED [ 83%] test/test_ui.py::ModifyTest::test_modify_album_dont_write_tags PASSED [ 84%] test/test_ui.py::ModifyTest::test_modify_album_write_tags PASSED [ 84%] test/test_ui.py::ModifyTest::test_modify_dont_write_tags PASSED [ 84%] test/test_ui.py::ModifyTest::test_modify_item PASSED [ 84%] test/test_ui.py::ModifyTest::test_modify_item_abort PASSED [ 84%] test/test_ui.py::ModifyTest::test_modify_item_no_change PASSED [ 84%] test/test_ui.py::ModifyTest::test_modify_write_tags PASSED [ 84%] test/test_ui.py::ModifyTest::test_move PASSED [ 84%] test/test_ui.py::ModifyTest::test_no_write_no_move PASSED [ 84%] test/test_ui.py::ModifyTest::test_not_move PASSED [ 84%] test/test_ui.py::ModifyTest::test_remove_flexattr PASSED [ 84%] test/test_ui.py::ModifyTest::test_reset_mtime_with_no_write PASSED [ 84%] test/test_ui.py::ModifyTest::test_selective_modify PASSED [ 84%] test/test_ui.py::ModifyTest::test_set_flexattr PASSED [ 85%] test/test_ui.py::ModifyTest::test_update_mtime PASSED [ 85%] test/test_ui.py::ModifyTest::test_write_initial_key_tag PASSED [ 85%] test/test_ui.py::WriteTest::test_non_metadata_field_unchanged PASSED [ 85%] test/test_ui.py::WriteTest::test_update_mtime PASSED [ 85%] test/test_ui.py::WriteTest::test_write_metadata_field PASSED [ 85%] test/test_ui.py::MoveTest::test_copy_album PASSED [ 85%] test/test_ui.py::MoveTest::test_copy_item PASSED [ 85%] test/test_ui.py::MoveTest::test_export_album_custom_dir PASSED [ 85%] test/test_ui.py::MoveTest::test_export_item_custom_dir PASSED [ 85%] test/test_ui.py::MoveTest::test_move_album PASSED [ 85%] test/test_ui.py::MoveTest::test_move_album_custom_dir PASSED [ 85%] test/test_ui.py::MoveTest::test_move_item PASSED [ 85%] test/test_ui.py::MoveTest::test_move_item_custom_dir PASSED [ 85%] test/test_ui.py::MoveTest::test_pretend_export_item PASSED [ 86%] test/test_ui.py::MoveTest::test_pretend_move_album PASSED [ 86%] test/test_ui.py::MoveTest::test_pretend_move_item PASSED [ 86%] test/test_ui.py::UpdateTest::test_delete_removes_album PASSED [ 86%] test/test_ui.py::UpdateTest::test_delete_removes_album_art PASSED [ 86%] test/test_ui.py::UpdateTest::test_delete_removes_item PASSED [ 86%] test/test_ui.py::UpdateTest::test_modified_album_metadata_art_moved PASSED [ 86%] test/test_ui.py::UpdateTest::test_modified_album_metadata_moved PASSED [ 86%] test/test_ui.py::UpdateTest::test_modified_metadata_detected PASSED [ 86%] test/test_ui.py::UpdateTest::test_modified_metadata_moved PASSED [ 86%] test/test_ui.py::UpdateTest::test_modified_metadata_not_moved PASSED [ 86%] test/test_ui.py::UpdateTest::test_mtime_match_skips_update PASSED [ 86%] test/test_ui.py::UpdateTest::test_selective_modified_album_metadata_moved PASSED [ 86%] test/test_ui.py::UpdateTest::test_selective_modified_album_metadata_not_moved PASSED [ 87%] test/test_ui.py::UpdateTest::test_selective_modified_metadata_moved PASSED [ 87%] test/test_ui.py::UpdateTest::test_selective_modified_metadata_not_moved PASSED [ 87%] test/test_ui.py::PrintTest::test_print_with_invalid_locale PASSED [ 87%] test/test_ui.py::PrintTest::test_print_without_locale PASSED [ 87%] test/test_ui.py::ImportTest::test_quiet_timid_disallowed PASSED [ 87%] test/test_ui.py::ConfigTest::test_beetsdir_config PASSED [ 87%] test/test_ui.py::ConfigTest::test_beetsdir_config_does_not_load_default_user_config PASSED [ 87%] test/test_ui.py::ConfigTest::test_beetsdir_config_paths_resolve_relative_to_beetsdir PASSED [ 87%] test/test_ui.py::ConfigTest::test_beetsdir_points_to_file_error PASSED [ 87%] test/test_ui.py::ConfigTest::test_cli_config_file_loads_plugin_commands PASSED [ 87%] test/test_ui.py::ConfigTest::test_cli_config_file_overwrites_beetsdir_defaults PASSED [ 87%] test/test_ui.py::ConfigTest::test_cli_config_file_overwrites_user_defaults PASSED [ 87%] test/test_ui.py::ConfigTest::test_cli_config_option PASSED [ 88%] test/test_ui.py::ConfigTest::test_cli_config_paths_resolve_relative_to_beetsdir PASSED [ 88%] test/test_ui.py::ConfigTest::test_cli_config_paths_resolve_relative_to_user_dir PASSED [ 88%] test/test_ui.py::ConfigTest::test_command_line_option_relative_to_working_dir PASSED [ 88%] test/test_ui.py::ConfigTest::test_default_config_paths_resolve_relative_to_beetsdir PASSED [ 88%] test/test_ui.py::ConfigTest::test_default_paths_preserved PASSED [ 88%] test/test_ui.py::ConfigTest::test_multiple_replacements_parsed PASSED [ 88%] test/test_ui.py::ConfigTest::test_nonexistant_db PASSED [ 88%] test/test_ui.py::ConfigTest::test_paths_section_respected PASSED [ 88%] test/test_ui.py::ConfigTest::test_replacements_parsed PASSED [ 88%] test/test_ui.py::ConfigTest::test_user_config_file PASSED [ 88%] test/test_ui.py::ShowModelChangeTest::test_both_values_shown PASSED [ 88%] test/test_ui.py::ShowModelChangeTest::test_floats_close_to_identical PASSED [ 88%] test/test_ui.py::ShowModelChangeTest::test_floats_different PASSED [ 89%] test/test_ui.py::ShowModelChangeTest::test_identical PASSED [ 89%] test/test_ui.py::ShowModelChangeTest::test_int_fixed_field_change PASSED [ 89%] test/test_ui.py::ShowModelChangeTest::test_string_fixed_field_change PASSED [ 89%] test/test_ui.py::ShowChangeTest::test_album_data_change PASSED [ 89%] test/test_ui.py::ShowChangeTest::test_album_data_change_with_unicode PASSED [ 89%] test/test_ui.py::ShowChangeTest::test_item_data_change PASSED [ 89%] test/test_ui.py::ShowChangeTest::test_item_data_change_title_missing PASSED [ 89%] test/test_ui.py::ShowChangeTest::test_item_data_change_title_missing_with_unicode_filename PASSED [ 89%] test/test_ui.py::ShowChangeTest::test_item_data_change_with_unicode PASSED [ 89%] test/test_ui.py::ShowChangeTest::test_null_change PASSED [ 89%] test/test_ui.py::SummarizeItemsTest::test_summarize_item PASSED [ 89%] test/test_ui.py::SummarizeItemsTest::test_summarize_items PASSED [ 89%] test/test_ui.py::PathFormatTest::test_custom_paths_prepend PASSED [ 90%] test/test_ui.py::PluginTest::test_plugin_command_from_pluginpath PASSED [ 90%] test/test_ui.py::CompletionTest::test_completion FAILED [ 90%] test/test_ui.py::CommonOptionsParserCliTest::test_base PASSED [ 90%] test/test_ui.py::CommonOptionsParserCliTest::test_format_option PASSED [ 90%] test/test_ui.py::CommonOptionsParserCliTest::test_format_option_unicode PASSED [ 90%] test/test_ui.py::CommonOptionsParserCliTest::test_help PASSED [ 90%] test/test_ui.py::CommonOptionsParserCliTest::test_path_option PASSED [ 90%] test/test_ui.py::CommonOptionsParserCliTest::test_root_format_option PASSED [ 90%] test/test_ui.py::CommonOptionsParserCliTest::test_stats PASSED [ 90%] test/test_ui.py::CommonOptionsParserCliTest::test_version PASSED [ 90%] test/test_ui.py::CommonOptionsParserTest::test_add_all_common_options PASSED [ 90%] test/test_ui.py::CommonOptionsParserTest::test_album_option PASSED [ 90%] test/test_ui.py::CommonOptionsParserTest::test_format_option PASSED [ 91%] test/test_ui.py::CommonOptionsParserTest::test_format_option_with_album PASSED [ 91%] test/test_ui.py::CommonOptionsParserTest::test_format_option_with_target PASSED [ 91%] test/test_ui.py::CommonOptionsParserTest::test_path_option PASSED [ 91%] test/test_ui_commands.py::QueryTest::test_query_album PASSED [ 91%] test/test_ui_commands.py::QueryTest::test_query_empty PASSED [ 91%] test/test_ui_commands.py::QueryTest::test_query_empty_album PASSED [ 91%] test/test_ui_commands.py::QueryTest::test_query_item PASSED [ 91%] test/test_ui_commands.py::FieldsTest::test_fields_func PASSED [ 91%] test/test_ui_importer.py::NonAutotaggedImportTest::test_album_created_with_track_artist <- test/test_importer.py PASSED [ 91%] test/test_ui_importer.py::NonAutotaggedImportTest::test_import_copy_arrives <- test/test_importer.py PASSED [ 91%] test/test_ui_importer.py::NonAutotaggedImportTest::test_import_hardlink_arrives <- test/test_importer.py PASSED [ 91%] test/test_ui_importer.py::NonAutotaggedImportTest::test_import_link_arrives <- test/test_importer.py PASSED [ 91%] test/test_ui_importer.py::NonAutotaggedImportTest::test_import_with_delete_prunes_directory_empty <- test/test_importer.py PASSED [ 92%] test/test_ui_importer.py::NonAutotaggedImportTest::test_import_with_delete_removes_files <- test/test_importer.py PASSED [ 92%] test/test_ui_importer.py::NonAutotaggedImportTest::test_import_with_move_deletes_import_files <- test/test_importer.py PASSED [ 92%] test/test_ui_importer.py::NonAutotaggedImportTest::test_import_with_move_prunes_directory_empty <- test/test_importer.py PASSED [ 92%] test/test_ui_importer.py::NonAutotaggedImportTest::test_import_with_move_prunes_with_extra_clutter <- test/test_importer.py PASSED [ 92%] test/test_ui_importer.py::NonAutotaggedImportTest::test_import_without_delete_retains_files <- test/test_importer.py PASSED [ 92%] test/test_ui_importer.py::NonAutotaggedImportTest::test_threaded_import_copy_arrives <- test/test_importer.py PASSED [ 92%] test/test_ui_importer.py::NonAutotaggedImportTest::test_threaded_import_move_arrives <- test/test_importer.py PASSED [ 92%] test/test_ui_importer.py::NonAutotaggedImportTest::test_threaded_import_move_deletes_import <- test/test_importer.py PASSED [ 92%] test/test_ui_importer.py::ImportTest::test_apply_asis_adds_album <- test/test_importer.py PASSED [ 92%] test/test_ui_importer.py::ImportTest::test_apply_asis_adds_album_path <- test/test_importer.py PASSED [ 92%] test/test_ui_importer.py::ImportTest::test_apply_asis_adds_tracks <- test/test_importer.py PASSED [ 92%] test/test_ui_importer.py::ImportTest::test_apply_candidate_adds_album <- test/test_importer.py PASSED [ 92%] test/test_ui_importer.py::ImportTest::test_apply_candidate_adds_album_path <- test/test_importer.py PASSED [ 92%] test/test_ui_importer.py::ImportTest::test_apply_candidate_adds_tracks <- test/test_importer.py PASSED [ 93%] test/test_ui_importer.py::ImportTest::test_apply_from_scratch_keeps_bitrate <- test/test_importer.py PASSED [ 93%] test/test_ui_importer.py::ImportTest::test_apply_from_scratch_keeps_format <- test/test_importer.py PASSED [ 93%] test/test_ui_importer.py::ImportTest::test_apply_from_scratch_removes_other_metadata <- test/test_importer.py PASSED [ 93%] test/test_ui_importer.py::ImportTest::test_apply_with_delete_deletes_import <- test/test_importer.py PASSED [ 93%] test/test_ui_importer.py::ImportTest::test_apply_with_move_deletes_import <- test/test_importer.py PASSED [ 93%] test/test_ui_importer.py::ImportTest::test_asis_no_data_source <- test/test_importer.py PASSED [ 93%] test/test_ui_importer.py::ImportTest::test_empty_directory_singleton_warning <- test/test_importer.py PASSED [ 93%] test/test_ui_importer.py::ImportTest::test_empty_directory_warning <- test/test_importer.py PASSED [ 93%] test/test_ui_importer.py::ImportTest::test_set_fields <- test/test_importer.py PASSED [ 93%] test/test_ui_importer.py::ImportTest::test_skip_does_not_add_track <- test/test_importer.py PASSED [ 93%] test/test_ui_importer.py::ImportTest::test_skip_non_album_dirs <- test/test_importer.py PASSED [ 93%] test/test_ui_importer.py::ImportTest::test_unmatched_tracks_not_added <- test/test_importer.py PASSED [ 93%] test/test_ui_importer.py::ImportSingletonTest::test_apply_asis_adds_singleton_path <- test/test_importer.py PASSED [ 94%] test/test_ui_importer.py::ImportSingletonTest::test_apply_asis_adds_track <- test/test_importer.py PASSED [ 94%] test/test_ui_importer.py::ImportSingletonTest::test_apply_asis_does_not_add_album <- test/test_importer.py PASSED [ 94%] test/test_ui_importer.py::ImportSingletonTest::test_apply_candidate_adds_singleton_path <- test/test_importer.py PASSED [ 94%] test/test_ui_importer.py::ImportSingletonTest::test_apply_candidate_adds_track <- test/test_importer.py PASSED [ 94%] test/test_ui_importer.py::ImportSingletonTest::test_apply_candidate_does_not_add_album <- test/test_importer.py PASSED [ 94%] test/test_ui_importer.py::ImportSingletonTest::test_import_single_files <- test/test_importer.py PASSED [ 94%] test/test_ui_importer.py::ImportSingletonTest::test_set_fields <- test/test_importer.py PASSED [ 94%] test/test_ui_importer.py::ImportSingletonTest::test_skip_adds_other_tracks <- test/test_importer.py PASSED [ 94%] test/test_ui_importer.py::ImportSingletonTest::test_skip_does_not_add_first_track <- test/test_importer.py PASSED [ 94%] test/test_ui_importer.py::ImportTracksTest::test_apply_tracks_adds_singleton_path <- test/test_importer.py PASSED [ 94%] test/test_ui_importer.py::ImportTracksTest::test_apply_tracks_adds_singleton_track <- test/test_importer.py PASSED [ 94%] test/test_ui_importer.py::ImportCompilationTest::test_asis_albumartist_tag_sets_albumartist <- test/test_importer.py PASSED [ 94%] test/test_ui_importer.py::ImportCompilationTest::test_asis_heterogenous_sets_sompilation <- test/test_importer.py PASSED [ 95%] test/test_ui_importer.py::ImportCompilationTest::test_asis_heterogenous_sets_various_albumartist <- test/test_importer.py PASSED [ 95%] test/test_ui_importer.py::ImportCompilationTest::test_asis_homogenous_sets_albumartist <- test/test_importer.py PASSED [ 95%] test/test_ui_importer.py::ImportCompilationTest::test_asis_sets_majority_albumartist <- test/test_importer.py PASSED [ 95%] test/test_ui_importer.py::ImportExistingTest::test_asis_updated_moves_file <- test/test_importer.py PASSED [ 95%] test/test_ui_importer.py::ImportExistingTest::test_asis_updated_without_copy_does_not_move_file <- test/test_importer.py PASSED [ 95%] test/test_ui_importer.py::ImportExistingTest::test_asis_updates_metadata <- test/test_importer.py PASSED [ 95%] test/test_ui_importer.py::ImportExistingTest::test_does_not_duplicate_album <- test/test_importer.py PASSED [ 95%] test/test_ui_importer.py::ImportExistingTest::test_does_not_duplicate_item <- test/test_importer.py PASSED [ 95%] test/test_ui_importer.py::ImportExistingTest::test_does_not_duplicate_singleton_track <- test/test_importer.py PASSED [ 95%] test/test_ui_importer.py::ImportExistingTest::test_outside_file_is_copied <- test/test_importer.py PASSED [ 95%] test/test_ui_importer.py::ImportExistingTest::test_outside_file_is_moved <- test/test_importer.py PASSED [ 95%] test/test_ui_importer.py::ChooseCandidateTest::test_choose_first_candidate <- test/test_importer.py PASSED [ 95%] test/test_ui_importer.py::ChooseCandidateTest::test_choose_second_candidate <- test/test_importer.py PASSED [ 96%] test/test_ui_importer.py::GroupAlbumsImportTest::test_add_album_for_different_artist_and_different_album <- test/test_importer.py PASSED [ 96%] test/test_ui_importer.py::GroupAlbumsImportTest::test_add_album_for_different_artist_and_same_albumartist <- test/test_importer.py PASSED [ 96%] test/test_ui_importer.py::GroupAlbumsImportTest::test_add_album_for_same_album_and_different_artist <- test/test_importer.py PASSED [ 96%] test/test_ui_importer.py::GroupAlbumsImportTest::test_add_album_for_same_artist_and_different_album <- test/test_importer.py PASSED [ 96%] test/test_ui_importer.py::GroupAlbumsImportTest::test_incremental <- test/test_importer.py PASSED [ 96%] test/test_ui_importer.py::GlobalGroupAlbumsImportTest::test_add_album_for_different_artist_and_different_album <- test/test_importer.py PASSED [ 96%] test/test_ui_importer.py::GlobalGroupAlbumsImportTest::test_add_album_for_different_artist_and_same_albumartist <- test/test_importer.py PASSED [ 96%] test/test_ui_importer.py::GlobalGroupAlbumsImportTest::test_add_album_for_same_album_and_different_artist <- test/test_importer.py PASSED [ 96%] test/test_ui_importer.py::GlobalGroupAlbumsImportTest::test_add_album_for_same_artist_and_different_album <- test/test_importer.py PASSED [ 96%] test/test_ui_importer.py::GlobalGroupAlbumsImportTest::test_incremental <- test/test_importer.py PASSED [ 96%] test/test_ui_init.py::InputMethodsTest::test_input_select_objects PASSED [ 96%] test/test_ui_init.py::InitTest::test_human_bytes PASSED [ 96%] test/test_ui_init.py::InitTest::test_human_seconds PASSED [ 97%] test/test_util.py::UtilTest::test_command_output PASSED [ 97%] test/test_util.py::UtilTest::test_convert_command_args_keeps_undecodeable_bytes PASSED [ 97%] test/test_util.py::UtilTest::test_interactive_open PASSED [ 97%] test/test_util.py::UtilTest::test_open_anything PASSED [ 97%] test/test_util.py::UtilTest::test_sanitize_empty_component SKIPPED [ 97%] test/test_util.py::UtilTest::test_sanitize_path_works_on_empty_string PASSED [ 97%] test/test_util.py::UtilTest::test_sanitize_unix_replaces_leading_dot PASSED [ 97%] test/test_util.py::UtilTest::test_sanitize_windows_replaces_illegal_chars PASSED [ 97%] test/test_util.py::UtilTest::test_sanitize_windows_replaces_trailing_dot PASSED [ 97%] test/test_util.py::UtilTest::test_sanitize_windows_replaces_trailing_space PASSED [ 97%] test/test_util.py::UtilTest::test_sanitize_with_custom_replace_adds_replacements PASSED [ 97%] test/test_util.py::UtilTest::test_sanitize_with_custom_replace_overrides_built_in_sub PASSED [ 97%] test/test_util.py::PathConversionTest::test_bytesting_path_windows_removes_magic_prefix PASSED [ 98%] test/test_util.py::PathConversionTest::test_bytestring_path_windows_encodes_utf8 PASSED [ 98%] test/test_util.py::PathConversionTest::test_syspath_posix_unchanged PASSED [ 98%] test/test_util.py::PathConversionTest::test_syspath_windows_format PASSED [ 98%] test/test_util.py::PathConversionTest::test_syspath_windows_format_unc_path PASSED [ 98%] test/test_util.py::PathTruncationTest::test_truncate_bytestring PASSED [ 98%] test/test_util.py::PathTruncationTest::test_truncate_preserves_extension PASSED [ 98%] test/test_util.py::PathTruncationTest::test_truncate_unicode PASSED [ 98%] test/test_vfs.py::VFSTest::test_album_item PASSED [ 98%] test/test_vfs.py::VFSTest::test_singleton_item PASSED [ 98%] test/test_zero.py::ZeroPluginTest::test_album_art PASSED [ 98%] test/test_zero.py::ZeroPluginTest::test_auto_false PASSED [ 98%] test/test_zero.py::ZeroPluginTest::test_change_database PASSED [ 98%] test/test_zero.py::ZeroPluginTest::test_do_not_change_database PASSED [ 99%] test/test_zero.py::ZeroPluginTest::test_empty_query_n_response_no_changes PASSED [ 99%] test/test_zero.py::ZeroPluginTest::test_fields_removes_preserved_tags PASSED [ 99%] test/test_zero.py::ZeroPluginTest::test_keep_fields PASSED [ 99%] test/test_zero.py::ZeroPluginTest::test_keep_fields_removes_preserved_tags PASSED [ 99%] test/test_zero.py::ZeroPluginTest::test_no_fields PASSED [ 99%] test/test_zero.py::ZeroPluginTest::test_no_patterns PASSED [ 99%] test/test_zero.py::ZeroPluginTest::test_pattern_match PASSED [ 99%] test/test_zero.py::ZeroPluginTest::test_pattern_nomatch PASSED [ 99%] test/test_zero.py::ZeroPluginTest::test_subcommand_query_exclude PASSED [ 99%] test/test_zero.py::ZeroPluginTest::test_subcommand_query_include PASSED [ 99%] test/test_zero.py::ZeroPluginTest::test_subcommand_update_database_false PASSED [ 99%] test/test_zero.py::ZeroPluginTest::test_subcommand_update_database_true PASSED [ 99%] test/test_zero.py::ZeroPluginTest::test_whitelist_and_blacklist PASSED [100%] =================================== FAILURES =================================== ________________________ CompletionTest.test_completion ________________________ self = def test_completion(self): # Load plugin commands config['pluginpath'] = [_common.PLUGINPATH] config['plugins'] = ['test'] # Do not load any other bash completion scripts on the system. env = dict(os.environ) env['BASH_COMPLETION_DIR'] = os.devnull env['BASH_COMPLETION_COMPAT_DIR'] = os.devnull # Open a `bash` process to run the tests in. We'll pipe in bash # commands via stdin. cmd = os.environ.get('BEETS_TEST_SHELL', '/bin/bash --norc').split() if not has_program(cmd[0]): self.skipTest(u'bash not available') tester = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, env=env) # Load bash_completion library. for path in commands.BASH_COMPLETION_PATHS: if os.path.exists(util.syspath(path)): bash_completion = path break else: self.skipTest(u'bash-completion script not found') try: with open(util.syspath(bash_completion), 'rb') as f: tester.stdin.writelines(f) except IOError: self.skipTest(u'could not read bash-completion script') # Load completion script. self.io.install() self.run_command('completion', lib=None) completion_script = self.io.getoutput().encode('utf-8') self.io.restore() tester.stdin.writelines(completion_script.splitlines(True)) # Load test suite. test_script_name = os.path.join(_common.RSRC, b'test_completion.sh') with open(test_script_name, 'rb') as test_script_file: tester.stdin.writelines(test_script_file) out, err = tester.communicate() if tester.returncode != 0 or out != b'completion tests passed\n': print(out.decode('utf-8')) > self.fail(u'test/test_completion.sh did not execute properly') E AssertionError: test/test_completion.sh did not execute properly test/test_ui.py:1217: AssertionError ----------------------------- Captured stdout call ----------------------------- ----------------------------- Captured stderr call ----------------------------- Warning: Unable to find the bash-completion package. Command line completion might not work. test_fields_command failed test_global_file_opts failed test_import_files failed ------------------------------ Captured log call ------------------------------- WARNING beets:commands.py:1709 Warning: Unable to find the bash-completion package. Command line completion might not work. =============================== warnings summary =============================== test/test_dbcore.py:35 /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9/test/test_dbcore.py:35: PytestCollectionWarning: cannot collect test class 'TestSort' because it has a __init__ constructor (from: test/test_dbcore.py) class TestSort(dbcore.query.FieldSort): test/test_dbcore.py:39 /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9/test/test_dbcore.py:39: PytestCollectionWarning: cannot collect test class 'TestQuery' because it has a __init__ constructor (from: test/test_dbcore.py) class TestQuery(dbcore.query.Query): test/test_dbcore.py:50 /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9/test/test_dbcore.py:50: PytestCollectionWarning: cannot collect test class 'TestModel1' because it has a __init__ constructor (from: test/test_dbcore.py) class TestModel1(dbcore.Model): test/test_dbcore.py:75 /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9/test/test_dbcore.py:75: PytestCollectionWarning: cannot collect test class 'TestDatabase1' because it has a __init__ constructor (from: test/test_dbcore.py) class TestDatabase1(dbcore.Database): test/test_dbcore.py:80 /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9/test/test_dbcore.py:80: PytestCollectionWarning: cannot collect test class 'TestModel2' because it has a __init__ constructor (from: test/test_dbcore.py) class TestModel2(TestModel1): test/test_dbcore.py:88 /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9/test/test_dbcore.py:88: PytestCollectionWarning: cannot collect test class 'TestDatabase2' because it has a __init__ constructor (from: test/test_dbcore.py) class TestDatabase2(dbcore.Database): test/test_dbcore.py:93 /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9/test/test_dbcore.py:93: PytestCollectionWarning: cannot collect test class 'TestModel3' because it has a __init__ constructor (from: test/test_dbcore.py) class TestModel3(TestModel1): test/test_dbcore.py:102 /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9/test/test_dbcore.py:102: PytestCollectionWarning: cannot collect test class 'TestDatabase3' because it has a __init__ constructor (from: test/test_dbcore.py) class TestDatabase3(dbcore.Database): test/test_dbcore.py:107 /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9/test/test_dbcore.py:107: PytestCollectionWarning: cannot collect test class 'TestModel4' because it has a __init__ constructor (from: test/test_dbcore.py) class TestModel4(TestModel1): test/test_dbcore.py:117 /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9/test/test_dbcore.py:117: PytestCollectionWarning: cannot collect test class 'TestDatabase4' because it has a __init__ constructor (from: test/test_dbcore.py) class TestDatabase4(dbcore.Database): test/test_dbcore.py:131 /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9/test/test_dbcore.py:131: PytestCollectionWarning: cannot collect test class 'TestModel5' because it has a __init__ constructor (from: test/test_dbcore.py) class TestModel5(TestModel1): test/test_dbcore.py:139 /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9/test/test_dbcore.py:139: PytestCollectionWarning: cannot collect test class 'TestDatabase5' because it has a __init__ constructor (from: test/test_dbcore.py) class TestDatabase5(dbcore.Database): test/test_dbcore.py:144 /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9/test/test_dbcore.py:144: PytestCollectionWarning: cannot collect test class 'TestDatabaseTwoModels' because it has a __init__ constructor (from: test/test_dbcore.py) class TestDatabaseTwoModels(dbcore.Database): test/test_dbcore.py:149 /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9/test/test_dbcore.py:149: PytestCollectionWarning: cannot collect test class 'TestModelWithGetters' because it has a __init__ constructor (from: test/test_dbcore.py) class TestModelWithGetters(dbcore.Model): test/helper.py:504 /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9/test/helper.py:504: PytestCollectionWarning: cannot collect test class 'TestImportSession' because it has a __init__ constructor (from: test/test_importer.py) class TestImportSession(importer.ImportSession): test/test_pipeline.py:46 /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9/test/test_pipeline.py:46: PytestCollectionWarning: cannot collect test class 'TestException' because it has a __init__ constructor (from: test/test_pipeline.py) class TestException(Exception): test/test_ui_importer.py:33 /var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9/test/test_ui_importer.py:33: PytestCollectionWarning: cannot collect test class 'TestTerminalImportSession' because it has a __init__ constructor (from: test/test_ui_importer.py) class TestTerminalImportSession(TerminalImportSession): -- Docs: https://docs.pytest.org/en/stable/warnings.html =========================== short test summary info ============================ FAILED test/test_ui.py::CompletionTest::test_completion - AssertionError: tes... ====== 1 failed, 1300 passed, 13 skipped, 17 warnings in 92.05s (0:01:32) ====== * ERROR: media-sound/beets-1.4.9-r2::gentoo failed (test phase): * Tests fail with python3.7 * * Call stack: * ebuild.sh, line 125: Called src_test * environment, line 3105: Called distutils-r1_src_test * environment, line 1447: Called _distutils-r1_run_foreach_impl 'python_test' * environment, line 718: Called distutils-r1_run_phase 'python_test' * environment, line 1384: Called python_test * environment, line 3058: Called die * The specific snippet of code: * pytest -vv || die "Tests fail with ${EPYTHON}" * * If you need support, post the output of `emerge --info '=media-sound/beets-1.4.9-r2::gentoo'`, * the complete build log and the output of `emerge -pqv '=media-sound/beets-1.4.9-r2::gentoo'`. * The complete build log is located at '/var/log/portage/media-sound:beets-1.4.9-r2:20201110-180300.log'. * For convenience, a symlink to the build log is located at '/var/tmp/portage/media-sound/beets-1.4.9-r2/temp/build.log'. * The ebuild environment file is located at '/var/tmp/portage/media-sound/beets-1.4.9-r2/temp/environment'. * Working directory: '/var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9' * S: '/var/tmp/portage/media-sound/beets-1.4.9-r2/work/beets-1.4.9'