first commit
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
package tui
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestParseGitStatusDirtyCount(t *testing.T) {
|
||||
// Sample `git status --porcelain -b` output: header + 4 entries (staged,
|
||||
// modified, deleted, untracked).
|
||||
out := "## master...origin/master [ahead 4, behind 1]\n" +
|
||||
"M cmd/pigo/main.go\n" +
|
||||
" M internal/foo.go\n" +
|
||||
"D cmd/pigo/run.go\n" +
|
||||
"?? new_file.go\n"
|
||||
|
||||
info := parseGitStatus(out)
|
||||
if !info.ok {
|
||||
t.Fatal("parseGitStatus should report ok=true")
|
||||
}
|
||||
if info.branch != "master" {
|
||||
t.Errorf("branch = %q, want master", info.branch)
|
||||
}
|
||||
if info.dirty != 4 {
|
||||
t.Errorf("dirty = %d, want 4", info.dirty)
|
||||
}
|
||||
if info.ahead != 4 {
|
||||
t.Errorf("ahead = %d, want 4", info.ahead)
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseGitStatusCleanTree(t *testing.T) {
|
||||
out := "## main...origin/main\n"
|
||||
info := parseGitStatus(out)
|
||||
if !info.ok {
|
||||
t.Fatal("ok should be true")
|
||||
}
|
||||
if info.branch != "main" {
|
||||
t.Errorf("branch = %q, want main", info.branch)
|
||||
}
|
||||
if info.dirty != 0 {
|
||||
t.Errorf("dirty = %d, want 0", info.dirty)
|
||||
}
|
||||
if info.ahead != 0 {
|
||||
t.Errorf("ahead = %d, want 0", info.ahead)
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseGitStatusNoUpstream(t *testing.T) {
|
||||
out := "## feature-x\n M a.go\n"
|
||||
info := parseGitStatus(out)
|
||||
if info.branch != "feature-x" {
|
||||
t.Errorf("branch = %q, want feature-x", info.branch)
|
||||
}
|
||||
if info.ahead != 0 {
|
||||
t.Errorf("ahead = %d, want 0", info.ahead)
|
||||
}
|
||||
if info.dirty != 1 {
|
||||
t.Errorf("dirty = %d, want 1", info.dirty)
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseGitStatusDetached(t *testing.T) {
|
||||
out := "## HEAD (no branch)\n"
|
||||
info := parseGitStatus(out)
|
||||
if info.branch != "HEAD (no branch)" {
|
||||
t.Errorf("branch = %q, want %q", info.branch, "HEAD (no branch)")
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseBranchHeaderAhead(t *testing.T) {
|
||||
branch, ahead := parseBranchHeader("## dev...origin/dev [ahead 12]")
|
||||
if branch != "dev" {
|
||||
t.Errorf("branch = %q, want dev", branch)
|
||||
}
|
||||
if ahead != 12 {
|
||||
t.Errorf("ahead = %d, want 12", ahead)
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseBranchHeaderBehindOnly(t *testing.T) {
|
||||
branch, ahead := parseBranchHeader("## dev...origin/dev [behind 3]")
|
||||
if branch != "dev" {
|
||||
t.Errorf("branch = %q, want dev", branch)
|
||||
}
|
||||
if ahead != 0 {
|
||||
t.Errorf("ahead = %d, want 0 (behind only)", ahead)
|
||||
}
|
||||
}
|
||||
|
||||
func TestFetchGitCmdNonRepo(t *testing.T) {
|
||||
// A path that is not a git repository should collapse to ok=false. /tmp is
|
||||
// (almost) never a repo; if it somehow is on this host, skip.
|
||||
msg := fetchGitCmd("/")()
|
||||
git, ok := msg.(gitInfoMsg)
|
||||
if !ok {
|
||||
t.Fatalf("expected gitInfoMsg, got %T", msg)
|
||||
}
|
||||
if git.ok {
|
||||
t.Skip("host root unexpectedly reports a git repo; skipping")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user