Skip to content

Commit 0f3eb40

Browse files
committed
feat: add handler test
1 parent 8fbf54b commit 0f3eb40

File tree

3 files changed

+95
-4
lines changed

3 files changed

+95
-4
lines changed

ci.sh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#!/usr/bin/env bash
2+
3+
golangci-lint run --fix
4+
go fmt ./...

handler/handler.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -150,10 +150,7 @@ func (sh *SessionHandler) NewSession() error {
150150
func (sh *SessionHandler) sessionExists(sessionName string) bool {
151151
cmd := sh.newTmuxCmd("tmux", "has-session", "-t", sessionName)
152152
cmd.Stderr = io.Discard
153-
if err := cmd.Run(); err == nil {
154-
return true
155-
}
156-
return false
153+
return cmd.Run() == nil
157154
}
158155

159156
func (sh *SessionHandler) attach(sessionName string) error {

handler/handler_test.go

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package handler
2+
3+
import (
4+
"errors"
5+
"fmt"
6+
"os"
7+
"path/filepath"
8+
"testing"
9+
)
10+
11+
func TestParseConfig(t *testing.T) {
12+
t.Parallel()
13+
tmpRoot := t.TempDir()
14+
project1Name, project2Name := "project1", "project2"
15+
projectDir1 := filepath.Join(tmpRoot, project1Name)
16+
projectDir2 := filepath.Join(tmpRoot, project2Name)
17+
projects := []string{projectDir1, projectDir2}
18+
os.Mkdir(projectDir1, 0755)
19+
os.Mkdir(projectDir2, 0755)
20+
21+
configContent := fmt.Sprintf("default=%s", tmpRoot)
22+
23+
tmpConfigFile := filepath.Join(tmpRoot, ".tmux-sessionizer")
24+
if err := os.WriteFile(tmpConfigFile, []byte(configContent), 0644); err != nil {
25+
t.Errorf("failed to write config file: %v", err)
26+
}
27+
28+
sh := &SessionHandler{}
29+
cfg, err := sh.parseConfig(tmpConfigFile)
30+
if err != nil {
31+
t.Errorf("failed to parse config file: %v", err)
32+
}
33+
34+
if len(cfg.projects) != len(projects) {
35+
t.Errorf("expected %v projects, but got %v", len(projects), len(cfg.projects))
36+
}
37+
wantNames := map[string]bool{project1Name: true, project2Name: true}
38+
for _, p := range cfg.projects {
39+
if !wantNames[p.name] {
40+
t.Errorf("unexpected project: %+v", p)
41+
}
42+
}
43+
}
44+
45+
func TestExpandPath(t *testing.T) {
46+
t.Parallel()
47+
type args struct {
48+
relative string
49+
}
50+
51+
tests := []struct {
52+
name string
53+
args args
54+
want string
55+
wantErr error
56+
}{
57+
{
58+
name: "home directory case",
59+
args: args{
60+
relative: "~/hoge/fuga",
61+
},
62+
/* I don't care about windows, sorry.*/
63+
want: os.Getenv("HOME") + "/hoge/fuga",
64+
wantErr: nil,
65+
},
66+
{
67+
name: "complex relative path case",
68+
args: args{
69+
relative: "~/puga/hoge/../../fuga",
70+
},
71+
want: os.Getenv("HOME") + "/fuga",
72+
wantErr: nil,
73+
},
74+
}
75+
for _, tt := range tests {
76+
tt := tt
77+
t.Run(tt.name, func(t *testing.T) {
78+
t.Parallel()
79+
sh := SessionHandler{}
80+
got, err := sh.expandPath(tt.args.relative)
81+
if err != nil && !errors.Is(err, tt.wantErr) {
82+
t.Errorf("failed to expand path: %v.", err)
83+
return
84+
}
85+
if got != tt.want {
86+
t.Errorf("failed to expandPath. expected: %v, but got %v", tt.want, got)
87+
}
88+
})
89+
}
90+
}

0 commit comments

Comments
 (0)