diff --git a/Dockerfile b/Dockerfile index 18766b3..ed0295a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -25,8 +25,19 @@ 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 \ libasound2t64 \ libatk-bridge2.0-0t64 \ libatk1.0-0t64 \ diff --git a/tests/check.sh b/tests/check.sh index d6200a8..c6d413f 100755 --- a/tests/check.sh +++ b/tests/check.sh @@ -30,3 +30,59 @@ 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 sh "$image" -c ' + for package do + test "$(dpkg-query -W -f="\${Status}" "$package" 2>/dev/null)" = "install ok installed" || exit 1 + done +' sh "${font_packages[@]}" + +docker run --rm --entrypoint sh "$image" -c ' + for font do + fc-match --format "%{family}\n" "$font" | grep -Fq "$font" || exit 1 + 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 -i --entrypoint sh "$image" -c ' + cat >/tmp/font-probe.html + exec /opt/chromium/chrome --no-sandbox --headless=new --disable-gpu --disable-dev-shm-usage \ + --fingerprint=1000 --fingerprint-platform="$1" \ + --dump-dom "file:///tmp/font-probe.html#$1" + ' sh "$platform" /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 @@ + + +