diff --git a/.dockerignore b/.dockerignore
index 505d68c..c92523a 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -3,6 +3,7 @@
!install.sh
!build-dist.sh
!check.sh
+!test.sh
!requirements_dev.txt
!.isort.cfg
!pylintrc
diff --git a/.gitignore b/.gitignore
index 71be08f..79420be 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,3 +12,5 @@ dist/
.venv/
*.wav
*.spec
+
+/samples
diff --git a/Dockerfile.test b/Dockerfile.test
new file mode 100644
index 0000000..f88f377
--- /dev/null
+++ b/Dockerfile.test
@@ -0,0 +1,40 @@
+# Copyright 2022 Mycroft AI Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program 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 Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+# -----------------------------------------------------------------------------
+# Dockerfile for Mimic 3 (https://github.com/MycroftAI/mimic3)
+#
+# Runs code checks and creates source code distributions for PyPI.
+#
+# Requires Docker buildx: https://docs.docker.com/buildx/working-with-buildx/
+# -----------------------------------------------------------------------------
+FROM python:3.9
+
+ARG TARGETARCH
+ARG TARGETVARIANT
+
+ENV LANG C.UTF-8
+ENV DEBIAN_FRONTEND=noninteractive
+
+WORKDIR /build/mimic3
+COPY ./ ./
+
+# Install mimic3
+RUN --mount=type=cache,id=pip-venv,target=/root/.cache/pip \
+ ./install.sh
+
+# Run tests
+RUN --mount=type=cache,id=voices,target=/root/.local/share/mimic3 \
+ ./test.sh
diff --git a/Makefile b/Makefile
index 6b47101..670cc30 100644
--- a/Makefile
+++ b/Makefile
@@ -36,10 +36,15 @@ docker-gpu:
binaries:
echo "$(DOCKER_PLATFORM)" | sed -e 's/,/\n/g' | \
while read -r platform; do \
- echo "$${platform}"; \
rm -rf "dist/$${platform}"; \
docker buildx build . -f Dockerfile.binary --platform "$${platform}" --output "type=local,dest=dist/$${platform}"; \
done
debian:
debian/build-debian.sh
+
+test:
+ echo "$(DOCKER_PLATFORM)" | sed -e 's/,/\n/g' | \
+ while read -r platform; do \
+ docker buildx build . -f Dockerfile.test --platform "$${platform}"; \
+ done
diff --git a/test.sh b/test.sh
new file mode 100755
index 0000000..f0f22ad
--- /dev/null
+++ b/test.sh
@@ -0,0 +1,40 @@
+#!/usr/bin/env bash
+# Copyright 2022 Mycroft AI Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program 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 Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+# -----------------------------------------------------------------------------
+#
+# Generate samples and compare hashes
+#
+set -eo pipefail
+
+# Directory of *this* script
+this_dir="$( cd "$( dirname "$0" )" && pwd )"
+
+expected_hashes="${this_dir}/tests/sample_hashes.txt"
+if [ ! -s "${expected_hashes}" ]; then
+ echo "Missing ${expected_hashes}";
+ exit 1;
+fi
+
+# Path to virtual environment
+: "${venv:=${this_dir}/.venv}"
+
+if [ -d "${venv}" ]; then
+ # Activate virtual environment if available
+ source "${venv}/bin/activate"
+fi
+
+diff "${expected_hashes}" <(python3 tests/get_sample_hashes.py)
diff --git a/tests/get_sample_hashes.py b/tests/get_sample_hashes.py
index 116f844..db04dd0 100644
--- a/tests/get_sample_hashes.py
+++ b/tests/get_sample_hashes.py
@@ -33,6 +33,9 @@ from mimic3_tts import Mimic3Settings, Mimic3TextToSpeechSystem, Voice
# -----------------------------------------------------------------------------
_TEST_SENTENCES = {
+ "af": """'n Reënboog is 'n boog van gekleurde lig wat ontstaan wanneer die
+ son teen 'n waterdruppel skyn en die wit lig dan deur middel van
+ ligbreking in die volledige kleurspektrum opgebreek word.""",
"de": """Der Regenbogen ist ein atmosphärisch-optisches Phänomen, das als
kreisbogenförmiges farbiges Lichtband in einer von der Sonne
beschienenen Regenwand oder -wolke wahrgenommen wird.""",
diff --git a/tests/sample_hashes.txt b/tests/sample_hashes.txt
index 7746a1b..c79cdd8 100644
--- a/tests/sample_hashes.txt
+++ b/tests/sample_hashes.txt
@@ -1,3 +1,4 @@
+af_ZA/google_nwu 292fa486a38b96a3e3d1b071e58377620953da12f49b2427cdff82969b933b9b
de_DE/m-ailabs_low eafcf586b582c5ffb58c373a62e34c2e35d3b4b5d9d49288dabfacb50bc4fa8c
de_DE/thorsten-emotion_low d7b765c4cc18364023b1e50d4cef1fc6b6d5a780ea1713d2a6ed60459dcbd02e
de_DE/thorsten_low 60967155b319d1a78c2dade56a4f484cf6996c506f2d24b95dad717fafdad302
diff --git a/tests/update-hashes.sh b/tests/update-hashes.sh
new file mode 100755
index 0000000..1728b6c
--- /dev/null
+++ b/tests/update-hashes.sh
@@ -0,0 +1,42 @@
+#!/usr/bin/env bash
+# Copyright 2022 Mycroft AI Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program 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 Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+# -----------------------------------------------------------------------------
+#
+# Updates sample hashes and puts WAVs in samples/ directory.
+# These should be manually verified.
+#
+set -eo pipefail
+
+# Directory of *this* script
+this_dir="$( cd "$( dirname "$0" )" && pwd )"
+base_dir="$(realpath "${this_dir}/..")"
+
+samples_dir="${base_dir}/samples"
+expected_hashes="${base_dir}/tests/sample_hashes.txt"
+
+# Path to virtual environment
+: "${venv:=${base_dir}/.venv}"
+
+if [ -d "${venv}" ]; then
+ # Activate virtual environment if available
+ source "${venv}/bin/activate"
+fi
+
+rm -rf "${samples_dir}"
+python3 tests/get_sample_hashes.py \
+ --output-dir "${samples_dir}" \
+ > "${expected_hashes}"