[Python-apps-team] Bug#1081083: mu-editor: FTBFS: failing tests
Santiago Vila
sanvila at debian.org
Sun Sep 8 00:53:01 BST 2024
Package: src:mu-editor
Version: 1.0.3+dfsg-6.1
Severity: serious
Tags: ftbfs
Dear maintainer:
During a rebuild of all packages in unstable, your package failed to build:
--------------------------------------------------------------------------------
[...]
debian/rules binary
dh binary --with python3,sphinxdoc --buildsystem=pybuild
dh_update_autotools_config -O--buildsystem=pybuild
dh_autoreconf -O--buildsystem=pybuild
dh_auto_configure -O--buildsystem=pybuild
pybuild --configure -i python{version} -p 3.12
D: pybuild pybuild:602: version: 6.20240824
D: pybuild pybuild:603: ['/usr/bin/pybuild', '--configure', '-i', 'python{version}', '-p', '3.12']
D: pybuild pybuild:39: cfg: Namespace(verbose=True, quiet=False, really_quiet=False, detect_only=False, clean_only=False, configure_only=True, build_only=False, install_only=False, test_only=False, autopkgtest_only=False, list_systems=False, print_args=None, before_clean=None, clean_args=None, after_clean=None, before_configure=None, configure_args=None, after_configure=None, before_build=None, build_args=None, after_build=None, before_install=None, install_args=None, after_install=None, before_test=None, test_args=None, after_test=None, test_nose=False, test_nose2=False, test_pytest=True, test_tox=False, test_stestr=False, test_custom=False, dir='/<<PKGBUILDDIR>>', destdir='debian/tmp', ext_destdir=None, ext_pattern='\\.so(\\.[^/]*)?$', ext_sub_pattern=None, ext_sub_repl=None, install_dir=None, name='mu-editor', system=None, versions=['3.12'], interpreter=['python{version}'], disable=None, custom_tests=True)
D: pybuild __init__:37: cannot initialize 'cmake' plugin: Missing command 'cmake'
D: pybuild __init__:37: cannot initialize 'meson' plugin: Missing command 'meson'
D: pybuild tools:231: invoking: /usr/bin/dpkg-architecture
D: pybuild debhelper:166: skipping package mu-editor-doc (missing ${python3:Depends} in Depends/Recommends)
D: pybuild debhelper:174: source=mu-editor, binary packages=['mu-editor']
[... snipped ...]
copying mu/locale/pl/LC_MESSAGES/mu.po -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/locale/pl/LC_MESSAGES
creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/locale/pt_BR
creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/locale/pt_BR/LC_MESSAGES
copying mu/locale/pt_BR/LC_MESSAGES/mu.mo -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/locale/pt_BR/LC_MESSAGES
copying mu/locale/pt_BR/LC_MESSAGES/mu.po -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/locale/pt_BR/LC_MESSAGES
creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/locale/pt_PT
creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/locale/pt_PT/LC_MESSAGES
copying mu/locale/pt_PT/LC_MESSAGES/mu.mo -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/locale/pt_PT/LC_MESSAGES
copying mu/locale/pt_PT/LC_MESSAGES/mu.po -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/locale/pt_PT/LC_MESSAGES
creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/locale/sv
creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/locale/sv/LC_MESSAGES
copying mu/locale/sv/LC_MESSAGES/mu.mo -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/locale/sv/LC_MESSAGES
copying mu/locale/sv/LC_MESSAGES/mu.po -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/locale/sv/LC_MESSAGES
creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/locale/zh_CN
creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/locale/zh_CN/LC_MESSAGES
copying mu/locale/zh_CN/LC_MESSAGES/mu.mo -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/locale/zh_CN/LC_MESSAGES
copying mu/locale/zh_CN/LC_MESSAGES/mu.po -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/locale/zh_CN/LC_MESSAGES
creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/css
copying mu/resources/css/contrast.css -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/css
copying mu/resources/css/day.css -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/css
copying mu/resources/css/night.css -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/css
creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/adafruit.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/button.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/check.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/checked.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/close-tab.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/debug.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/files.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/flash.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/fonts.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/help.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/icon.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/images.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/load.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/logs.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/microbit.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/modes.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/music.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/new.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/play.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/plotter.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/pygamezero.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/python.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/quit.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/repl.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/run.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/save.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/scroll-down.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/scroll-left.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/scroll-right.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/scroll-up.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/serial.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/snippets.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/sounds.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/splash-screen.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/step-in.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/step-out.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/step-over.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/stop.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/theme.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/theme_contrast.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/theme_day.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/zoom-in.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
copying mu/resources/images/zoom-out.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/images
creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/pygamezero
copying mu/resources/pygamezero/alien.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/pygamezero
copying mu/resources/pygamezero/alien_hurt.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/pygamezero
# build custom manpage
DEB_VERSION_UPSTREAM 1.0.3+dfsg
sed -e "s/__VERSION__/1.0.3+dfsg/g" \
< debian/mu-editor.1.md.in > debian/mu-editor.1.md
pandoc debian/mu-editor.1.md -s -f markdown -t man -o debian/mu-editor.1
# build documentation
PYTHONPATH=. http_proxy='127.0.0.1:9' https_proxy='127.0.0.1:9' python3 -m sphinx -N -bhtml docs/ docs/html
Running Sphinx v7.4.7
WARNING: Invalid configuration value found: 'language = None'. Update your configuration to a valid language code. Falling back to 'en' (English).
loading translations [en]... done
making output directory... done
WARNING: html_static_path entry '_static' does not exist
Converting `source_suffix = '.rst'` to `source_suffix = {'.rst': 'restructuredtext'}`.
building [mo]: targets for 0 po files that are out of date
writing output...
building [html]: targets for 23 source files that are out of date
updating environment: [new config] 23 added, 0 changed, 0 removed
reading sources... [ 4%] api
reading sources... [ 9%] architecture
reading sources... [ 13%] authors
reading sources... [ 17%] changes
reading sources... [ 22%] code_of_conduct
reading sources... [ 26%] contributing
reading sources... [ 30%] copyright
reading sources... [ 35%] debugger
reading sources... [ 39%] design
reading sources... [ 43%] design/file_reading_and_writing
reading sources... [ 48%] design/line-endings
reading sources... [ 52%] first-steps
reading sources... [ 57%] index
reading sources... [ 61%] license
reading sources... [ 65%] modes
reading sources... [ 70%] packaging
reading sources... [ 74%] release
reading sources... [ 78%] roadmap
reading sources... [ 83%] setup
reading sources... [ 87%] tests
reading sources... [ 91%] translations
reading sources... [ 96%] user-experience
reading sources... [100%] website
looking for now-outdated files... none found
pickling environment... done
checking consistency... done
preparing documents... done
copying assets...
copying static files... done
copying extra files... done
copying assets: done
writing output... [ 4%] api
writing output... [ 9%] architecture
writing output... [ 13%] authors
writing output... [ 17%] changes
writing output... [ 22%] code_of_conduct
writing output... [ 26%] contributing
writing output... [ 30%] copyright
writing output... [ 35%] debugger
writing output... [ 39%] design
writing output... [ 43%] design/file_reading_and_writing
writing output... [ 48%] design/line-endings
writing output... [ 52%] first-steps
writing output... [ 57%] index
writing output... [ 61%] license
writing output... [ 65%] modes
writing output... [ 70%] packaging
writing output... [ 74%] release
writing output... [ 78%] roadmap
writing output... [ 83%] setup
writing output... [ 87%] tests
writing output... [ 91%] translations
writing output... [ 96%] user-experience
writing output... [100%] website
generating indices... genindex py-modindex done
highlighting module code... [ 6%] PyQt5.QtCore
highlighting module code... [ 12%] mu.app
highlighting module code... [ 18%] mu.debugger.client
highlighting module code... [ 24%] mu.debugger.runner
highlighting module code... [ 29%] mu.interface.dialogs
highlighting module code... [ 35%] mu.interface.editor
highlighting module code... [ 41%] mu.interface.main
highlighting module code... [ 47%] mu.interface.panes
highlighting module code... [ 53%] mu.interface.themes
highlighting module code... [ 59%] mu.logic
highlighting module code... [ 65%] mu.modes.adafruit
highlighting module code... [ 71%] mu.modes.base
highlighting module code... [ 76%] mu.modes.debugger
highlighting module code... [ 82%] mu.modes.microbit
highlighting module code... [ 88%] mu.modes.pygamezero
highlighting module code... [ 94%] mu.modes.python3
highlighting module code... [100%] mu.resources
writing additional pages... search done
copying images... [ 10%] mu-debugger.png
copying images... [ 20%] logo.png
copying images... [ 30%] microbit.png
copying images... [ 40%] pygame.png
copying images... [ 50%] po1.png
copying images... [ 60%] po2.png
copying images... [ 70%] po3.png
copying images... [ 80%] po4.png
copying images... [ 90%] mu_sketch.jpg
copying images... [100%] awesome.gif
dumping search index in English (code: en)... done
dumping object inventory... done
build succeeded, 2 warnings.
The HTML pages are in docs/html.
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
rm -f debian/mu-editor-doc.debhelper.log debian/mu-editor.debhelper.log
debian/rules override_dh_auto_test
make[1]: Entering directory '/<<PKGBUILDDIR>>'
xvfb-run -a dh_auto_test
pybuild --test -i python{version} -p 3.12
D: pybuild pybuild:602: version: 6.20240824
D: pybuild pybuild:603: ['/usr/bin/pybuild', '--test', '-i', 'python{version}', '-p', '3.12']
D: pybuild pybuild:39: cfg: Namespace(verbose=True, quiet=False, really_quiet=False, detect_only=False, clean_only=False, configure_only=False, build_only=False, install_only=False, test_only=True, autopkgtest_only=False, list_systems=False, print_args=None, before_clean=None, clean_args=None, after_clean=None, before_configure=None, configure_args=None, after_configure=None, before_build=None, build_args=None, after_build=None, before_install=None, install_args=None, after_install=None, before_test=None, test_args=None, after_test=None, test_nose=False, test_nose2=False, test_pytest=True, test_tox=False, test_stestr=False, test_custom=False, dir='/<<PKGBUILDDIR>>', destdir='debian/tmp', ext_destdir=None, ext_pattern='\\.so(\\.[^/]*)?$', ext_sub_pattern=None, ext_sub_repl=None, install_dir=None, name='mu-editor', system=None, versions=['3.12'], interpreter=['python{version}'], disable=None, custom_tests=True)
D: pybuild __init__:37: cannot initialize 'cmake' plugin: Missing command 'cmake'
D: pybuild __init__:37: cannot initialize 'meson' plugin: Missing command 'meson'
D: pybuild tools:231: invoking: /usr/bin/dpkg-architecture
D: pybuild debhelper:166: skipping package mu-editor-doc (missing ${python3:Depends} in Depends/Recommends)
D: pybuild debhelper:174: source=mu-editor, binary packages=['mu-editor']
D: pybuild pybuild:124: Plugin autopkgtest: certainty 0
D: pybuild pybuild:124: Plugin custom: certainty 0
D: pybuild pybuild:124: Plugin distutils: certainty 61
D: pybuild pybuild:124: Plugin pyproject: certainty -20
D: pybuild pybuild:151: detected build system: distutils (certainty: 61%)
I: pybuild pybuild:308: mkdir -p /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/fonts; cp /usr/share/fonts/truetype/inconsolata/Inconsolata.otf /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/fonts/Inconsolata.otf
D: pybuild tools:231: invoking: mkdir -p /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/fonts; cp /usr/share/fonts/truetype/inconsolata/Inconsolata.otf /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/fonts/Inconsolata.otf
D: pybuild base:64: Copying /<<PKGBUILDDIR>>/tests to /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/tests for tests
I: pybuild base:311: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build; python3.12 -m pytest --random-order
D: pybuild tools:231: invoking: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build; python3.12 -m pytest --random-order
============================= test session starts ==============================
platform linux -- Python 3.12.5, pytest-8.3.2, pluggy-1.5.0
Using --random-order-bucket=module
Using --random-order-seed=929650
rootdir: /<<PKGBUILDDIR>>
plugins: typeguard-4.3.0, random-order-1.1.1, xvfb-3.0.0
collected 740 items
tests/interface/test_themes.py ..... [ 0%]
tests/modes/test_debug.py ......F................................ [ 5%]
tests/interface/test_main.py ........................................F.. [ 11%]
................................................. [ 18%]
tests/debugger/test_client.py .......................................... [ 24%]
..... [ 24%]
tests/interface/test_editor.py ................................. [ 29%]
tests/modes/test_microbit.py ....................s...s.................. [ 35%]
................. [ 37%]
tests/modes/test_adafruit.py ......... [ 38%]
tests/test_localedetect.py ........ [ 39%]
tests/modes/test_pygamezero.py .........F.... [ 41%]
tests/modes/test_python3.py .......................... [ 45%]
tests/interface/test_dialogs.py .......... [ 46%]
tests/interface/test_panes.py .......................................... [ 52%]
........................................................................ [ 61%]
.............................. [ 65%]
tests/test_app.py ....... [ 66%]
tests/debugger/test_runner.py .......................................... [ 72%]
......... [ 73%]
tests/debugger/test_utils.py ...... [ 74%]
tests/test_logic.py ................................F................... [ 81%]
...F.................................................................... [ 91%]
............................ [ 95%]
tests/modes/test_base.py ................................ [ 99%]
tests/test_resources.py ..... [100%]
=================================== FAILURES ===================================
_______________________________ test_debug_start _______________________________
def test_debug_start():
"""
Ensure the handling of starting the debugger works as expected.
"""
editor = mock.MagicMock()
editor.envars = [['name', 'value'], ]
view = mock.MagicMock()
view.current_tab.path = "/foo/bar"
view.current_tab.isModified.return_value = True
mock_runner = mock.MagicMock()
view.add_python3_runner.return_value = mock_runner
mock_debugger = mock.MagicMock()
mock_debugger_class = mock.MagicMock(return_value=mock_debugger)
dm = DebugMode(editor, view)
dm.workspace_dir = mock.MagicMock(return_value='/bar')
with mock.patch('mu.modes.debugger.Debugger', mock_debugger_class):
dm.start()
> editor.save_tab_to_file.called_once_with(view.current_tab)
tests/modes/test_debug.py:58:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <MagicMock name='mock.save_tab_to_file' id='140240719882544'>
name = 'called_once_with'
def __getattr__(self, name):
if name in {'_mock_methods', '_mock_unsafe'}:
raise AttributeError(name)
elif self._mock_methods is not None:
if name not in self._mock_methods or name in _all_magics:
raise AttributeError("Mock object has no attribute %r" % name)
elif _is_magic(name):
raise AttributeError(name)
if not self._mock_unsafe and (not self._mock_methods or name not in self._mock_methods):
if name.startswith(('assert', 'assret', 'asert', 'aseert', 'assrt')) or name in _ATTRIB_DENY_LIST:
> raise AttributeError(
f"{name!r} is not a valid assertion. Use a spec "
f"for the mock if {name!r} is meant to be an attribute.")
E AttributeError: 'called_once_with' is not a valid assertion. Use a spec for the mock if 'called_once_with' is meant to be an attribute.. Did you mean: 'assert_called_once_with'?
/usr/lib/python3.12/unittest/mock.py:663: AttributeError
___________________________ test_Window_connect_zoom ___________________________
def test_Window_connect_zoom():
"""
Ensure the zoom in/out signals are connected to the passed in widget's
zoomIn and zoomOut handlers.
"""
w = mu.interface.main.Window()
w._zoom_in = mock.MagicMock()
w._zoom_in.connect = mock.MagicMock()
w._zoom_out = mock.MagicMock()
w._zoom_out.connect = mock.MagicMock()
widget = mock.MagicMock()
widget.zoomIn = mock.MagicMock()
widget.zoomOut = mock.MagicMock()
w.connect_zoom(widget)
> assert w._zoom_in.connect.called_once_with(widget.zoomIn)
tests/interface/test_main.py:355:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <MagicMock name='mock.connect' id='140240719844016'>
name = 'called_once_with'
def __getattr__(self, name):
if name in {'_mock_methods', '_mock_unsafe'}:
raise AttributeError(name)
elif self._mock_methods is not None:
if name not in self._mock_methods or name in _all_magics:
raise AttributeError("Mock object has no attribute %r" % name)
elif _is_magic(name):
raise AttributeError(name)
if not self._mock_unsafe and (not self._mock_methods or name not in self._mock_methods):
if name.startswith(('assert', 'assret', 'asert', 'aseert', 'assrt')) or name in _ATTRIB_DENY_LIST:
> raise AttributeError(
f"{name!r} is not a valid assertion. Use a spec "
f"for the mock if {name!r} is meant to be an attribute.")
E AttributeError: 'called_once_with' is not a valid assertion. Use a spec for the mock if 'called_once_with' is meant to be an attribute.. Did you mean: 'assert_called_once_with'?
/usr/lib/python3.12/unittest/mock.py:663: AttributeError
_____________________________ test_pgzero_run_game _____________________________
def test_pgzero_run_game():
"""
Ensure that running the game launches the process as expected.
"""
editor = mock.MagicMock()
editor.envars = [['name', 'value'], ]
view = mock.MagicMock()
view.current_tab.path = '/foo'
view.current_tab.isModified.return_value = True
mock_runner = mock.MagicMock()
view.add_python3_runner.return_value = mock_runner
pm = PyGameZeroMode(editor, view)
pm.workspace_dir = mock.MagicMock(return_value='/bar')
pm.run_game()
> editor.save_tab_to_file.called_once_with(view.current_tab)
tests/modes/test_pygamezero.py:125:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <MagicMock name='mock.save_tab_to_file' id='140240715723648'>
name = 'called_once_with'
def __getattr__(self, name):
if name in {'_mock_methods', '_mock_unsafe'}:
raise AttributeError(name)
elif self._mock_methods is not None:
if name not in self._mock_methods or name in _all_magics:
raise AttributeError("Mock object has no attribute %r" % name)
elif _is_magic(name):
raise AttributeError(name)
if not self._mock_unsafe and (not self._mock_methods or name not in self._mock_methods):
if name.startswith(('assert', 'assret', 'asert', 'aseert', 'assrt')) or name in _ATTRIB_DENY_LIST:
> raise AttributeError(
f"{name!r} is not a valid assertion. Use a spec "
f"for the mock if {name!r} is meant to be an attribute.")
E AttributeError: 'called_once_with' is not a valid assertion. Use a spec for the mock if 'called_once_with' is meant to be an attribute.. Did you mean: 'assert_called_once_with'?
/usr/lib/python3.12/unittest/mock.py:663: AttributeError
___________________________ test_load_stores_newline ___________________________
def test_load_stores_newline():
"""
When a file is loaded, its newline convention should be held on the tab
for use when saving.
"""
newline = "r\n"
text = newline.join("the cat sat on the mat".split())
editor = mocked_editor()
with generate_python_file("abc\r\ndef") as filepath:
editor._view.get_load_path.return_value = filepath
editor.load()
assert editor._view.add_tab.called_with(
> filepath, text, editor.modes[editor.mode].api(), "\r\n")
tests/test_logic.py:1185:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <MagicMock name='mock.add_tab' id='140240720182256'>
name = 'called_with'
def __getattr__(self, name):
if name in {'_mock_methods', '_mock_unsafe'}:
raise AttributeError(name)
elif self._mock_methods is not None:
if name not in self._mock_methods or name in _all_magics:
raise AttributeError("Mock object has no attribute %r" % name)
elif _is_magic(name):
raise AttributeError(name)
if not self._mock_unsafe and (not self._mock_methods or name not in self._mock_methods):
if name.startswith(('assert', 'assret', 'asert', 'aseert', 'assrt')) or name in _ATTRIB_DENY_LIST:
> raise AttributeError(
f"{name!r} is not a valid assertion. Use a spec "
f"for the mock if {name!r} is meant to be an attribute.")
E AttributeError: 'called_with' is not a valid assertion. Use a spec for the mock if 'called_with' is meant to be an attribute.
/usr/lib/python3.12/unittest/mock.py:663: AttributeError
__________________________ test_save_restores_newline __________________________
def test_save_restores_newline():
"""
When a file is saved the newline convention noted originally should
be used.
"""
newline = "\r\n"
test_text = mu.logic.NEWLINE.join(
"the cat sat on the mat".split()
)
with generate_python_file(test_text) as filepath:
with mock.patch("mu.logic.save_and_encode") as mock_save:
ed = mocked_editor(text=test_text, newline=newline, path=filepath)
ed.save()
> assert mock_save.called_with(test_text, filepath, newline)
tests/test_logic.py:1201:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <MagicMock name='save_and_encode' id='140240719088720'>
name = 'called_with'
def __getattr__(self, name):
if name in {'_mock_methods', '_mock_unsafe'}:
raise AttributeError(name)
elif self._mock_methods is not None:
if name not in self._mock_methods or name in _all_magics:
raise AttributeError("Mock object has no attribute %r" % name)
elif _is_magic(name):
raise AttributeError(name)
if not self._mock_unsafe and (not self._mock_methods or name not in self._mock_methods):
if name.startswith(('assert', 'assret', 'asert', 'aseert', 'assrt')) or name in _ATTRIB_DENY_LIST:
> raise AttributeError(
f"{name!r} is not a valid assertion. Use a spec "
f"for the mock if {name!r} is meant to be an attribute.")
E AttributeError: 'called_with' is not a valid assertion. Use a spec for the mock if 'called_with' is meant to be an attribute.
/usr/lib/python3.12/unittest/mock.py:663: AttributeError
=============================== warnings summary ===============================
mu/localedetect.py:47
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/localedetect.py:47: DeprecationWarning: 'locale.getdefaultlocale' is deprecated and slated for removal in Python 3.15. Use setlocale(), getencoding() and getlocale() instead.
lang_code, _encoding = locale.getdefaultlocale()
mu/resources/__init__.py:20
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build/mu/resources/__init__.py:20: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
from pkg_resources import resource_filename, resource_string
../../../../../../usr/lib/python3/dist-packages/jupyter_client/connect.py:22
/usr/lib/python3/dist-packages/jupyter_client/connect.py:22: DeprecationWarning: Jupyter is migrating its paths to use standard platformdirs
given by the platformdirs library. To remove this warning and
see the appropriate new directories, set the environment variable
`JUPYTER_PLATFORM_DIRS=1` and then run `jupyter --paths`.
The use of platformdirs will be the default in `jupyter_core` v6
from jupyter_core.paths import jupyter_data_dir, jupyter_runtime_dir, secure_write
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================
FAILED tests/modes/test_debug.py::test_debug_start - AttributeError: 'called_...
FAILED tests/interface/test_main.py::test_Window_connect_zoom - AttributeErro...
FAILED tests/modes/test_pygamezero.py::test_pgzero_run_game - AttributeError:...
FAILED tests/test_logic.py::test_load_stores_newline - AttributeError: 'calle...
FAILED tests/test_logic.py::test_save_restores_newline - AttributeError: 'cal...
============= 5 failed, 733 passed, 2 skipped, 3 warnings in 3.41s =============
E: pybuild pybuild:389: test: plugin distutils failed with: exit code=1: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build; python3.12 -m pytest --random-order
Traceback (most recent call last):
File "/usr/bin/pybuild", line 387, in main
run(func, i, version, c)
File "/usr/bin/pybuild", line 325, in run
result = func(context, args)
^^^^^^^^^^^^^^^^^^^
File "/usr/share/dh-python/dhpython/build/base.py", line 365, in wrapped_func
raise Exception(msg)
Exception: exit code=1: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_mu-editor/build; python3.12 -m pytest --random-order
rm -fr -- /tmp/dh-xdg-rundir-5AzwBSpe
dh_auto_test: error: pybuild --test -i python{version} -p 3.12 returned exit code 13
make[1]: *** [debian/rules:42: override_dh_auto_test] Error 25
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
make: *** [debian/rules:25: binary] Error 2
dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2
--------------------------------------------------------------------------------
The above is just how the build ends and not necessarily the most relevant part.
If required, the full build log is available here:
https://people.debian.org/~sanvila/build-logs/202409/
About the archive rebuild: The build was made on virtual machines
of type m6a.large and r6a.large from AWS, using sbuild and a
reduced chroot with only build-essential packages.
If you could not reproduce the bug please contact me privately, as I
am willing to provide ssh access to a virtual machine where the bug is
fully reproducible.
If this is really a bug in one of the build-depends, please use
reassign and affects, so that this is still visible in the BTS web
page for this package.
Thanks.
More information about the Python-apps-team
mailing list