Remove old "acceptance tests" (#11086)

We haven't used or run these in forever (literally like 3+ years).
They're just wasting cognitive space and confuse some users as to what
they're for. Remove them.
This commit is contained in:
Mitchell Hashimoto
2026-02-28 14:45:16 -08:00
committed by GitHub
37 changed files with 3 additions and 366 deletions

View File

@@ -1,66 +0,0 @@
#--------------------------------------------------------------------
# Alacritty since it has no build in Ubuntu
#--------------------------------------------------------------------
FROM rust AS alacritty
RUN apt-get update && apt-get install -y \
cmake pkg-config libfreetype6-dev libfontconfig1-dev \
libxcb-xfixes0-dev python3 git
RUN git clone https://github.com/alacritty/alacritty.git /tmp/alacritty
WORKDIR /tmp/alacritty
RUN git checkout tags/$(git describe --tags $(git rev-list --tags --max-count=1))
RUN RUSTFLAGS='-C link-arg=-s' cargo build --release
#--------------------------------------------------------------------
# Wraptest
#--------------------------------------------------------------------
FROM ubuntu:22.04 AS wraptest
RUN apt-get update && apt-get install -y \
build-essential git
RUN git clone https://github.com/mattiase/wraptest.git /tmp/wraptest
WORKDIR /tmp/wraptest
RUN gcc -o wraptest wraptest.c
#--------------------------------------------------------------------
# Main Runner
#--------------------------------------------------------------------
# Note: we used to use Alpine, but we need to use an OS that is more
# glibc friendly because on Linux we still require glibc (active todo to
# support musl).
FROM ubuntu:22.04
# Base deps
RUN apt-get update && apt-get install -y \
fonts-inconsolata \
i3 \
imagemagick \
libgl1-mesa-dev \
libxcursor1 \
patchelf \
software-properties-common \
xdotool \
xvfb \
vttest
# Terminals
RUN apt-get install -y \
xterm
RUN rm -rf /var/lib/apt/lists/*
COPY --from=alacritty /tmp/alacritty/target/release/alacritty /usr/bin/alacritty
COPY --from=wraptest /tmp/wraptest/wraptest /usr/bin/wraptest
COPY ./run.sh /entrypoint.sh
COPY ./ghostty /usr/bin/ghostty
ENTRYPOINT ["/bin/bash"]

View File

@@ -1,40 +1,4 @@
# Acceptance Testing
# Test Utilities
This directory contains an acceptance test suite for ghostty. This works
by running the terminal emulator within a windowing environment, capturing a
screenshot, and comparing results. We use this to visually verify that
all rendering conforms to what we expect.
This test suite can also execute alternate terminal emulators so that we
can easily compare outputs between them.
## Running a Single Test
To run a single test, use the `run-host.sh` script. This must be executed
from this directory. Example:
```shell-session
$ ./run-host.sh --exec xterm --case /src/cases/vttest/launch.sh
```
The `--case` flag uses `/src` as the root for this directory.
The `--update` flag can be used to update the screenshot in place. This
should be used to gather a new screenshot. If you want to compare to the old
screenshot, copy the old one or use git to revert.
## Running the Full Suite
**Warning:** This can take a long time and isn't recommended. The CI
environment automatically runs the full test suite and is the recommended
approach.
To run the full test suite against all terminal emulators, use the
`run-all.sh` script. This optionally takes an `--exec` parameter to run
the full test suite against only a single terminal emulator.
## Modifying the `ghostty` Binary
This test suite expects the `ghostty` binary to be in _this directory_.
You can manually copy it into place. Each time you modify the binary, you
must rebuild the Docker image.
This directory contains anything related to testing Ghostty that doesn't
fit within the standard Zig testing framework alongside the source.

View File

@@ -1,7 +0,0 @@
function test_do {
xdotool type "vttest"
xdotool key Return
sleep 1
xdotool type "1"
xdotool key Return
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

View File

@@ -1,9 +0,0 @@
function test_do {
xdotool type "vttest"
xdotool key Return
sleep 1
xdotool type "1"
xdotool key Return
sleep 0.5
xdotool key Return
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

View File

@@ -1,11 +0,0 @@
function test_do {
xdotool type "vttest"
xdotool key Return
sleep 1
xdotool type "1"
xdotool key Return
sleep 0.5
xdotool key Return
sleep 0.5
xdotool key Return
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

View File

@@ -1,13 +0,0 @@
function test_do {
xdotool type "vttest"
xdotool key Return
sleep 1
xdotool type "1"
xdotool key Return
sleep 0.5
xdotool key Return
sleep 0.5
xdotool key Return
sleep 0.5
xdotool key Return
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

View File

@@ -1,15 +0,0 @@
function test_do {
xdotool type "vttest"
xdotool key Return
sleep 1
xdotool type "1"
xdotool key Return
sleep 0.5
xdotool key Return
sleep 0.5
xdotool key Return
sleep 0.5
xdotool key Return
sleep 0.5
xdotool key Return
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

View File

@@ -1,17 +0,0 @@
function test_do {
xdotool type "vttest"
xdotool key Return
sleep 1
xdotool type "1"
xdotool key Return
sleep 0.5
xdotool key Return
sleep 0.5
xdotool key Return
sleep 0.5
xdotool key Return
sleep 0.5
xdotool key Return
sleep 0.5
xdotool key Return
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

View File

@@ -1,4 +0,0 @@
function test_do {
xdotool type "vttest"
xdotool key Return
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

View File

@@ -1,4 +0,0 @@
function test_do {
xdotool type "wraptest"
xdotool key Return
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

View File

@@ -1,23 +0,0 @@
#!/usr/bin/env bash
#
# Run all of the test cases. All test cases are found by traversing
# the "cases" directory, finding all shell files, and executing the
# "./run-host.sh" command for each.
DIR=$(cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd)
# We always copy the bin in case it was rebuilt
cp ${DIR}/../zig-out/bin/ghostty ${DIR}/
# Unix shortcut to just execute ./run-host for each one. We can do
# this less esoterically if we ever wanted.
find ${DIR}/cases \
-type f \
-name '*.sh' | \
sort | \
parallel \
--will-cite \
${DIR}/run-host.sh \
--case '{}' \
--rewrite-abs-path \
"$@"

View File

@@ -1,16 +0,0 @@
#!/usr/bin/env bash
#
# This runs a single test case from the host (not from Docker itself). The
# arguments are the same as run.sh but this wraps it in docker.
DIR=$(cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd)
IMAGE=$(docker build --file ${DIR}/Dockerfile -q ${DIR})
docker run \
--init \
--rm \
-v ${DIR}:/src \
--entrypoint "xvfb-run" \
$IMAGE \
--server-args="-screen 0, 1600x900x24" \
/entrypoint.sh "$@"

View File

@@ -1,142 +0,0 @@
#!/usr/bin/env bash
#
# This script runs a given test case and captures a screenshot. This script
# expects to run in the Docker image so it just captures the full screen rather
# than a specific window.
#
# This script also compares the output to the expected value. The expected
# value is the case file with ".png" appended. If the "--update" flag is
# appended, the test case is updated.
#--------------------------------------------------------------------
# Helpers
function has_func() {
declare -f -F $1 > /dev/null
return $?
}
# Colors
export BOLD="\\e[1m"
export RED="\\e[1;31m"
export GREEN="\\e[1;32m"
export YELLOW="\\e[1;33m"
export WHITE="\\e[1;37m"
export RESET="\\e[0;39m"
#--------------------------------------------------------------------
# Flag parsing
ARG_REWRITE=0
ARG_UPDATE=0
while [[ "$#" -gt 0 ]]; do
case $1 in
-e|--exec) ARG_EXEC="$2"; shift ;;
-c|--case) ARG_CASE="$2"; shift ;;
-o|--output) ARG_OUT="$2"; shift ;;
-u|--update) ARG_UPDATE=1 ;;
--rewrite-abs-path) ARG_REWRITE=1 ;;
*) echo "Unknown parameter passed: $1"; exit 1 ;;
esac
shift
done
# Rewrite the path to be valid for us. This regex can be fooled in many ways
# but its good enough for my PC (mitchellh) and CI. Contributors feel free
# to harden it.
if [ "$ARG_REWRITE" -eq 1 ]; then
ARG_CASE=$(echo $ARG_CASE | sed -e 's/.*cases/\/src\/cases/')
fi
# If we're updating, then just update the file in-place
GOLDEN_OUT="${ARG_CASE}.${ARG_EXEC}.png"
ARG_OUT="${ARG_CASE}.${ARG_EXEC}.actual.png"
if [ "$ARG_UPDATE" -eq 1 ]; then ARG_OUT=$GOLDEN_OUT; fi
bad=0
if [ -z "$ARG_EXEC" ]; then bad=1; fi
if [ -z "$ARG_CASE" ]; then bad=1; fi
if [ -z "$ARG_OUT" ]; then bad=1; fi
if [ $bad -ne 0 ]; then
echo "Usage: run.sh --exec <terminal> --case <path to case> --output <path to png>"
exit 1
fi
# Load our test case
# shellcheck disable=SC1090
source ${ARG_CASE}
if ! has_func "test_do"; then
echo "Test case is invalid."
exit 1
fi
# NOTE: This is a huge hack right now.
if [ "$ARG_EXEC" = "ghostty" ]; then
ARG_EXEC="/tmp/ghostty";
# Copy so we don't read/write race when running in parallel
cp /src/ghostty ${ARG_EXEC}
# We build in Nix (maybe). To be sure, we replace the interpreter so
# it doesn't point to a Nix path. If we don't build in Nix, this should
# still be safe.
patchelf --set-interpreter /lib/ld-linux-"$(uname -m)".so.1 ${ARG_EXEC}
fi
#--------------------------------------------------------------------
# Some terminals require XDG be properly setup. We create a new
# set of XDG directories for this.
export XDG_BASE_DIR="/work/xdg"
export XDG_RUNTIME_DIR="${XDG_BASE_DIR}/runtime"
mkdir -p ${XDG_BASE_DIR} ${XDG_RUNTIME_DIR}
chmod 0700 $XDG_RUNTIME_DIR
# Configure i3
cat <<EOF >${XDG_BASE_DIR}/i3.cfg
# i3 config file (v4)
exec ${ARG_EXEC}
bar {
mode invisible
}
EOF
#--------------------------------------------------------------------
printf "${RESET}${BOLD}[$(basename $ARG_EXEC)]${RESET} $ARG_CASE ... ${RESET}"
# Start up the program under test by launching i3. We use i3 so we can
# more carefully control the window settings, test resizing, etc.
WM_LOG="${XDG_BASE_DIR}/wm.log"
i3 -c ${XDG_BASE_DIR}/i3.cfg >${WM_LOG} 2>&1 &
# Wait for startup
# TODO: we can probably use xdotool or wmctrl or something to detect if any
# windows actually launched and make error handling here better.
sleep 2
# Run our test case (should be defined in test case file)
test_do
# Sleep a second to let it render
sleep 1
# Uncomment this and use run-host.sh to get logs of the terminal emulator
# cat $WM_LOG
import -window root ${ARG_OUT}
DIFF=$(compare -metric AE ${ARG_OUT} ${GOLDEN_OUT} null: 2>&1)
if [ $? -eq 2 ] ; then
printf "${RED}ERROR${RESET}\n"
exit 1
else
if [ $DIFF -gt 0 ]; then
printf "${RED}Fail (Diff: ${WHITE}${DIFF}${RED})${RESET}\n"
exit 1
else
printf "${GREEN}Pass (Diff: ${WHITE}${DIFF}${GREEN})${RESET}\n"
fi
fi