| # python_module.at - python module tests |
| # |
| # Copyright (C) 2026 Jean-François David |
| # |
| # This is free software; you can redistribute it and/or modify it |
| # under the terms of the GNU General Public License as published by |
| # the Free Software Foundation; either version 2, or (at your option) |
| # any later version. |
| # |
| # This software is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| # General Public License for more details. |
| # |
| # You should have received a copy of the GNU General Public License |
| # along with this program. If not, see <https://www.gnu.org/licenses/>. |
| |
| AT_BANNER([Python module]) |
| |
| AT_SETUP([Python module imports]) |
| AT_KEYWORDS([python import]) |
| |
| AT_SKIP_IF([test "x$TEST_PYTHON_ENABLED" != xyes]) |
| |
| AT_CHECK([[test_pythonpath=${TEST_PYTHONPATH-"$abs_top_srcdir/src/modules"} |
| PYTHONDONTWRITEBYTECODE=1 \ |
| PYTHONNOUSERSITE=1 \ |
| PYTHONPATH="$test_pythonpath" \ |
| "$PYTHON" - "$test_pythonpath" <<'PY' |
| import os |
| import sys |
| |
| from speechd_python_modules import module_utils, speechd_types |
| |
| pythonpath_dir = os.path.realpath(sys.argv[1]) |
| module_dir = os.path.join(pythonpath_dir, "speechd_python_modules") |
| modules = [module_utils, speechd_types] |
| |
| |
| def check_module_path(module): |
| module_file = os.path.realpath(module.__file__) |
| if os.path.dirname(module_file) != module_dir: |
| raise SystemExit( |
| "%s imported from %r, expected %r" |
| % (module.__name__, module_file, module_dir) |
| ) |
| |
| |
| for module in modules: |
| check_module_path(module) |
| PY |
| ]], [0], [], []) |
| |
| AT_CLEANUP |
| |
| AT_SETUP([module_strip_ssml]) |
| AT_KEYWORDS([python module_utils ssml]) |
| |
| AT_SKIP_IF([test "x$TEST_PYTHON_ENABLED" != xyes]) |
| |
| AT_CHECK([[test_pythonpath=${TEST_PYTHONPATH-"$abs_top_srcdir/src/modules"} |
| PYTHONDONTWRITEBYTECODE=1 \ |
| PYTHONNOUSERSITE=1 \ |
| PYTHONPATH="$test_pythonpath" \ |
| "$PYTHON" - <<'PY' |
| from speechd_python_modules import module_utils |
| |
| strip_ssml = module_utils.module_strip_ssml |
| |
| |
| def check(message, expected): |
| actual = strip_ssml(message) |
| if actual != expected: |
| raise SystemExit( |
| "strip_ssml(%r) returned %r, expected %r" |
| % (message, actual, expected) |
| ) |
| |
| |
| check("Plain text.", "Plain text.") |
| check("Hello <emphasis>world</emphasis>.", "Hello world.") |
| check('<speak>Hello <break time="500ms"/>world</speak>', "Hello world") |
| check('<tag attr="&">text</tag>', "text") |
| check( |
| "Use <tag>, &, "quotes" and 'apostrophes'.", |
| "Use <tag>, &, \"quotes\" and 'apostrophes'.", |
| ) |
| check("Keep <unfinished", "Keep ") |
| check("Unknown © entity stays.", "Unknown © entity stays.") |
| PY |
| ]], [0], [], []) |
| |
| AT_CLEANUP |
| |
| AT_SETUP([Python module types]) |
| AT_KEYWORDS([python speechd_types]) |
| |
| AT_SKIP_IF([test "x$TEST_PYTHON_ENABLED" != xyes]) |
| |
| AT_CHECK([[test_pythonpath=${TEST_PYTHONPATH-"$abs_top_srcdir/src/modules"} |
| PYTHONDONTWRITEBYTECODE=1 \ |
| PYTHONNOUSERSITE=1 \ |
| PYTHONPATH="$test_pythonpath" \ |
| "$PYTHON" - <<'PY' |
| from speechd_python_modules import speechd_types |
| |
| if speechd_types.SPD_MSGTYPE_TEXT != 0: |
| raise SystemExit("unexpected SPD_MSGTYPE_TEXT value") |
| if speechd_types.SPD_MSGTYPE_SPELL != 99: |
| raise SystemExit("unexpected SPD_MSGTYPE_SPELL value") |
| if speechd_types.SPD_AUDIO_LE != 0: |
| raise SystemExit("unexpected SPD_AUDIO_LE value") |
| if speechd_types.SPD_AUDIO_BE != 1: |
| raise SystemExit("unexpected SPD_AUDIO_BE value") |
| |
| voice = speechd_types.SPDVoice(name="name", language="en", variant="male") |
| if (voice.name, voice.language, voice.variant) != ("name", "en", "male"): |
| raise SystemExit("unexpected SPDVoice fields") |
| |
| track = speechd_types.AudioTrack( |
| bits=16, |
| num_channels=1, |
| sample_rate=22050, |
| num_samples=2, |
| samples=b"\0\0\1\0", |
| ) |
| if ( |
| track.bits, |
| track.num_channels, |
| track.sample_rate, |
| track.num_samples, |
| track.samples, |
| ) != (16, 1, 22050, 2, b"\0\0\1\0"): |
| raise SystemExit("unexpected AudioTrack fields") |
| PY |
| ]], [0], [], []) |
| |
| AT_CLEANUP |