summaryrefslogtreecommitdiffstats
path: root/pkg/gui/filetree/file_manager_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/gui/filetree/file_manager_test.go')
-rw-r--r--pkg/gui/filetree/file_manager_test.go91
1 files changed, 91 insertions, 0 deletions
diff --git a/pkg/gui/filetree/file_manager_test.go b/pkg/gui/filetree/file_manager_test.go
new file mode 100644
index 000000000..038c03364
--- /dev/null
+++ b/pkg/gui/filetree/file_manager_test.go
@@ -0,0 +1,91 @@
+package filetree
+
+import (
+ "testing"
+
+ "github.com/jesseduffield/lazygit/pkg/commands/models"
+ "github.com/stretchr/testify/assert"
+)
+
+func TestRender(t *testing.T) {
+ scenarios := []struct {
+ name string
+ root *FileNode
+ collapsedPaths map[string]bool
+ expected []string
+ }{
+ {
+ name: "nil node",
+ root: nil,
+ expected: []string{},
+ },
+ {
+ name: "leaf node",
+ root: &FileNode{
+ Path: "",
+ Children: []*FileNode{
+ {File: &models.File{Name: "test", ShortStatus: " M", HasStagedChanges: true}, Path: "test"},
+ },
+ },
+ expected: []string{" M test"},
+ },
+ {
+ name: "big example",
+ root: &FileNode{
+ Path: "",
+ Children: []*FileNode{
+ {
+ Path: "dir1",
+ Children: []*FileNode{
+ {
+ File: &models.File{Name: "dir1/file2", ShortStatus: "M ", HasUnstagedChanges: true},
+ Path: "dir1/file2",
+ },
+ {
+ File: &models.File{Name: "dir1/file3", ShortStatus: "M ", HasUnstagedChanges: true},
+ Path: "dir1/file3",
+ },
+ },
+ },
+ {
+ Path: "dir2",
+ Children: []*FileNode{
+ {
+ Path: "dir2/dir2",
+ Children: []*FileNode{
+ {
+ File: &models.File{Name: "dir2/dir2/file3", ShortStatus: " M", HasStagedChanges: true},
+ Path: "dir2/dir2/file3",
+ },
+ {
+ File: &models.File{Name: "dir2/dir2/file4", ShortStatus: "M ", HasUnstagedChanges: true},
+ Path: "dir2/dir2/file4",
+ },
+ },
+ },
+ {
+ File: &models.File{Name: "dir2/file5", ShortStatus: "M ", HasUnstagedChanges: true},
+ Path: "dir2/file5",
+ },
+ },
+ },
+ {
+ File: &models.File{Name: "file1", ShortStatus: "M ", HasUnstagedChanges: true},
+ Path: "file1",
+ },
+ },
+ },
+ expected: []string{"dir1 ►", "dir2 ▼", "├─ dir2 ▼", "│ ├─ M file3", "│ └─ M file4", "└─ M file5", "M file1"},
+ collapsedPaths: map[string]bool{"dir1": true},
+ },
+ }
+
+ for _, s := range scenarios {
+ s := s
+ t.Run(s.name, func(t *testing.T) {
+ mngr := &FileManager{tree: s.root, collapsedPaths: s.collapsedPaths}
+ result := mngr.Render("", nil)
+ assert.EqualValues(t, s.expected, result)
+ })
+ }
+}