nekolas note
1.8 KB Raw
#!/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-$$")" ]
}