Deriving the tray's implicit size from childrenRect fed layout results back into the bindings that produced them, tripping implicitWidth binding loop warnings. Compute it from the active and inactive blocks' own implicit sizes instead, and center the loaded blocks rather than anchor-filling containers that are sized by their content. The contract test now instantiates the tray to check the collapse/expand cycle and fails on any implicitWidth binding loop in the log. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
72 lines
1.9 KiB
Bash
Executable File
72 lines
1.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -euo pipefail
|
|
|
|
source "$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)/base-test.sh"
|
|
|
|
TMPDIR=""
|
|
QS_PID=""
|
|
|
|
cleanup() {
|
|
if [[ -n $QS_PID ]] && kill -0 "$QS_PID" 2>/dev/null; then
|
|
kill "$QS_PID" 2>/dev/null || true
|
|
wait "$QS_PID" 2>/dev/null || true
|
|
fi
|
|
[[ -n $TMPDIR && -d $TMPDIR ]] && rm -rf "$TMPDIR"
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
if ! command -v quickshell >/dev/null 2>&1; then
|
|
pass "quickshell not installed; skipping QML contract test"
|
|
exit 0
|
|
fi
|
|
|
|
require_command jq
|
|
|
|
TMPDIR=$(mktemp -d)
|
|
result="$TMPDIR/result.json"
|
|
log="$TMPDIR/quickshell.log"
|
|
config_dir="$TMPDIR/indicator-contract"
|
|
mkdir -p "$config_dir" "$TMPDIR/home"
|
|
cp "$SHELL_TEST_DIR/fixtures/indicator-contract/shell.qml" "$config_dir/shell.qml"
|
|
ln -s "$ROOT/shell/Ui" "$config_dir/Ui"
|
|
ln -s "$ROOT/shell/Commons" "$config_dir/Commons"
|
|
|
|
OMARCHY_PATH="$ROOT" \
|
|
OMARCHY_QML_TEST_RESULT="$result" \
|
|
HOME="$TMPDIR/home" \
|
|
QML2_IMPORT_PATH="$ROOT/shell${QML2_IMPORT_PATH:+:$QML2_IMPORT_PATH}" \
|
|
QML_IMPORT_PATH="$ROOT/shell${QML_IMPORT_PATH:+:$QML_IMPORT_PATH}" \
|
|
PATH="$ROOT/bin:$PATH" \
|
|
quickshell -p "$config_dir" --no-color >"$log" 2>&1 &
|
|
QS_PID=$!
|
|
|
|
for _ in {1..50}; do
|
|
[[ -s $result ]] && break
|
|
if ! kill -0 "$QS_PID" 2>/dev/null; then
|
|
sed -n '1,160p' "$log" >&2
|
|
fail "QML contract quickshell exited before writing result"
|
|
fi
|
|
sleep 0.1
|
|
done
|
|
|
|
[[ -s $result ]] || {
|
|
sed -n '1,160p' "$log" >&2
|
|
fail "QML contract test timed out"
|
|
}
|
|
|
|
if ! jq -e '.ok == true' "$result" >/dev/null; then
|
|
printf 'QML contract result:\n' >&2
|
|
jq . "$result" >&2
|
|
printf 'QML contract log:\n' >&2
|
|
sed -n '1,160p' "$log" >&2
|
|
fail "QML indicator contract checks pass"
|
|
fi
|
|
|
|
if rg -q 'Indicators.qml.*Binding loop detected for property "implicitWidth"' "$log"; then
|
|
sed -n '1,200p' "$log" >&2
|
|
fail "indicator tray avoids implicit-width binding loops"
|
|
fi
|
|
|
|
pass "QML indicator contract checks pass"
|