chore: close wasm status contract work
This commit is contained in:
71
wasm-port/tools/verify_task_status_json_contract.sh
Executable file
71
wasm-port/tools/verify_task_status_json_contract.sh
Executable file
@@ -0,0 +1,71 @@
|
||||
#!/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'
|
||||
Reference in New Issue
Block a user