Source code for music21.braille.runAllBrailleTests
# ------------------------------------------------------------------------------
# Name: braille/runAllBrailleTests.py
# Purpose: Test runner for Bo-Cheng Jhan and others who would prefer
# to debug braille output with a minimum of screen reader output
# Author: Michael Scott Asato Cuthbert
#
# Copyright: Copyright © 2016 Michael Scott Asato Cuthbert
# License: BSD, see license.txt
# ------------------------------------------------------------------------------
'''
A Python 3 only module that runs all the braille Tests and no other tests.
Does not run the doctests, unfortunately. TODO: use mainTest somehow
This module produces a minimum of output which is most helpful
to people who are programming music21 on a screen reader.
For Bo-Cheng Jhan with my thanks.
'''
from __future__ import annotations
import re
import subprocess
import sys
from music21 import braille
current_executable = sys.executable
[docs]
def runTest(): # pragma: no cover
savedStderr = sys.stderr
totalTests = 0
hadError = False
for modName in braille.__all__:
completion = subprocess.run(
[current_executable, '-m', f'music21.braille.{modName}'],
check=False,
capture_output=True,
)
for errOutput in completion.stderr, completion.stdout:
if errOutput is None:
continue
for thisLine in errOutput.decode('utf-8').splitlines():
if not thisLine:
continue
if re.search(r'found in sys.modules after import', thisLine):
continue
if re.search(r'warn\(RuntimeWarning\(msg\)\)', thisLine):
continue
if re.match(r'^\.*$', thisLine):
# all dots or blank line
continue
if re.match(r'^-+$', thisLine):
# separator
continue
if thisLine == 'OK':
continue
numTests = re.match(r'^Ran (\d+) tests? in ', thisLine)
if numTests:
totalTests += int(numTests.group(1))
continue
hadError = True
print(thisLine)
print('Total tests: ', totalTests)
if hadError:
print('ERRORS FOUND')
else:
print('All good!')
sys.stderr = savedStderr
if __name__ == '__main__':
runTest()