72 lines
2.2 KiB
Bash
Executable File
72 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
|
TASK_WRAPPER="$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp"
|
|
SDK="$ROOT_DIR/runtime/sdk/src/linuxcnc-task-hal.js"
|
|
|
|
fail() {
|
|
printf 'task_status_json_contract_status=fail\n'
|
|
printf 'task_status_json_contract_error=%s\n' "$1"
|
|
exit 1
|
|
}
|
|
|
|
require_text() {
|
|
local label="$1"
|
|
local file="$2"
|
|
local text="$3"
|
|
grep -Fq "$text" "$file" || fail "$label missing"
|
|
printf 'task_status_json_contract_%s=ok\n' "$label"
|
|
}
|
|
|
|
reject_text() {
|
|
local label="$1"
|
|
local file="$2"
|
|
local text="$3"
|
|
if grep -Fq "$text" "$file"; then
|
|
fail "$label present"
|
|
fi
|
|
printf 'task_status_json_contract_%s=absent\n' "$label"
|
|
}
|
|
|
|
if ! command -v emcc >/dev/null 2>&1 && [[ -f "$HOME/emsdk/emsdk_env.sh" ]]; then
|
|
# shellcheck source=/dev/null
|
|
source "$HOME/emsdk/emsdk_env.sh" >/dev/null
|
|
fi
|
|
|
|
if ! command -v emcc >/dev/null 2>&1; then
|
|
printf 'task_status_json_contract_status=skipped_missing_emcc\n'
|
|
printf 'nativeTaskReady=false\n'
|
|
printf 'nativeHalSyncReady=false\n'
|
|
exit 0
|
|
fi
|
|
|
|
if [[ "${SKIP_TASK_HAL_BUILD:-0}" != "1" ]]; then
|
|
"$ROOT_DIR/tools/build_task_hal_wasm.sh"
|
|
fi
|
|
|
|
node "$ROOT_DIR/tests/wasm/node/verify_task_status_json_contract.mjs"
|
|
|
|
require_text schema_version "$TASK_WRAPPER" 'schemaVersion'
|
|
require_text standalone_status_source "$TASK_WRAPPER" 'statusSource'
|
|
require_text traj_object "$TASK_WRAPPER" 'traj'
|
|
require_text task_line_fields "$TASK_WRAPPER" 'currentLine'
|
|
require_text axis_array "$TASK_WRAPPER" 'axis_status_array_json'
|
|
require_text joint_array "$TASK_WRAPPER" 'joint_status_array_json'
|
|
require_text io_aux "$TASK_WRAPPER" 'aux'
|
|
require_text io_tool "$TASK_WRAPPER" 'tool'
|
|
require_text io_coolant "$TASK_WRAPPER" 'coolant'
|
|
|
|
read_status_body="$(
|
|
awk '/int lctask_read_status_json/{capture=1} capture{print} capture && /^}/{exit}' "$TASK_WRAPPER"
|
|
)"
|
|
if grep -Fq 'lcmot_read_status_json' <<<"$read_status_body"; then
|
|
fail "lctask_read_status_json calls lcmot_read_status_json"
|
|
fi
|
|
printf 'task_status_json_contract_status_read_no_motion_json=ok\n'
|
|
|
|
reject_text sdk_no_motion_semantics "$SDK" "queueFull"
|
|
reject_text sdk_no_task_semantics "$SDK" "interpState"
|
|
|
|
printf 'task_status_json_contract_status=ok\n'
|