diff --git a/Dockerfile b/Dockerfile
index 0e9fd36..ed0295a 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -25,12 +25,16 @@ LABEL org.opencontainers.image.revision="$OCI_REVISION" \
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
ca-certificates \
+ fonts-croscore \
+ fonts-crosextra-caladea \
+ fonts-crosextra-carlito \
fonts-dejavu-core \
fonts-dejavu-extra \
fonts-freefont-ttf \
fonts-liberation \
fonts-liberation-sans-narrow \
fonts-noto-core \
+ fonts-noto-cjk \
fonts-noto-color-emoji \
fonts-ubuntu \
fonts-urw-base35 \
diff --git a/tests/check.sh b/tests/check.sh
index f09ef5a..9d5603f 100755
--- a/tests/check.sh
+++ b/tests/check.sh
@@ -8,9 +8,6 @@ grep -q 'Xvfb :99' docker-entrypoint.sh
! grep -q -- '--headless' docker-entrypoint.sh
grep -q -- '--no-sandbox' docker-entrypoint.sh
grep -q 'TCP-LISTEN:' docker-entrypoint.sh
-for package in fonts-dejavu-core fonts-dejavu-extra fonts-freefont-ttf fonts-liberation fonts-liberation-sans-narrow fonts-noto-core fonts-noto-color-emoji fonts-ubuntu fonts-urw-base35; do
- grep -q " $package \\\\" Dockerfile
-done
grep -q 'git.ipao.vip/rogee/fingerprint-chromium' .gitea/workflows/publish.yml
grep -q 'ghcr.io/rogeecn/fingerprint-chromium' .github/workflows/publish.yml
grep -q 'packages: write' .gitea/workflows/publish.yml
@@ -33,3 +30,55 @@ DOCKER_LOG="$docker_log" OCI_REVISION=test PUSH=true PATH="$tmpdir:$PATH" \
./scripts/build.sh registry.example/fingerprint-chromium > "$tmpdir/output"
test "$(cat "$docker_log")" = "manifest inspect registry.example/fingerprint-chromium:1.2.3.4"
grep -q 'skipping build and push' "$tmpdir/output"
+
+font_packages=(
+ fonts-croscore
+ fonts-crosextra-caladea
+ fonts-crosextra-carlito
+ fonts-dejavu-core
+ fonts-dejavu-extra
+ fonts-freefont-ttf
+ fonts-liberation
+ fonts-liberation-sans-narrow
+ fonts-noto-cjk
+ fonts-noto-color-emoji
+ fonts-noto-core
+ fonts-ubuntu
+ fonts-urw-base35
+)
+
+version="$(curl --fail --location --retry 3 --silent --show-error \
+ https://api.github.com/repos/adryfish/fingerprint-chromium/releases/latest \
+ | jq -er '.tag_name | select(test("^[0-9]+(\\.[0-9]+){3}$"))')"
+image="fingerprint-chromium-test:$version"
+CHROME_VERSION="$version" ./scripts/build.sh fingerprint-chromium-test
+
+docker run --rm --entrypoint dpkg-query "$image" --show "${font_packages[@]}" >/dev/null
+
+docker run --rm --entrypoint sh "$image" -c '
+ for font do
+ fc-match --format "%{family}\n" "$font" | grep -Fq "$font"
+ done
+' sh Arimo Tinos Cousine Caladea Carlito \
+ 'Noto Sans CJK JP' 'Noto Sans CJK SC' 'Noto Sans CJK TC' \
+ 'Noto Serif CJK JP' 'Noto Serif CJK SC' 'Noto Serif CJK TC'
+
+probe() {
+ local platform="$1" threshold="$2" output count
+ output="$(docker run --rm \
+ --volume "$PWD/tests/font-probe.html:/tmp/font-probe.html:ro" \
+ --entrypoint /opt/chromium/chrome "$image" \
+ --no-sandbox --headless=new --disable-gpu --disable-dev-shm-usage \
+ --fingerprint=1000 --fingerprint-platform="$platform" \
+ --dump-dom "file:///tmp/font-probe.html#$platform" 2>/dev/null)"
+ count="$(sed -n 's/.*data-count="\([0-9][0-9]*\)".*/\1/p' <<<"$output")"
+ [[ "$count" =~ ^[0-9]+$ && "$count" -ge "$threshold" ]] || {
+ printf '%s font probe: expected >= %s, got %s\n' "$platform" "$threshold" "${count:-none}" >&2
+ return 1
+ }
+ printf '%s font probe: %s\n' "$platform" "$count"
+}
+
+probe windows 22
+probe macos 24
+probe linux 27
diff --git a/tests/font-probe.html b/tests/font-probe.html
new file mode 100644
index 0000000..b8f81ec
--- /dev/null
+++ b/tests/font-probe.html
@@ -0,0 +1,47 @@
+
+
+