re-import sources as agreed with the maintainer

This commit is contained in:
Adam Samalik 2023-07-10 12:51:55 +02:00
parent 92aea71183
commit 997c74671a
15 changed files with 1614 additions and 1 deletions

10
.gitignore vendored
View File

@ -1,2 +1,10 @@
SOURCES/noto-fonts-86b2e553c3e3e4d6614dadd1fa0a7a6dafd74552.zip
/NotoFonts-hinted-2013-04-11.tgz
/NotoFonts-hinted-2013-06-24.tgz
/NotoFonts-hinted-2013-08-07.tgz
/NotoFonts-unhinted-2013-08-07.tgz
/396bf23e32cf53820681144e109270ae1f4ee7c3.zip
/noto-aae16d0cd626.zip
/noto-762640379a51.zip
/noto-d47480343178.zip
/v2015-09-29-license-adobe.zip
/noto-fonts-86b2e553c3e3e4d6614dadd1fa0a7a6dafd74552.zip

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<alias>
<family>fantasy</family>
<prefer>
<family>Noto Color Emoji</family>
</prefer>
</alias>
<alias>
<family>Noto Color Emoji</family>
<default>
<family>fantasy</family>
</default>
</alias>
</fontconfig>

View File

@ -0,0 +1,299 @@
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<match>
<test name="lang">
<string>ja</string>
</test>
<test name="family">
<string>monospace</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans CJK JP</string>
</edit>
<edit name="family" mode="prepend" binding="strong">
<string>DejaVu Sans Mono</string>
</edit>
</match>
<match>
<test name="lang">
<string>ko</string>
</test>
<test name="family">
<string>monospace</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans CJK KR</string>
</edit>
<edit name="family" mode="prepend" binding="strong">
<string>DejaVu Sans Mono</string>
</edit>
</match>
<match>
<test name="lang">
<string>zh-cn</string>
</test>
<test name="family">
<string>monospace</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans CJK SC</string>
</edit>
<edit name="family" mode="prepend" binding="strong">
<string>DejaVu Sans Mono</string>
</edit>
</match>
<match>
<test name="lang">
<string>zh-sg</string>
</test>
<test name="family">
<string>monospace</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans CJK SC</string>
</edit>
<edit name="family" mode="prepend" binding="strong">
<string>DejaVu Sans Mono</string>
</edit>
</match>
<match>
<test name="lang">
<string>zh-tw</string>
</test>
<test name="family">
<string>monospace</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans CJK TC</string>
</edit>
<edit name="family" mode="prepend" binding="strong">
<string>DejaVu Sans Mono</string>
</edit>
</match>
<match>
<test name="lang">
<string>zh-hk</string>
</test>
<test name="family">
<string>monospace</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans CJK TC</string>
</edit>
<edit name="family" mode="prepend" binding="strong">
<string>DejaVu Sans Mono</string>
</edit>
</match>
<alias>
<family>Noto Sans CJK JP</family>
<default>
<family>monospace</family>
</default>
</alias>
<alias>
<family>Noto Sans CJK KR</family>
<default>
<family>monospace</family>
</default>
</alias>
<alias>
<family>Noto Sans CJK SC</family>
<default>
<family>monospace</family>
</default>
</alias>
<alias>
<family>Noto Sans CJK TC</family>
<default>
<family>monospace</family>
</default>
</alias>
<match>
<test name="lang">
<string>ja</string>
</test>
<test name="family">
<string>serif</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans CJK JP</string>
</edit>
</match>
<match>
<test name="lang">
<string>ko</string>
</test>
<test name="family">
<string>serif</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans CJK KR</string>
</edit>
</match>
<match>
<test name="lang">
<string>zh-cn</string>
</test>
<test name="family">
<string>serif</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans CJK SC</string>
</edit>
</match>
<match>
<test name="lang">
<string>zh-sg</string>
</test>
<test name="family">
<string>serif</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans CJK SC</string>
</edit>
</match>
<match>
<test name="lang">
<string>zh-tw</string>
</test>
<test name="family">
<string>serif</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans CJK TC</string>
</edit>
</match>
<match>
<test name="lang">
<string>zh-hk</string>
</test>
<test name="family">
<string>serif</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans CJK TC</string>
</edit>
</match>
<alias>
<family>Noto Sans CJK JP</family>
<default>
<family>serif</family>
</default>
</alias>
<alias>
<family>Noto Sans CJK KR</family>
<default>
<family>serif</family>
</default>
</alias>
<alias>
<family>Noto Sans CJK SC</family>
<default>
<family>serif</family>
</default>
</alias>
<alias>
<family>Noto Sans CJK TC</family>
<default>
<family>serif</family>
</default>
</alias>
<match>
<test name="lang">
<string>ja</string>
</test>
<test name="family">
<string>sans-serif</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans CJK JP</string>
</edit>
</match>
<match>
<test name="lang">
<string>ko</string>
</test>
<test name="family">
<string>sans-serif</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans CJK KR</string>
</edit>
</match>
<match>
<test name="lang">
<string>zh-cn</string>
</test>
<test name="family">
<string>sans-serif</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans CJK SC</string>
<string>Noto Sans CJK TC</string>
</edit>
</match>
<match>
<test name="lang">
<string>zh-sg</string>
</test>
<test name="family">
<string>sans-serif</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans CJK SC</string>
<string>Noto Sans CJK TC</string>
</edit>
</match>
<match>
<test name="lang">
<string>zh-tw</string>
</test>
<test name="family">
<string>sans-serif</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans CJK TC</string>
</edit>
</match>
<match>
<test name="lang">
<string>zh-hk</string>
</test>
<test name="family">
<string>sans-serif</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans CJK TC</string>
</edit>
</match>
<alias>
<family>Noto Sans CJK JP</family>
<default>
<family>sans-serif</family>
</default>
</alias>
<alias>
<family>Noto Sans CJK KR</family>
<default>
<family>sans-serif</family>
</default>
</alias>
<alias>
<family>Noto Sans CJK SC</family>
<default>
<family>sans-serif</family>
</default>
</alias>
<alias>
<family>Noto Sans CJK TC</family>
<default>
<family>sans-serif</family>
</default>
</alias>
</fontconfig>

View File

@ -0,0 +1,60 @@
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<match>
<test name="lang">
<string>ja</string>
</test>
<test name="family">
<string>monospace</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans JP</string>
</edit>
</match>
<alias>
<family>Noto Sans JP</family>
<default>
<family>monospace</family>
</default>
</alias>
<match>
<test name="lang">
<string>ja</string>
</test>
<test name="family">
<string>serif</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans JP</string>
</edit>
</match>
<alias>
<family>Noto Sans JP</family>
<default>
<family>serif</family>
</default>
</alias>
<match>
<test name="lang">
<string>ja</string>
</test>
<test name="family">
<string>sans-serif</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans JP</string>
</edit>
</match>
<alias>
<family>Noto Sans JP</family>
<default>
<family>sans-serif</family>
</default>
</alias>
</fontconfig>

View File

@ -0,0 +1,60 @@
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<match>
<test name="lang">
<string>ko</string>
</test>
<test name="family">
<string>monospace</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans KR</string>
</edit>
</match>
<alias>
<family>Noto Sans KR</family>
<default>
<family>monospace</family>
</default>
</alias>
<match>
<test name="lang">
<string>ko</string>
</test>
<test name="family">
<string>serif</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans KR</string>
</edit>
</match>
<alias>
<family>Noto Sans KR</family>
<default>
<family>serif</family>
</default>
</alias>
<match>
<test name="lang">
<string>ko</string>
</test>
<test name="family">
<string>sans-serif</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans KR</string>
</edit>
</match>
<alias>
<family>Noto Sans KR</family>
<default>
<family>sans-serif</family>
</default>
</alias>
</fontconfig>

View File

@ -0,0 +1,105 @@
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<match>
<test name="lang">
<string>zh-cn</string>
</test>
<test name="family">
<string>monospace</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans SC</string>
<string>Noto Sans TC</string>
</edit>
<edit name="family" mode="prepend" binding="strong">
<string>DejaVu Sans Mono</string>
</edit>
</match>
<match>
<test name="lang">
<string>zh-sg</string>
</test>
<test name="family">
<string>monospace</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans SC</string>
<string>Noto Sans TC</string>
</edit>
<edit name="family" mode="prepend" binding="strong">
<string>DejaVu Sans Mono</string>
</edit>
</match>
<alias>
<family>Noto Sans SC</family>
<default>
<family>monospace</family>
</default>
</alias>
<match>
<test name="lang">
<string>zh-cn</string>
</test>
<test name="family">
<string>serif</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans SC</string>
<string>Noto Sans TC</string>
</edit>
</match>
<match>
<test name="lang">
<string>zh-sg</string>
</test>
<test name="family">
<string>serif</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans SC</string>
<string>Noto Sans TC</string>
</edit>
</match>
<alias>
<family>Noto Sans SC</family>
<default>
<family>serif</family>
</default>
</alias>
<match>
<test name="lang">
<string>zh-cn</string>
</test>
<test name="family">
<string>sans-serif</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans SC</string>
<string>Noto Sans TC</string>
</edit>
</match>
<match>
<test name="lang">
<string>zh-sg</string>
</test>
<test name="family">
<string>sans-serif</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans SC</string>
<string>Noto Sans TC</string>
</edit>
</match>
<alias>
<family>Noto Sans SC</family>
<default>
<family>sans-serif</family>
</default>
</alias>
</fontconfig>

View File

@ -0,0 +1,105 @@
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<match>
<test name="lang">
<string>zh-tw</string>
</test>
<test name="family">
<string>monospace</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans TC</string>
<string>Noto Sans SC</string>
</edit>
<edit name="family" mode="prepend" binding="strong">
<string>DejaVu Sans Mono</string>
</edit>
</match>
<match>
<test name="lang">
<string>zh-hk</string>
</test>
<test name="family">
<string>monospace</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans TC</string>
<string>Noto Sans SC</string>
</edit>
<edit name="family" mode="prepend" binding="strong">
<string>DejaVu Sans Mono</string>
</edit>
</match>
<alias>
<family>Noto Sans TC</family>
<default>
<family>monospace</family>
</default>
</alias>
<match>
<test name="lang">
<string>zh-tw</string>
</test>
<test name="family">
<string>serif</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans TC</string>
<string>Noto Sans SC</string>
</edit>
</match>
<match>
<test name="lang">
<string>zh-hk</string>
</test>
<test name="family">
<string>serif</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans TC</string>
<string>Noto Sans SC</string>
</edit>
</match>
<alias>
<family>Noto Sans TC</family>
<default>
<family>serif</family>
</default>
</alias>
<match>
<test name="lang">
<string>zh-tw</string>
</test>
<test name="family">
<string>sans-serif</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans TC</string>
<string>Noto Sans SC</string>
</edit>
</match>
<match>
<test name="lang">
<string>zh-hk</string>
</test>
<test name="family">
<string>sans-serif</string>
</test>
<edit name="family" mode="prepend">
<string>Noto Sans TC</string>
<string>Noto Sans SC</string>
</edit>
</match>
<alias>
<family>Noto Sans TC</family>
<default>
<family>sans-serif</family>
</default>
</alias>
</fontconfig>

1
tests/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/artifacts

View File

@ -0,0 +1,67 @@
# Ansible role for tests using fontconfig
Put this role in your `tests.yml` playbook. The playbook will first install
package dependencies listed on playbook on your localhost, then it will proceed
to run testing. You can redefine the following variables:
* **artifacts**: An artifacts directory on localhost to store logs
* **remote_artifacts**: The directory on the system under test where the logs
are stored. Note: if this variable is left undefined, it will default to
`/tmp/artifacts`
* **required_packages**: A list of prerequisite packages required by tests.
Please note that for Atomic Host, additional packages will be installed
using the `rpm-ostree` command which is affecting the test subject (it's
similar as rebuilding an rpm package to be tested) so this should be used
with caution on only when necessary.
* **path_prefix**: The directory on the system where fonts are installed.
please use one in coverage sub-parameter if having different path_prefix
per sub-packages.
* **package**: The package name to test. this is used to find out fontconfig
config file. please use one in families sub-parameter if having different
config files per sub-packages.
* **coverage**: A list of languages for language coverage tests.
* **families**: A list of family test cases.
## Language coverage test parameters
Supporting two types of formats. one is a simple list of languages:
coverage:
- en
- fr
Another one is a dictionary that has a language as a key and values as parameters:
coverage:
en:
...
fr:
...
You can redefine the following variables for dictionary format:
* **exclude**: A list of font file names to exclude on this testing. this is
useful to avoid unexpected failures on iterating tests when a package has
multiple font files and has different coverages but you need to prevent
testing for few fonts which has different coverages to them.
Please note that the file name is relative to `path_prefix` parameter. also
good to consider using `include` if non-targeted files is more than targeted.
* **include**: A list of font file names to include on this testing. this is
useful to avoid unexpected failures on iterating tests when a pcakge has
multiple font files and has different coverages but you need to prevent
testing for few fonts which has different coverages to them.
Please note that the file name is relative to `path_prefix` parameter. also
good to consider using `exclude` if targeted files is more than non-targeted.
* **name**: The name to store logs. the test script is trying to make an unique
file names to store logs but not perfectly working in some cases. this is
optional parameter to make it unique by yourself.
* **path_prefix**: A list of directory names where fonts are installed on system.
## Family test parameters
* **lang**: A language to test family name for.
* **alias**: An alias name to test.
* **family**: A family name to test, which is supposed to be assinged to the alias.
* **package**: The package name to test. this is used to find out fontconfig
config file. this is optional. if not specified here, global `package`
parameter will be used.

View File

@ -0,0 +1,7 @@
---
role_pkgs_req:
- fontconfig
- fontconfig-devel
- pkg-config
- rsync

View File

@ -0,0 +1,153 @@
#! /bin/bash -efu
debug() {
if [ -n "$DEBUG" ]; then
echo "$*" >&2
fi
}
msg_usage() {
cat <<_EOF_
Run family test.
Usage:
$PROG <options>
Options:
-h, --help Display this help and exit
-v, --verbose Turn on debug
-l, --lang=LANG Test LANG language coverage (default: en)
-f, --family=FILE Set a family name supposed to be assigned for alias.
-g, --alias=STR Set an alias name. (default: sans-serif)
-a, --artifactsdir=DIR Set environment dir to store artifacts
-k, --package=NAME Set a package name for fonts.
_EOF_
}
PROG="${PROG:-${0##*/}}"
DEBUG="${DEBUG:-}"
OPT_LANG="${OPT_LANG:-en}"
OPT_FAMILY="${OPT_FAMILY:-}"
OPT_ARTIFACTS_DIR="${OPT_ARTIFACTS_DIR:-}"
OPT_ALIAS="${OPT_ALIAS:-sans-serif}"
OPT_PACKAGE="${OPT_PACKAGE:-}"
opt=$(getopt -n "$0" --options "hvl:f:t:a:g:k:" --longoptions "help,verbose,lang:,family:,test:,artifactsdir:,alias:,package:" -- "$@")
eval set -- "$opt"
while [[ $# -gt 0 ]]; do
case "$1" in
-k|--package)
OPT_PACKAGE="$2"
shift 2
;;
-g|--alias)
OPT_ALIAS="$2"
shift 2
;;
-a|--artifactsdir)
OPT_ARTIFACTS_DIR="$2"
shift 2
;;
-f|--family)
OPT_FAMILY="$2"
shift 2
;;
-l|--lang)
OPT_LANG="$2"
shift 2
;;
-v|--verbose)
DEBUG="-v"
shift
;;
-h|--help)
msg_usage
exit 0
;;
--)
shift
;;
*)
msg_usage
exit 1
esac
done
if [ -z "$OPT_ARTIFACTS_DIR" ] || [ -z "$OPT_LANG" ] || [ -z "$OPT_FAMILY" ]; then
echo "Use: $PROG -h for help."
exit 0
fi
debug "Alias: $OPT_ALIAS"
debug "Family: $OPT_FAMILY"
debug "Lang: $OPT_LANG"
debug "Artifacts dir: $OPT_ARTIFACTS_DIR"
debug "Package name: $OPT_PACKAGE"
STR_TEST_DASHED=$(echo "${OPT_PACKAGE}_${OPT_ALIAS}" | sed -e 's/\//-/g' -e 's/ /-/g')
debug "Log file: $STR_TEST_DASHED.log"
clean_exit() {
rc=$?;
trap - SIGINT SIGTERM SIGABRT EXIT
echo "Run test $OPT_ALIAS: done."
for pid in $(ps -o pid --no-headers --ppid $$); do
if [ -n "$(ps -p $pid -o pid=)" ]; then
kill -s HUP $pid
fi
done
local log_file_name="$STR_TEST_DASHED.log"
local log_file_path="$OPT_ARTIFACTS_DIR/$log_file_name"
local status
if [[ $rc -eq 127 ]]; then
status="ERROR"
elif grep -q "RESULT: WARN" "$log_file_path"; then
status="ERROR"
elif grep -q "RESULT: FAIL" "$log_file_path"; then
status="FAIL"
elif grep -q "RESULT: PASS" "$log_file_path"; then
status="PASS"
elif grep -q "FAIL" "$log_file_path"; then
status="FAIL"
elif grep -q "PASS" "$log_file_path"; then
status="PASS"
else
status="ERROR"
fi
echo "$status $OPT_ALIAS" >> "$OPT_ARTIFACTS_DIR/test.log"
mv "$log_file_path" "$OPT_ARTIFACTS_DIR/${status}_${log_file_name}"
local results="$OPT_ARTIFACTS_DIR/results.yml"
local result=$(echo $status | tr '[:upper:]' '[:lower:]')
test -f "$results" || echo 'results:' > "$results"
echo "- {result: $result, test: $OPT_ALIAS}" >> "$results"
exit 0
}
trap clean_exit SIGINT SIGTERM SIGABRT EXIT
cachedir=`pkg-config --variable cachedir fontconfig`
tmpconfd=`mktemp --tmpdir -d fontsci.XXXXXXXX`
conf=$(for i in `rpm -ql $OPT_PACKAGE | grep conf.d`; do
echo "<include>$i</include>"
done)
cat <<_EOF_> $tmpconfd/fonts.conf
<fontconfig>
<dir>/usr/share/fonts</dir>
$conf
<cachedir>$cachedir</cachedir>
</fontconfig>
_EOF_
debug "Config: `cat $tmpconfd/fonts.conf`"
mkdir -p "$OPT_ARTIFACTS_DIR"
export OUTPUTFILE="$(realpath "$OPT_ARTIFACTS_DIR")/$STR_TEST_DASHED-out.log"
logfile_stdout="$OPT_ARTIFACTS_DIR/$STR_TEST_DASHED.log"
logfile_stderr="$OPT_ARTIFACTS_DIR/$STR_TEST_DASHED-err.log"
exec 3>&1 4>&2 1> >(tee -a "$logfile_stdout" >&3) 2> >(tee -a "$logfile_stderr" >&4)
debug "Check family assignment"
res=`FONTCONFIG_FILE=$tmpconfd/fonts.conf fc-match -f "%{family[0]}" :family=$OPT_ALIAS:lang=$OPT_LANG`
if [ "x$res" = "x$OPT_FAMILY" ]; then
echo "RESULT: PASS: $OPT_FAMILY was assigned to $OPT_ALIAS as expected"
else
echo "RESULT: FAIL: $OPT_FAMILY wasn't assigned to $OPT_ALIAS (actual result: $res)"
fi
rm -rf $tmpconfd

View File

@ -0,0 +1,224 @@
#! /bin/bash -efu
debug() {
if [ -n "$DEBUG" ]; then
echo "$*" >&2
fi
}
msg_usage() {
cat <<_EOF_
Run language coverage test.
Usage:
$PROG <options>
Options:
-h, --help Display this help and exit
-v, --verbose Turn on debug
-l, --lang=LANG Test LANG language coverage (default: en)
-p, --path=PATH Test fonts on PATH
-n, --name=NAME Set NAME to store a log file.
-a, --artifactsdir=DIR test environment dir to store artifacts
-e, --exclude=FILE Exclude FILE to check.
-i, --include=FILE Include File to check.
_EOF_
}
PROG="${PROG:-${0##*/}}"
DEBUG="${DEBUG:-}"
OPT_LANG="${OPT_LANG:-en}"
OPT_PATH=()
OPT_ARTIFACTS_DIR="${OPT_ARTIFACTS_DIR:-}"
OPT_EXCLUDE=()
OPT_INCLUDE=()
OPT_NAME="${OPT_NAME:-}"
opt=$(getopt -n "$0" --options "hvl:p:n:a:e:i:" --longoptions "help,verbose,lang:,path:,name:,artifactsdir:,exclude:,include:" -- "$@")
eval set -- "$opt"
while [[ $# -gt 0 ]]; do
case "$1" in
-n|--name)
OPT_NAME="$2"
shift 2
;;
-i|--include)
OPT_INCLUDE+=("$2")
shift 2
;;
-e|--exclude)
OPT_EXCLUDE+=("$2")
shift 2
;;
-a|--artifactsdir)
OPT_ARTIFACTS_DIR="$2"
shift 2
;;
-p|--path)
OPT_PATH+=("$2")
shift 2
;;
-l|--lang)
OPT_LANG="$2"
shift 2
;;
-v|--verbose)
DEBUG="-v"
shift
;;
-h|--help)
msg_usage
exit 0
;;
--)
shift
;;
*)
msg_usage
exit 1
esac
done
if [ -z "$OPT_ARTIFACTS_DIR" ] || [ -z "$OPT_LANG" ] || [ -z "$OPT_PATH" ]; then
echo "Use: $PROG -h for help."
exit 0
fi
STR_TEST_DASHED=$(echo "${OPT_NAME:-$OPT_LANG}" | sed -e 's/\//-/g')
clean_exit() {
rc=$?;
trap - SIGINT SIGTERM SIGABRT EXIT
echo "Run test $OPT_LANG: done."
for pid in $(ps -o pid --no-headers --ppid $$); do
if [ -n "$(ps -p $pid -o pid=)" ]; then
kill -s HUP $pid
fi
done
local log_file_name="$STR_TEST_DASHED.log"
local log_file_path="$OPT_ARTIFACTS_DIR/$log_file_name"
local status
if [[ $rc -eq 127 ]]; then
status="ERROR"
elif grep -q "RESULT: WARN" "$log_file_path"; then
status="ERROR"
elif grep -q "RESULT: FAIL" "$log_file_path"; then
status="FAIL"
elif grep -q "RESULT: PASS" "$log_file_path"; then
status="PASS"
elif grep -q "WARN" "$log_file_path"; then
status="ERROR"
elif grep -q "FAIL" "$log_file_path"; then
status="FAIL"
elif grep -q "PASS" "$log_file_path"; then
status="PASS"
else
status="ERROR"
fi
echo "$status $OPT_LANG" >> "$OPT_ARTIFACTS_DIR/test.log"
mv "$log_file_path" "$OPT_ARTIFACTS_DIR/${status}_${log_file_name}"
local results="$OPT_ARTIFACTS_DIR/results.yml"
local result=$(echo $status | tr '[:upper:]' '[:lower:]')
test -f "$results" || echo 'results:' > "$results"
echo "- {result: $result, test: $OPT_LANG}" >> "$results"
exit 0
}
trap clean_exit SIGINT SIGTERM SIGABRT EXIT
mkdir -p "$OPT_ARTIFACTS_DIR"
export OUTPUTFILE="$(realpath "$OPT_ARTIFACTS_DIR")/$STR_TEST_DASHED-out.log"
logfile_stdout="$OPT_ARTIFACTS_DIR/$STR_TEST_DASHED.log"
logfile_stderr="$OPT_ARTIFACTS_DIR/$STR_TEST_DASHED-err.log"
exec 3>&1 4>&2 1> >(tee -a "$logfile_stdout" >&3) 2> >(tee -a "$logfile_stderr" >&4)
expand_regex() {
local p ret=()
local regex="$1"
shift
debug "Expanding $regex"
for p; do
set +f
debug "$p: $regex"
(cd $p;
local x=$(find -regextype posix-egrep -regex "./$regex" -print|sed -e 's,^\./,,g')
debug "$x"
ret+=($x)
set -f
echo -n ${ret[@]}
)
done
echo -n ${ret[@]}
}
iv=()
ev=()
x=()
for p in ${OPT_INCLUDE[@]}; do
x=$(expand_regex $p ${OPT_PATH[@]})
if [ "x$x" == "x" ]; then
echo "RESULT: WARN: No matches on \"$p\". maybe typo or something changed?"
continue
fi
iv=("${iv[@]}" "${x[@]}")
done
for p in ${OPT_EXCLUDE[@]}; do
x=$(expand_regex $p ${OPT_PATH[@]})
if [ "x$x" == "x" ]; then
echo "RESULT: WARN: No matches on \"$p\". maybe typo or something changed?"
continue
fi
ev=("${ev[@]}" "${x[@]}")
done
OPT_EXCLUDE=(${ev[@]})
OPT_INCLUDE=(${iv[@]})
debug "Path: ${OPT_PATH[@]}"
debug "Lang: $OPT_LANG"
debug "Artifacts dir: $OPT_ARTIFACTS_DIR"
debug "Exclude: ${#OPT_EXCLUDE[@]}: ${OPT_EXCLUDE[@]}"
debug "Include: ${#OPT_INCLUDE[@]}: ${OPT_INCLUDE[@]}"
contains() {
local e match="$1"
shift
for e; do [[ "$e" == "$match" ]] && return 1; done
return 0
}
debug "Check language coverage"
set +f
for p in ${OPT_PATH[@]}; do
for i in `find $p -regex '.*/*\.\(t1\)?\(ttf\)?\(otf\)?\(ttc\)?\(pcf.*\)?\(pfa\)?'`; do
set -f
debug "$i"
if test -f $i; then
n=`basename $i`
set +e
contains "$n" "${OPT_EXCLUDE[@]}"
ret=$?
set -e
if [ $ret -eq 1 ]; then
debug "ignoring $i"
continue
fi
if [ ${#OPT_INCLUDE[@]} -ne 0 ]; then
set +e
contains "$n" "${OPT_INCLUDE[@]}"
ret=$?
set -e
if [ $ret -eq 0 ]; then
debug "$i isn't targeted file"
continue
fi
NOT_MATCHED=("${NOT_MATCHED[@]/$n}")
fi
debug " $i"
res=`fc-validate -l $OPT_LANG $i`
if echo $res | grep -q Missing; then
echo "RESULT: FAIL: $i doesn't satisfy $OPT_LANG language coverage."
else
echo "RESULT: PASS: $i satisfy $OPT_LANG language coverage."
fi
fi
done
done

View File

@ -0,0 +1,4 @@
---
dependencies:
- role: str-common-init

View File

@ -0,0 +1,40 @@
---
- block:
- name: language coverage
script: run-lang-coverage-test --lang "{{ item }}" {% if coverage.values is not defined or coverage[item].path_prefix is not defined %} --path {{ path_prefix }} {% else %} {{ '--path "' + (coverage[item].path_prefix | join('" --path "')) + '"' }} {% endif %} --artifactsdir "{{ remote_artifacts }}" {{ "" if coverage.values is not defined or coverage[item].name is not defined else "--name " + coverage[item].name }} {{ "" if coverage.values is not defined or coverage[item].exclude is not defined else '--exclude "' + (coverage[item].exclude | join('" --exclude "')) + '"'}} {{ "" if coverage.values is not defined or coverage[item].include is not defined else '--include "' + (coverage[item].include | join('" --include "')) + '"'}}
with_items:
- "{{ coverage if coverage.keys is not defined else coverage.keys()|list }}"
- name: generic family assignment
when: families is defined
script: run-family-test --lang {{ item.lang }} --family '{{ item.family }}' --alias {{ item.alias }} --artifactsdir {{ remote_artifacts }} --package {{ package if item.package is not defined else item.package }}
with_items:
- "{{ families }}"
- name: Check the results
shell: |
log="{{ remote_artifacts }}/test.log"
if [ ! -f "$log" ]; then
echo ERROR
echo "Test results not found." 1>&2
elif grep ^ERROR "$log" 1>&2; then
echo ERROR
elif grep ^FAIL "$log" 1>&2; then
echo FAIL
elif grep -q ^PASS "$log"; then
echo PASS
else
echo ERROR
echo "No test results found." 1>&2
fi
register: test_results
- name: Set role result
set_fact:
role_result: "{{ test_results.stdout }}"
role_message: "{{ test_results.stderr|d('test execution error.') }}"
role_result_failed: "{{ test_results.stdout != 'PASS' }}"
role_result_msg: "{{ test_results.stderr|d('test execution error.') }}"
- include_role:
name: str-common-final

463
tests/tests.yml Normal file
View File

@ -0,0 +1,463 @@
- hosts: localhost
tags:
- classic
roles:
- role: custom-test-fonts
required_packages:
- google-noto-kufi-arabic-fonts
- google-noto-naskh-arabic-fonts
- google-noto-naskh-arabic-ui-fonts
- google-noto-sans-fonts
- google-noto-sans-ui-fonts
- google-noto-sans-armenian-fonts
- google-noto-sans-avestan-fonts
- google-noto-sans-balinese-fonts
- google-noto-sans-bamum-fonts
- google-noto-sans-batak-fonts
- google-noto-sans-bengali-fonts
- google-noto-sans-bengali-ui-fonts
- google-noto-sans-brahmi-fonts
- google-noto-sans-buginese-fonts
- google-noto-sans-buhid-fonts
- google-noto-sans-canadian-aboriginal-fonts
- google-noto-sans-carian-fonts
- google-noto-sans-cham-fonts
- google-noto-sans-cherokee-fonts
- google-noto-sans-coptic-fonts
- google-noto-sans-cuneiform-fonts
- google-noto-sans-cypriot-fonts
- google-noto-sans-deseret-fonts
- google-noto-sans-devanagari-fonts
- google-noto-sans-devanagari-ui-fonts
- google-noto-sans-egyptian-hieroglyphs-fonts
- google-noto-sans-ethiopic-fonts
- google-noto-sans-georgian-fonts
- google-noto-sans-glagolitic-fonts
- google-noto-sans-gothic-fonts
- google-noto-sans-gujarati-fonts
- google-noto-sans-gujarati-ui-fonts
- google-noto-sans-gurmukhi-fonts
- google-noto-sans-gurmukhi-ui-fonts
- google-noto-sans-hanunoo-fonts
- google-noto-sans-hebrew-fonts
- google-noto-sans-imperial-aramaic-fonts
- google-noto-sans-inscriptional-pahlavi-fonts
- google-noto-sans-inscriptional-parthian-fonts
- google-noto-sans-javanese-fonts
- google-noto-sans-kaithi-fonts
- google-noto-sans-kannada-fonts
- google-noto-sans-kannada-ui-fonts
- google-noto-sans-kayah-li-fonts
- google-noto-sans-kharoshthi-fonts
- google-noto-sans-khmer-fonts
- google-noto-sans-khmer-ui-fonts
- google-noto-sans-lao-fonts
- google-noto-sans-lao-ui-fonts
- google-noto-sans-lepcha-fonts
- google-noto-sans-limbu-fonts
- google-noto-sans-linear-b-fonts
- google-noto-sans-lisu-fonts
- google-noto-sans-lycian-fonts
- google-noto-sans-lydian-fonts
- google-noto-sans-malayalam-fonts
- google-noto-sans-malayalam-ui-fonts
- google-noto-sans-mandaic-fonts
- google-noto-sans-meetei-mayek-fonts
- google-noto-sans-mongolian-fonts
- google-noto-sans-myanmar-fonts
- google-noto-sans-myanmar-ui-fonts
- google-noto-sans-new-tai-lue-fonts
- google-noto-sans-nko-fonts
- google-noto-sans-ogham-fonts
- google-noto-sans-ol-chiki-fonts
- google-noto-sans-old-italic-fonts
- google-noto-sans-old-persian-fonts
- google-noto-sans-old-south-arabian-fonts
- google-noto-sans-old-turkic-fonts
- google-noto-sans-osmanya-fonts
- google-noto-sans-phags-pa-fonts
- google-noto-sans-phoenician-fonts
- google-noto-sans-rejang-fonts
- google-noto-sans-runic-fonts
- google-noto-sans-shavian-fonts
- google-noto-sans-samaritan-fonts
- google-noto-sans-saurashtra-fonts
- google-noto-sans-sinhala-fonts
- google-noto-sans-sundanese-fonts
- google-noto-sans-syloti-nagri-fonts
- google-noto-sans-symbols-fonts
- google-noto-sans-syriac-eastern-fonts
- google-noto-sans-syriac-estrangela-fonts
- google-noto-sans-syriac-western-fonts
- google-noto-sans-tagalog-fonts
- google-noto-sans-tagbanwa-fonts
- google-noto-sans-tai-le-fonts
- google-noto-sans-tai-tham-fonts
- google-noto-sans-tai-viet-fonts
- google-noto-sans-tamil-fonts
- google-noto-sans-tamil-ui-fonts
- google-noto-sans-telugu-fonts
- google-noto-sans-telugu-ui-fonts
- google-noto-sans-thaana-fonts
- google-noto-sans-thai-fonts
- google-noto-sans-thai-ui-fonts
- google-noto-sans-tifinagh-fonts
- google-noto-sans-ugaritic-fonts
- google-noto-sans-vai-fonts
- google-noto-sans-yi-fonts
- google-noto-serif-fonts
- google-noto-serif-armenian-fonts
- google-noto-serif-georgian-fonts
- google-noto-serif-khmer-fonts
- google-noto-serif-lao-fonts
- google-noto-serif-thai-fonts
- google-noto-sans-oriya-fonts
- google-noto-sans-oriya-ui-fonts
- google-noto-sans-tibetan-fonts
- google-noto-nastaliq-urdu-fonts
- google-noto-mono-fonts
- google-noto-serif-bengali-fonts
- google-noto-serif-devanagari-fonts
- google-noto-serif-gujarati-fonts
- google-noto-serif-kannada-fonts
- google-noto-serif-malayalam-fonts
- google-noto-serif-tamil-fonts
- google-noto-serif-telugu-fonts
coverage:
ar:
path_prefix:
- /usr/share/fonts/google-noto
include:
- Noto[A-Za-z]*Arabic.*-*[^VF]*.*tf
bn:
path_prefix:
- /usr/share/fonts/google-noto
include:
- NotoSansBengali-*[^VF]*.*tf
bo:
path_prefix:
- /usr/share/fonts/google-noto
include:
- NotoSansTibetan-*[^VF]*.*tf
chr:
path_prefix:
- /usr/share/fonts/google-noto
include:
- NotoSansCherokee-*[^VF]*.*tf
gu:
path_prefix:
- /usr/share/fonts/google-noto
include:
- NotoSansGujarati-*[^VF]*.*tf
- NotoSansGujaratiUI-*[^VF]*.*tf
- NotoSerifGujarati-*[^VF]*.*tf
hi:
path_prefix:
- /usr/share/fonts/google-noto
include:
- NotoSansDevanagari-*[^VF]*.*tf
- NotoSansDevanagariUI-*[^VF]*.*tf
- NotoSerifDevanagari-*[^VF]*.*tf
he:
path_prefix:
- /usr/share/fonts/google-noto
include:
- NotoSansHebrew-*[^VF]*.*tf
hy:
path_prefix:
- /usr/share/fonts/google-noto
include:
- NotoSansArmenian-*[^VF]*.*tf
- NotoSerifArmenian-*[^VF]*.*tf
ka:
path_prefix:
- /usr/share/fonts/google-noto
include:
- NotoSansGeorgian-*[^VF]*.*tf
- NotoSerifGeorgian-*[^VF]*.*tf
kn:
path_prefix:
- /usr/share/fonts/google-noto
include:
- NotoSansKannada-*[^VF]*.*tf
- NotoSansKannadaUI-*[^VF]*.*tf
- NotoSerifKannada-*[^VF]*.*tf
km:
path_prefix:
- /usr/share/fonts/google-noto
include:
- NotoSansKhmer-*[^VF]*.*tf
- NotoSansKhmerUI-*[^VF]*.*tf
- NotoSerifKhmer-*[^VF]*.*tf
lo:
path_prefix:
- /usr/share/fonts/google-noto
include:
- NotoSansLao-*[^VF]*.*tf
- NotoSansLaoUI-*[^VF]*.*tf
- NotoSerifLao-*[^VF]*.*tf
ml:
path_prefix:
- /usr/share/fonts/google-noto
include:
- NotoSansMalayalam-*[^VF]*.*tf
- NotoSansMalayalamUI-*[^VF]*.*tf
- NotoSerifMalayalam-*[^VF]*.*tf
pa:
path_prefix:
- /usr/share/fonts/google-noto
include:
- NotoSansGurmukhi-*[^VF]*.*tf
- NotoSansGurmukhiUI-*[^VF]*.*tf
si:
path_prefix:
- /usr/share/fonts/google-noto
include:
- NotoSansSinhala-*[^VF]*.*tf
ta:
path_prefix:
- /usr/share/fonts/google-noto
include:
- NotoSansTamil-*[^VF]*.*tf
- NotoSansTamilUI-*[^VF]*.*tf
- NotoSerifTamil-*[^VF]*.*tf
th:
path_prefix:
- /usr/share/fonts/google-noto
include:
- NotoSansThai-*[^VF]*.*tf
- NotoSansThaiUI-*[^VF]*.*tf
- NotoSerifThai-*[^VF]*.*tf
families:
- lang: si
package: google-noto-sans-sinhala-fonts
alias: sans-serif
family: Noto Sans Sinhala
- lang: ar
package: google-noto-kufi-arabic-fonts
alias: cursive
family: Noto Kufi Arabic
- lang: ar
package: google-noto-naskh-arabic-ui-fonts
alias: cursive
family: Noto Naskh Arabic UI
- lang: ar
package: google-noto-naskh-arabic-fonts
alias: cursive
family: Noto Naskh Arabic
- lang: ur
package: google-noto-nastaliq-urdu-fonts
alias: cursive
family: Noto Nastaliq Urdu
- lang: hy
package: google-noto-sans-armenian-fonts
alias: sans-serif
family: Noto Sans Armenian
- lang: bn
package: google-noto-sans-bengali-ui-fonts
alias: sans-serif
family: Noto Sans Bengali UI
- lang: bn
package: google-noto-sans-bengali-fonts
alias: sans-serif
family: Noto Sans Bengali
- lang: iu
package: google-noto-sans-canadian-aboriginal-fonts
alias: sans-serif
family: Noto Sans Canadian Aboriginal
- lang: chr
package: google-noto-sans-cherokee-fonts
alias: sans-serif
family: Noto Sans Cherokee
- lang: hi
package: google-noto-sans-devanagari-ui-fonts
alias: sans-serif
family: Noto Sans Devanagari UI
- lang: hi
package: google-noto-sans-devanagari-fonts
alias: sans-serif
family: Noto Sans Devanagari
- lang: am
package: google-noto-sans-ethiopic-fonts
alias: sans-serif
family: Noto Sans Ethiopic
- lang: ka
package: google-noto-sans-georgian-fonts
alias: sans-serif
family: Noto Sans Georgian
- lang: gu
package: google-noto-sans-gujarati-ui-fonts
alias: sans-serif
family: Noto Sans Gujarati UI
- lang: gu
package: google-noto-sans-gujarati-fonts
alias: sans-serif
family: Noto Sans Gujarati
- lang: pa
package: google-noto-sans-gurmukhi-ui-fonts
alias: sans-serif
family: Noto Sans Gurmukhi
- lang: pa
package: google-noto-sans-gurmukhi-fonts
alias: sans-serif
family: Noto Sans Gurmukhi
- lang: he
package: google-noto-sans-hebrew-fonts
alias: sans-serif
family: Noto Sans Hebrew
- lang: kn
package: google-noto-sans-kannada-ui-fonts
alias: sans-serif
family: Noto Sans Kannada UI
- lang: kn
package: google-noto-sans-kannada-fonts
alias: sans-serif
family: Noto Sans Kannada
- lang: km
package: google-noto-sans-khmer-ui-fonts
alias: sans-serif
family: Noto Sans Khmer UI
- lang: km
package: google-noto-sans-khmer-fonts
alias: sans-serif
family: Noto Sans Khmer
- lang: lo
package: google-noto-sans-lao-ui-fonts
alias: sans-serif
family: Noto Sans Lao UI
- lang: lo
package: google-noto-sans-lao-fonts
alias: sans-serif
family: Noto Sans Lao
- lang: lo
package: google-noto-sans-lisu-fonts
alias: sans-serif
family: Noto Sans Lao
- lang: ml
package: google-noto-sans-malayalam-ui-fonts
alias: sans-serif
family: Noto Sans Malayalam UI
- lang: ml
package: google-noto-sans-malayalam-fonts
alias: sans-serif
family: Noto Sans Malayalam
- lang: mn-cn
package: google-noto-sans-mongolian-fonts
alias: sans-serif
family: Noto Sans Mongolian
- lang: my
package: google-noto-sans-myanmar-ui-fonts
alias: sans-serif
family: Noto Sans Myanmar UI
- lang: my
package: google-noto-sans-myanmar-fonts
alias: sans-serif
family: Noto Sans Myanmar
- lang: nqo
package: google-noto-sans-nko-fonts
alias: sans-serif
family: Noto Sans NKo
- lang: or
package: google-noto-sans-oriya-ui-fonts
alias: sans-serif
family: Noto Sans Oriya UI
- lang: or
package: google-noto-sans-oriya-fonts
alias: sans-serif
family: Noto Sans Oriya
- lang: syr
package: google-noto-sans-syriac-eastern-fonts
alias: sans-serif
family: Noto Sans Syriac Eastern
- lang: syr
package: google-noto-sans-syriac-estrangela-fonts
alias: sans-serif
family: Noto Sans Syriac Estrangela
- lang: syr
package: google-noto-sans-syriac-western-fonts
alias: sans-serif
family: Noto Sans Syriac Western
- lang: ta
package: google-noto-sans-tamil-ui-fonts
alias: sans-serif
family: Noto Sans Tamil UI
- lang: ta
package: google-noto-sans-tamil-fonts
alias: sans-serif
family: Noto Sans Tamil
- lang: te
package: google-noto-sans-telugu-ui-fonts
alias: sans-serif
family: Noto Sans Telugu UI
- lang: te
package: google-noto-sans-telugu-fonts
alias: sans-serif
family: Noto Sans Telugu
- lang: dv
package: google-noto-sans-thaana-fonts
alias: sans-serif
family: Noto Sans Thaana
- lang: th
package: google-noto-sans-thai-ui-fonts
alias: sans-serif
family: Noto Sans Thai UI
- lang: th
package: google-noto-sans-thai-fonts
alias: sans-serif
family: Noto Sans Thai
- lang: bo
package: google-noto-sans-tibetan-fonts
alias: sans-serif
family: Noto Sans Tibetan
- lang: ber-ma
package: google-noto-sans-tifinagh-fonts
alias: sans-serif
family: Noto Sans Tifinagh
- lang: hy
package: google-noto-serif-armenian-fonts
alias: serif
family: Noto Serif Armenian
- lang: bn
package: google-noto-serif-bengali-fonts
alias: serif
family: Noto Serif Bengali
- lang: hi
package: google-noto-serif-devanagari-fonts
alias: serif
family: Noto Serif Devanagari
- lang: ka
package: google-noto-serif-georgian-fonts
alias: serif
family: Noto Serif Georgian
- lang: gu
package: google-noto-serif-gujarati-fonts
alias: serif
family: Noto Serif Gujarati
- lang: kn
package: google-noto-serif-kannada-fonts
alias: serif
family: Noto Serif Kannada
- lang: km
package: google-noto-serif-khmer-fonts
alias: serif
family: Noto Serif Khmer
- lang: lo
package: google-noto-serif-lao-fonts
alias: serif
family: Noto Serif Lao
- lang: ml
package: google-noto-serif-malayalam-fonts
alias: serif
family: Noto Serif Malayalam
- lang: ta
package: google-noto-serif-tamil-fonts
alias: serif
family: Noto Serif Tamil
- lang: te
package: google-noto-serif-telugu-fonts
alias: serif
family: Noto Serif Telugu
- lang: th
package: google-noto-serif-thai-fonts
alias: serif
family: Noto Serif Thai