aboutsummaryrefslogtreecommitdiff
path: root/scripts/tests/statusline-command.bats
blob: 6a8725ac014c42d61be46d9962c679cfacaf0fbc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/usr/bin/env bats
# .claude/statusline-command.sh — Claude Code status line mirroring the zsh
# prompt: [yy-mm-dd HH:MM:SS] user host:~/path on <branch>

setup() {
    REPO_ROOT="$(cd "$(dirname "$BATS_TEST_FILENAME")/../.." && pwd)"
    SCRIPT="$REPO_ROOT/.claude/statusline-command.sh"
    TMPDIR_T="$(mktemp -d)"
}

teardown() {
    rm -rf "$TMPDIR_T"
}

run_statusline() {
    printf '{"cwd":"%s"}' "$1" | sh "$SCRIPT"
}

@test "statusline renders date, user, host, and tilde-abbreviated cwd" {
    dir="$HOME/.cache"
    run run_statusline "$dir"
    [ "$status" -eq 0 ]
    host="$(uname -n)"
    user="$(whoami)"
    [[ "$output" =~ ^\[[0-9]{2}-[0-9]{2}-[0-9]{2}\ [0-9]{2}:[0-9]{2}:[0-9]{2}\]\ $user\ $host:~/\.cache$ ]]
}

@test "statusline appends the git branch inside a repo" {
    git -C "$TMPDIR_T" init -q -b trunk
    run run_statusline "$TMPDIR_T"
    [ "$status" -eq 0 ]
    [[ "$output" == *" on trunk" ]]
}

@test "statusline omits the branch part outside a git repo" {
    mkdir -p "$TMPDIR_T/plain"
    run run_statusline "$TMPDIR_T/plain"
    [ "$status" -eq 0 ]
    [[ "$output" != *" on "* ]]
}

@test "statusline leaves a cwd outside HOME unabbreviated" {
    run run_statusline "/tmp"
    [ "$status" -eq 0 ]
    [[ "$output" == *":/tmp" ]]
}

@test "statusline emits no stderr noise" {
    err="$(printf '{"cwd":"%s"}' "$HOME" | sh "$SCRIPT" 2>&1 >/dev/null)"
    [ -z "$err" ]
}