Skip to content

Commit aa259eb

Browse files
committed
add test for dir
1 parent 8c316ce commit aa259eb

File tree

6 files changed

+113
-39
lines changed

6 files changed

+113
-39
lines changed

commands/commands.go

+1-9
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package commands
22

33
import (
4-
"github.com/shota3506/gtree/entry"
54
"github.com/shota3506/gtree/state"
65
)
76

@@ -36,16 +35,9 @@ func (c CommandResize) Do(st state.State) (state.State, error) {
3635
type CommandSelect struct{}
3736

3837
func (c CommandSelect) Do(st state.State) (state.State, error) {
39-
e, err := st.Get()
38+
err := st.Toggle()
4039
if err != nil {
4140
return nil, err
4241
}
43-
44-
if d, ok := e.(*entry.Dir); ok {
45-
err := d.Toggle()
46-
if err != nil {
47-
return nil, err
48-
}
49-
}
5042
return st, nil
5143
}

entry/entry.go

-13
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,6 @@ func (d *Dir) IsDir() bool {
9292
}
9393

9494
func (d *Dir) Size() int {
95-
if !d.IsOpen() {
96-
return 1
97-
}
9895
var size int
9996
_ = d.Walk(func(e Entry) error { // never return error
10097
size += 1
@@ -119,16 +116,6 @@ func (d *Dir) Close() {
119116
d.open = false
120117
}
121118

122-
func (d *Dir) Toggle() error {
123-
var err error
124-
if d.IsOpen() {
125-
d.Close()
126-
} else {
127-
err = d.Open()
128-
}
129-
return err
130-
}
131-
132119
func (d *Dir) IsOpen() bool {
133120
return d.open
134121
}

entry/entry_test.go

+93-8
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ testdata
1313
├── a
1414
│   ├── b
1515
│   │   ├── sample4.txt
16-
│   │   └── sample6.txt
17-
│   ├── c
1816
│   │   └── sample5.txt
17+
│   ├── c
18+
│   │   └── sample6.txt
1919
│   └── sample3.txt
2020
├── sample1.txt
2121
└── sample2.txt
@@ -26,9 +26,7 @@ func TestFile(t *testing.T) {
2626
require.NoError(t, err)
2727

2828
require.Len(t, root.children, 3)
29-
c := root.children[1]
30-
31-
f, ok := c.(*File)
29+
f, ok := root.children[1].(*File)
3230
require.True(t, ok)
3331

3432
assert.Equal(t, "sample1.txt", f.String())
@@ -43,9 +41,7 @@ func TestDir(t *testing.T) {
4341
require.NoError(t, err)
4442

4543
require.Len(t, root.children, 3)
46-
c := root.children[0]
47-
48-
d, ok := c.(*Dir)
44+
d, ok := root.children[0].(*Dir)
4945
require.True(t, ok)
5046

5147
assert.Equal(t, "a", d.String())
@@ -54,3 +50,92 @@ func TestDir(t *testing.T) {
5450
assert.Equal(t, 1, d.Size())
5551
assert.Equal(t, 1, d.Depth())
5652
}
53+
54+
func TestDirOpenAndClose(t *testing.T) {
55+
root, err := NewRoot("testdata", false)
56+
require.NoError(t, err)
57+
58+
require.Len(t, root.children, 3)
59+
da, ok := root.children[0].(*Dir)
60+
require.True(t, ok)
61+
assert.Equal(t, 1, da.Depth())
62+
assert.False(t, da.IsOpen())
63+
64+
// open ./testdata/a
65+
err = da.Open()
66+
require.NoError(t, err)
67+
assert.True(t, da.IsOpen())
68+
assert.Equal(t, 4, da.Size())
69+
70+
require.Len(t, da.children, 3)
71+
db, ok := da.children[0].(*Dir)
72+
require.True(t, ok)
73+
assert.Equal(t, 2, db.Depth())
74+
assert.False(t, db.IsOpen())
75+
76+
// open ./testdata/a/b
77+
err = db.Open()
78+
require.NoError(t, err)
79+
assert.True(t, db.IsOpen())
80+
assert.Equal(t, 3, db.Size())
81+
assert.Equal(t, 6, da.Size())
82+
83+
require.Len(t, db.children, 2)
84+
assert.Equal(t, 3, db.children[0].Depth())
85+
assert.Equal(t, 3, db.children[1].Depth())
86+
87+
// close ./testdata/a/b
88+
db.Close()
89+
assert.False(t, db.IsOpen())
90+
assert.Equal(t, 1, db.Size())
91+
assert.Equal(t, 4, da.Size())
92+
93+
// close ./testdata/a
94+
da.Close()
95+
assert.False(t, da.IsOpen())
96+
assert.Equal(t, 1, da.Size())
97+
}
98+
99+
func TestDirGet(t *testing.T) {
100+
t.Run("found", func(t *testing.T) {
101+
root, err := NewRoot("testdata", false)
102+
require.NoError(t, err)
103+
104+
e, err := root.Get(3)
105+
require.NoError(t, err)
106+
require.NotNil(t, e)
107+
assert.Equal(t, "sample2.txt", e.String())
108+
})
109+
110+
t.Run("not found", func(t *testing.T) {
111+
root, err := NewRoot("testdata", false)
112+
require.NoError(t, err)
113+
114+
_, err = root.Get(4)
115+
require.Error(t, err)
116+
})
117+
118+
t.Run("open", func(t *testing.T) {
119+
root, err := NewRoot("testdata", false)
120+
require.NoError(t, err)
121+
122+
e, err := root.Get(1)
123+
require.NoError(t, err)
124+
d, ok := e.(*Dir)
125+
require.True(t, ok)
126+
127+
// open ./testdata/a
128+
err = d.Open()
129+
require.NoError(t, err)
130+
131+
e, err = root.Get(3)
132+
require.NoError(t, err)
133+
require.NotNil(t, e)
134+
assert.Equal(t, "c", e.String())
135+
136+
e, err = root.Get(4)
137+
require.NoError(t, err)
138+
require.NotNil(t, e)
139+
assert.Equal(t, "sample3.txt", e.String())
140+
})
141+
}
File renamed without changes.
File renamed without changes.

state/state.go

+19-9
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ import (
99
type State interface {
1010
View() views.CellModel
1111
Root() *entry.Dir
12-
Get() (entry.Entry, error)
1312
Up()
1413
Down()
1514
SetSize(width, height int)
15+
Toggle() error
1616
}
1717

1818
type state struct {
@@ -37,14 +37,6 @@ func (s *state) Root() *entry.Dir {
3737
return s.root
3838
}
3939

40-
func (st *state) Get() (entry.Entry, error) {
41-
e, err := st.Root().Get(st.pos)
42-
if err != nil {
43-
return nil, err
44-
}
45-
return e, err
46-
}
47-
4840
func (st *state) Up() {
4941
if st.pos > 0 {
5042
st.pos -= 1
@@ -68,6 +60,24 @@ func (st *state) SetSize(width, height int) {
6860
st.adjust()
6961
}
7062

63+
func (st *state) Toggle() error {
64+
e, err := st.Root().Get(st.pos)
65+
if err != nil {
66+
return err
67+
}
68+
69+
if d, ok := e.(*entry.Dir); ok {
70+
if d.IsOpen() {
71+
d.Close()
72+
} else {
73+
if err = d.Open(); err != nil {
74+
return err
75+
}
76+
}
77+
}
78+
return nil
79+
}
80+
7181
func (st *state) adjust() {
7282
if st.pos < st.offset {
7383
st.offset = st.pos

0 commit comments

Comments
 (0)