#!/usr/bin/env bats
# 単体: state.sh の busy/idle 遷移と冪等性(T010, FR-008/009)。
# 実行: bats cc-tmux/tests/unit/test_state.bats
load '../test_helper'
setup() {
setup_state_dir
. "$CC_TMUX_LIB/state.sh"
SID="unit-state-$$"
}
teardown() {
teardown_state_dir
}
@test "state_init は idle で初期化する" {
run state_init "$SID"
[ "$status" -eq 0 ]
run state_get "$SID"
[ "$output" = "idle" ]
}
@test "state_set busy/idle が反映される" {
state_init "$SID"
state_set "$SID" busy
[ "$(state_get "$SID")" = "busy" ]
state_set "$SID" idle
[ "$(state_get "$SID")" = "idle" ]
}
@test "不正な状態値は拒否される" {
state_init "$SID"
run state_set "$SID" bogus
[ "$status" -ne 0 ]
}
@test "state_init は既存 state を保持する(冪等)" {
state_init "$SID"
state_set "$SID" busy
state_init "$SID" # 二度目
[ "$(state_get "$SID")" = "busy" ]
}
@test "meta の upsert(同一キー置換)" {
state_init "$SID"
state_meta_set "$SID" name "first"
[ "$(state_meta "$SID" name)" = "first" ]
state_meta_set "$SID" name "second"
[ "$(state_meta "$SID" name)" = "second" ]
}
@test "複数 meta キーが共存する" {
state_init "$SID"
state_meta_set "$SID" tmux_pane "%3"
state_meta_set "$SID" window_id "@1"
[ "$(state_meta "$SID" tmux_pane)" = "%3" ]
[ "$(state_meta "$SID" window_id)" = "@1" ]
}
@test "state_cleanup でディレクトリ削除" {
state_init "$SID"
dir=$(cc_state_dir "$SID")
[ -d "$dir" ]
state_cleanup "$SID"
[ ! -d "$dir" ]
}
@test "stale pane cleanup は keep を残し他を消す" {
state_init "$SID"; state_meta_set "$SID" tmux_pane "%9"
state_init "orphan-$$"; state_meta_set "orphan-$$" tmux_pane "%9"
state_cleanup_stale_pane "%9" "$SID"
[ -d "$(cc_state_dir "$SID")" ]
[ ! -d "$(cc_state_dir "orphan-$$")" ]
}