Skip to content

Support arm64 system tests#2

Closed
LeonarddeR wants to merge 24 commits intomasterfrom
testOnArm
Closed

Support arm64 system tests#2
LeonarddeR wants to merge 24 commits intomasterfrom
testOnArm

Conversation

@LeonarddeR
Copy link
Copy Markdown
Owner

Link to issue number:

Summary of the issue:

Description of user facing changes:

Description of developer facing changes:

Description of development approach:

Testing strategy:

Known issues with pull request:

Code Review Checklist:

  • Documentation:
    • Change log entry
    • User Documentation
    • Developer / Technical Documentation
    • Context sensitive help for GUI changes
  • Testing:
    • Unit tests
    • System (end to end) tests
    • Manual testing
  • UX of all users considered:
    • Speech
    • Braille
    • Low Vision
    • Different web browsers
    • Localization in other languages / culture than English
  • API is compatible with existing add-ons.
  • Security precautions taken.

@coderabbitai summary

Qchristensen and others added 11 commits August 8, 2025 10:58
Summary of the issue:
Makes uninstall information easier to find and link to by providing a
heading in the user guide.

Description of user facing changes:
Information on uninstalling NVDA is tucked away at the bottom of the
command line section. I have given this its own heading, re-ordered to
describe uninstalling before the command line argument for it, and added
a note that NVDA's data in %appdata% is not automatically removed on
uninstalling NVDA.
Fixes nvaccess#18622 

Summary of the issue:
Tabs are replaced with spaces in codefences when converting markdown to
html.
This causes examples for characterDescriptions, gestures and symbol
files to contain incorrect syntax.

Description of user facing changes:
Fixed example in dev guide

Description of developer facing changes:
- Updated markdown
- added [python markdown extensions
suite](https://github.com/facelessuser/pymdown-extensions)
- deprecated DEFAULT_EXTENSIONS 

Description of development approach:
- enabled preserve tabs
(<https://facelessuser.github.io/pymdown-extensions/extensions/superfences/#preserve-tabs>)
- made markdown extensions ordered

Testing strategy:
Built dev guide, ensured tabs are preserved
Built developerGuide and user_docs with and without this PR, and diffed the files to ensure only correct changes were made.

Known issues with pull request:
None
…s its own configuration (nvaccess#18443)

### Link to issue number:
Closes nvaccess#18442
Fix-up of nvaccess#16937

### Summary of the issue:
When creating a portable NVDA and asking to launch it immediately after
creation, the portable copy does not use its own config, but the one of
the NVDA it had been created from.

In nvaccess#16937, we propagate `--disable-addons` as well as `-c` /
`--config-path` for security reasons so that an administrator can update
from a user account using their own config folder, without risking to
use malicious add-ons in the user's configuration (see
[GHSA-727q-h8j2-6p45](GHSA-727q-h8j2-6p45)).

### Description of developer facing changes:
N/A
### Description of development approach:
* When creating a portable copy, do not pass parameters to the new
instance. In any case, there is no UAC, so no risk of privilege
escalation.
* Parameters are still being passed to the new instance during an
update.
* When installing a new copy, I have kept parameters of original NVDA.

### Testing strategy:
* portable creation: uses its own configuration
* portable update: uses the configuration of the previous portable,
even, for example when using `-c` flag
…ling (nvaccess#18631)

Fixes some issues from nvaccess#18597 

Summary of the issue:
- Our timeout for waiting for NVDA exit when a crash is triggered is
only 3 seconds. Our timeout is 10 seconds for when testing for testing
NVDA to restart normally. This is causing the test to fail regularly
- Starting notepad is fragile. If notepad doesn't load before we open
task switcher, then it may fail to get focus. This results in the first
notepad test regularly failing.

Description of user facing changes:
none

Description of developer facing changes:
none

Description of development approach:
- The timeout for waiting for NVDA to exit after a crash is triggered is
increased.
- When starting notepad, we first wait to see if it gets focus normally.
If not, we try to task switch to it. This gives ample time for notepad
to load, and avoids task switching if its not necessary

Testing strategy:
Ran each test 50 times. results:
17 failures out of 50 runs of 4 test suites.
This is around the same rate as nvaccess#18597, however there is an increase to
timeout issues (likely due to reduced resources for 50x4 matrix jobs).
It is likely that these timeout issues will occur with a lower frequency
on normal builds.

Test failures:
- "Speech did not finish before timeout" - 7
- "Timed out waiting for key to be processed" - 4
- "Timed out waiting for core to sleep again" - 2
- "Unable to get chrome window" - 1
- "Unable to get notepad window" - 1
- "Unable to connect to nvdaSpyLib" - 1
- "Focus mode: report content editable with details braille Actual !=
Expected: Focus mode != The word hlght has cmnt cat hlght end has a
comment tied to it." - 1

Note that the failures noted in nvaccess#18597 and targeted by this fix do not
occur:
Startup/shutdown:
- 5x: Ensure NVDA restarts on crash: Old NVDA is still running.
- 3x: symbolInSpeechUI :: Ensure symbols aren't substituted within NVDA.
Unable to focus Notepad.

Known issues with pull request:
see test failures
Fixup of nvaccess#18638

nvaccess#18638 introduced an update to python-markdown, which was not captured in uv.lock.
The uv environment mismatch caused pre-commit checks to fail, including the translation comment check separately.

The latest pypi entry doesn't seem to capture the license correctly, so our license check filtering needed to be updated too
Closes nvaccess#18512

Summary of the issue:
Since most users use their device as either follower or leader
consistently, NVDA Remote Access should remember their selection.
The same can also be said of the server type and port to use for
self-hosted servers.

Description of user facing changes:
The "Connect to Another Computer" dialog persists the selection of the
"Mode", "Server" and "Port" controls.

Description of developer facing changes:
NVDA now sets up `wx.lib.agw.persist` as follows:

* persisted GUI state is saved to "guiState.ini" in the NVDA config
directory.
* If `NVDAState.shouldWriteToDisk` returns `False`, saving is disabled.

Description of development approach:
* Set up the `PersistenceManager` singleton in `gui.initialize`. Free it
in `gui.terminate` out of an abundance of caution.
* Add an (internal) list of controls that should be persisted to
`_remoteClient.dialogs.DirectConnectDialog`.
* Add (internal) methods to the same class to register and restore
state, save state, and unregister these controls.
* Register and restore state on init, save state on OK, and unregister
on dialog destruction (used instead of window close as this is not fired
on modal dialogs).

Testing strategy:
Connected to remote a number of times across a number of NVDA restarts
and ensured mode was remembered.

Manually edited the `guiState.ini` file to contain illegal values, and
ran NVDA to ensure the defaults were used in this case.

Ran NVDA with the `--launcher` flag and ensured that GUI state was read
but not written.

Known issues with pull request:
None
Part of nvaccess#18591
Summary of the issue:

We want to update Python to 3.13.
Description of user facing changes:

None
Description of developer facing changes:

    Updates to comtypes and py2exe

Description of development approach:

    Create a parallel build of python 3.13
    comtypes needed to be updated as 1.4.8 is the minimum version for 3.13 

Supporting Python 3.13 enthought/comtypes#618
py2exe needed to be updated as 0.14 is the minimum version for 3.13 github.com/
Support Python 3.13 py2exe/py2exe#215
clearing frame locals needed to be fixed - see
it's no longer possible to delete items from f_locals (FrameLocalsProxy) in 3.13+ python/cpython#125590
brlapi needed tests needed to be disabled for now
unit tests using deprecated asserts assertDictContainsSubset assertRegexpMatches need to be fixed
unit tests for testing abstract methods needs to updated to reflect latest error message
<!--pre-commit.ci start-->
updates:
- [github.com/astral-sh/ruff-pre-commit: v0.12.5 →
v0.12.7](astral-sh/ruff-pre-commit@v0.12.5...v0.12.7)
- [github.com/astral-sh/uv-pre-commit: 0.8.3 →
0.8.4](astral-sh/uv-pre-commit@0.8.3...0.8.4)
<!--pre-commit.ci end-->

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Sean Budd <sean@nvaccess.org>
Summary of the issue:

As noted in nvaccess#18645, if the uv-lock pre-commit step fails, running checkPo will also fail. When checkPo fails, it's unclear why, as the warning logs are not related.
Description of user facing changes:

None
Description of developer facing changes:

PR failures are slightly more obvious when changes to uv.lock have not been committed correctly
Follow up to nvaccess#18611
Part of nvaccess#18591
Summary of the issue:

Python 3.13.6 was recently released.
We are now building test parallel builds of python 3.13.
Fixup from nvaccess#18592
Summary of the issue:

We are installing an older version of Windows SDK for symstore.
We should use the latest version 10.1.
The installation of 10.0 seems to also fail occasionally nvaccess#18597 (comment)
LeonarddeR and others added 12 commits August 8, 2025 19:51
Fixes nvaccess#18003.
Summary of the issue:

The default threshold values for signed integer types are incorrect, becoming twice as large, causing more parts to be trimmed than expected.
Description of user facing changes:

The excessive trimming will be fixed.
Description of developer facing changes:

None.
Description of development approach:

WaveFormat::defaultThreshold should use 1 / 2^10 or 0.0009765625 as the threshold value for all types.

The current implementation handles floating points and unsigned integers correctly, but fails to differentiate the signedness, so signed integer types will have a threshold value that's twice as large.

The solution is to replace the case-by-case implementation to a more general and correct max() / (1 << 10).
Summary of the issue:

The MINI-SEIKA braille display driver was not properly raising a RuntimeError when no display is found, causing the error condition to be silently ignored instead of properly handled.
Description of user facing changes:

When no MINI-SEIKA display is found, users will now receive proper error feedback instead of the driver silently failing. This improves error reporting and makes it clearer when the display cannot be initialized.
Description of developer facing changes:

Fixed a bug in source/brailleDisplayDrivers/seikantk.py where RuntimeError("No MINI-SEIKA display found") was not being raised properly - added missing raise keyword.
Description of development approach:

Simple one-line fix to add the missing raise keyword before the RuntimeError instantiation. This ensures the exception is actually thrown rather than just creating an unused RuntimeError object.
This pull request updates translations to languages being tracked from
Crowdin.

Co-authored-by: GitHub Actions <>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Summary of the issue:

When generating a syntax erro in a Python 3.13 Python console, the following is logged:

ERROR - unhandled exception (09:14:31.494) - MainThread (11952):
Traceback (most recent call last):
  File "code.pyc", line 65, in runsource
  File "pythonConsole.pyc", line 143, in __call__
  File "codeop.pyc", line 155, in __call__
  File "codeop.pyc", line 75, in _maybe_compile
  File "codeop.pyc", line 118, in __call__
  File "<console>", line 1
    fl@
SyntaxError: invalid syntax

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "pythonConsole.pyc", line 509, in onInputChar
  File "pythonConsole.pyc", line 385, in execute
  File "pythonConsole.pyc", line 196, in push
  File "code.pyc", line 314, in push
  File "code.pyc", line 68, in runsource
TypeError: PythonConsole.showsyntaxerror() got an unexpected keyword argument 'source'

Description of user facing changes:

Python console no longer breaks on syntax errors on Python 3.13 builds.
Description of developer facing changes:

None
Description of development approach:

Python 3.13 added **kwargs to the showsyntaxerror method. Adding this shouldn't do any harm on Python 3.11. kwargs will always be empty there and it's not problematic to pass a **kwargs to a non-kwargs supporting function when kwargs is empty.
Fixes nvaccess#17967.
Summary of the issue:

When rate boost is enabled and the rate is fast enough, if some audio takes longer time to process, an audio gap might appear in the speech audio.
Description of user facing changes:

The audio gap issue should be fixed.
Description of developer facing changes:

None.
Description of development approach:

Wait for at least 50ms of audio data before sending the first chunk to the output device.

This mitigates the problem when the first small chunk is immediately played, but during processing of the next chunk, there isn't enough audio to cover this duration, leaving audible gaps.

Also the return value of IStream::Write is changed to S_OK instead of an error code during cancellation.
Summary of the issue:

Deployment of snapshots may cancel the deployment of other snapshots
Description of user facing changes:

None
Description of developer facing changes:

Snapshots such as alpha, beta, rc or try- snapshots will only cancel each other if they are on the same branch
Description of development approach:

Change deployment group to include the ref name
Closes nvaccess#18105

Summary of the issue:
There's currently no script to send `control+alt+delete` to the
controlled end of a Remote Access connection, which means the only way
to do so if from the Remote Access menu..

Description of user facing changes:
Added an unassigned command to send `control+alt+delete`.

Description of developer facing changes:
None

Description of development approach:
Added a new `script_sendSAS` method to `globalCommands.GlobalCommands`.
Registered this script as a local script on the `_remoteClient`
singleton so that it can be executed when sending keys.

Testing strategy:
Ran from source. Bound the script to a gesture (`NVDA+alt+delete`).
Connected as leader and connected another computer as follower. Used the
gesture when controlling the local computer and the remote computer.

Known issues with pull request:
None
Part of nvaccess#17878
Blocked by release of 2025.2
Summary of the issue:

We are migrating from AppVeyor to GitHub actions.
After we migrate snapshots/PRs over, we will remove all AppVeyor related code.
Description of user facing changes:

None
Description of developer facing changes:

Remove all Appveyor related code. NVDA will only be built on GitHub actions.
Description of development approach:

Update documentation and remove code
Start the dev cycle for the 20XY.Z release.
This will be a compatibility breaking release.

Complete:
- [x] New section in the change log.
- [x] Update NVDA version in `master`
- [x] Bump the add-on API compatibility in `master`
- [x] Update [`nvdaAPIVersions.json` to include the next
version](https://github.com/nvaccess/addon-datastore-transform)
- Re-run the last "Transform NVDA addons to views" on
[addon-datastore](https://github.com/nvaccess/addon-datastore/actions/workflows/transformDataToViews.yml)
to regenerate projections (views) for the add-on datastore API.

On merge:
- [ ] [Update auto milestone
ID](https://github.com/nvaccess/nvda/settings/variables/actions)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants