shift-shell/tests/check-dynamic-tiles-motion.sh

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

76 lines
3.4 KiB
Bash
Raw Normal View History

2026-05-19 07:46:34 +00:00
#!/usr/bin/env bash
# SPDX-FileCopyrightText: 2026 Marco Allegretti <mightymarco4@gmail.com>
# SPDX-License-Identifier: GPL-2.0-or-later
set -euo pipefail
repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
effect_qml="$repo_root/kwin/effects/shift-tile-preview/contents/ui/main.qml"
effect_metadata="$repo_root/kwin/effects/shift-tile-preview/metadata.json"
effects_cmake="$repo_root/kwin/effects/CMakeLists.txt"
tiling_script="$repo_root/kwin/scripts/shift-tiling/contents/ui/main.qml"
env_config="$repo_root/envmanager/config.h"
require_line() {
local file="$1"
local needle="$2"
if ! grep -Fq -- "$needle" "$file"; then
echo "Missing dynamic tile motion invariant in ${file#$repo_root/}: $needle" >&2
exit 1
fi
}
reject_line() {
local file="$1"
local needle="$2"
if grep -Fq -- "$needle" "$file"; then
echo "Rejected dynamic tile motion pattern in ${file#$repo_root/}: $needle" >&2
exit 1
fi
}
require_line "$effects_cmake" "add_kwin_effect(shift-tile-preview shift-tile-preview)"
require_line "$effect_metadata" '"Id": "shift-tile-preview"'
require_line "$effect_metadata" '"X-Plasma-API": "declarativescript"'
require_line "$env_config" '{"shift-tilingEnabled", convergenceModeEnabled}'
require_line "$env_config" '{"shift-tile-previewEnabled", convergenceModeEnabled}'
require_line "$env_config" '"shift-tile-preview"'
require_line "$env_config" '"shift-tiling"'
require_line "$effect_qml" "KWinComponents.SceneEffect"
require_line "$effect_qml" "ShellSettings.Settings.dynamicTilingEnabled"
require_line "$effect_qml" "interactiveMoveResizeStarted.connect"
require_line "$effect_qml" "interactiveMoveResizeStepped.connect"
require_line "$effect_qml" "interactiveMoveResizeFinished.connect"
require_line "$effect_qml" "Behavior on x"
require_line "$effect_qml" "Behavior on y"
require_line "$effect_qml" "Behavior on width"
require_line "$effect_qml" "Behavior on height"
require_line "$effect_qml" "showPreview(\"insert\""
require_line "$effect_qml" "showPreview(\"float\""
require_line "$effect_qml" "showPreview(\"restore\""
2026-05-19 08:00:43 +00:00
require_line "$effect_qml" "readonly property real insertIntentDeadZone: 0.18"
require_line "$effect_qml" "if (Math.abs(fromCenterX) < insertIntentDeadZone && Math.abs(fromCenterY) < insertIntentDeadZone)"
2026-05-19 07:46:34 +00:00
2026-05-19 07:55:25 +00:00
require_line "$tiling_script" "readonly property real stablePrimaryRatio: 0.58"
2026-05-19 08:00:43 +00:00
require_line "$tiling_script" "readonly property real insertIntentDeadZone: 0.18"
2026-05-19 07:55:25 +00:00
require_line "$tiling_script" "function orderedWindowsForScreen(outputName)"
require_line "$tiling_script" "function buildStableStack(windows, startIndex)"
require_line "$tiling_script" "function buildStableLayout(windows)"
require_line "$tiling_script" "function setStableLayout(outputName, windows)"
require_line "$tiling_script" "setStableLayout(outputName, windows)"
require_line "$tiling_script" "setStableLayout(outputName, remaining)"
2026-05-19 08:00:43 +00:00
require_line "$tiling_script" "retileScreen(name)"
require_line "$tiling_script" "retileScreen(targetName)"
require_line "$tiling_script" "if (Math.abs(fromCenterX) < insertIntentDeadZone && Math.abs(fromCenterY) < insertIntentDeadZone)"
2026-05-19 07:55:25 +00:00
reject_line "$tiling_script" "targetKey = lastLeafKey(rootNode)"
reject_line "$tiling_script" "setScreenLayout(outputName, splitLeaf(rootNode, targetKey"
2026-05-19 07:46:34 +00:00
reject_line "$tiling_script" "KWinComponents.Workspace.showOutline(dragOutlineRect)"
reject_line "$tiling_script" "KWinComponents.Workspace.hideOutline()"
printf '%s\n' 'dynamic-tiles-motion-ok'