From c9b1d3dd3cba7b2c691319490e6fd557fdff4367 Mon Sep 17 00:00:00 2001 From: Alex Goodman Date: Sun, 24 Jun 2018 12:49:47 -0400 Subject: [PATCH] remove root node from view; fix tests --- filetree/data_test.go | 2 +- filetree/node.go | 2 +- filetree/node_test.go | 47 +++++++------- filetree/tree.go | 9 ++- filetree/tree_test.go | 141 ++++++++++++++++++++---------------------- ui/filetreeview.go | 9 +-- 6 files changed, 99 insertions(+), 111 deletions(-) diff --git a/filetree/data_test.go b/filetree/data_test.go index 5c0c7e8..f107e30 100644 --- a/filetree/data_test.go +++ b/filetree/data_test.go @@ -6,7 +6,7 @@ import ( func TestAssignDiffType(t *testing.T) { tree := NewFileTree() - node, err := tree.AddPath("/usr", BlankFileChangeInfo("/usr")) + node, err := tree.AddPath("/usr", *BlankFileChangeInfo("/usr")) if err != nil { t.Errorf("Expected no error from fetching path. got: %v", err) } diff --git a/filetree/node.go b/filetree/node.go index 979ecf1..304b361 100644 --- a/filetree/node.go +++ b/filetree/node.go @@ -12,7 +12,7 @@ import ( ) const ( - AttributeFormat = "%s%s %10s %10s " + AttributeFormat = "%7s%1s %10s %10s " ) type FileNode struct { diff --git a/filetree/node_test.go b/filetree/node_test.go index 4ad1e78..bdc7c92 100644 --- a/filetree/node_test.go +++ b/filetree/node_test.go @@ -12,14 +12,14 @@ func TestAddChild(t *testing.T) { Path: "stufffffs", } - one := tree.Root.AddChild("first node!", &payload) + one := tree.Root.AddChild("first node!", payload) - two := tree.Root.AddChild("nil node!", nil) + two := tree.Root.AddChild("nil node!", FileInfo{}) - tree.Root.AddChild("third node!", nil) - two.AddChild("forth, one level down...", nil) - two.AddChild("fifth, one level down...", nil) - two.AddChild("fifth, one level down...", nil) + tree.Root.AddChild("third node!", FileInfo{}) + two.AddChild("forth, one level down...", FileInfo{}) + two.AddChild("fifth, one level down...", FileInfo{}) + two.AddChild("fifth, one level down...", FileInfo{}) expected, actual = 5, tree.Size if expected != actual { @@ -36,17 +36,14 @@ func TestAddChild(t *testing.T) { t.Errorf("Expected 'twos' number of children to be %d got %d.", expected, actual) } - expectedFC := &FileInfo{ + expectedFC := FileInfo{ Path: "stufffffs", } actualFC := one.Data.FileInfo - if *expectedFC != *actualFC { + if expectedFC.Path != actualFC.Path { t.Errorf("Expected 'ones' payload to be %+v got %+v.", expectedFC, actualFC) } - if two.Data.FileInfo != nil { - t.Errorf("Expected 'twos' payload to be nil got %+v.", two.Data.FileInfo) - } } @@ -54,11 +51,11 @@ func TestRemoveChild(t *testing.T) { var expected, actual int tree := NewFileTree() - tree.Root.AddChild("first", nil) - two := tree.Root.AddChild("nil", nil) - tree.Root.AddChild("third", nil) - forth := two.AddChild("forth", nil) - two.AddChild("fifth", nil) + tree.Root.AddChild("first", FileInfo{}) + two := tree.Root.AddChild("nil", FileInfo{}) + tree.Root.AddChild("third", FileInfo{}) + forth := two.AddChild("forth", FileInfo{}) + two.AddChild("fifth", FileInfo{}) forth.Remove() @@ -87,7 +84,7 @@ func TestRemoveChild(t *testing.T) { func TestPath(t *testing.T) { expected := "/etc/nginx/nginx.conf" tree := NewFileTree() - node, _ := tree.AddPath(expected, nil) + node, _ := tree.AddPath(expected, FileInfo{}) actual := node.Path() if expected != actual { @@ -97,8 +94,8 @@ func TestPath(t *testing.T) { func TestIsWhiteout(t *testing.T) { tree1 := NewFileTree() - p1, _ := tree1.AddPath("/etc/nginx/public1", nil) - p2, _ := tree1.AddPath("/etc/nginx/.wh.public2", nil) + p1, _ := tree1.AddPath("/etc/nginx/public1", FileInfo{}) + p2, _ := tree1.AddPath("/etc/nginx/.wh.public2", FileInfo{}) if p1.IsWhiteout() != false { t.Errorf("Expected Path '%s' to **not** be a whiteout file", p1.Name) @@ -111,15 +108,15 @@ func TestIsWhiteout(t *testing.T) { func TestDiffTypeFromAddedChildren(t *testing.T) { tree := NewFileTree() - node, _ := tree.AddPath("/usr", BlankFileChangeInfo("/usr")) + node, _ := tree.AddPath("/usr", *BlankFileChangeInfo("/usr")) node.Data.DiffType = Unchanged info1 := BlankFileChangeInfo("/usr/bin") - node, _ = tree.AddPath("/usr/bin", info1) + node, _ = tree.AddPath("/usr/bin", *info1) node.Data.DiffType = Added info2 := BlankFileChangeInfo("/usr/bin2") - node, _ = tree.AddPath("/usr/bin2", info2) + node, _ = tree.AddPath("/usr/bin2", *info2) node.Data.DiffType = Removed tree.Root.Children["usr"].deriveDiffType(Unchanged) @@ -130,14 +127,14 @@ func TestDiffTypeFromAddedChildren(t *testing.T) { } func TestDiffTypeFromRemovedChildren(t *testing.T) { tree := NewFileTree() - node, _ := tree.AddPath("/usr", BlankFileChangeInfo("/usr")) + node, _ := tree.AddPath("/usr", *BlankFileChangeInfo("/usr")) info1 := BlankFileChangeInfo("/usr/.wh.bin") - node, _ = tree.AddPath("/usr/.wh.bin", info1) + node, _ = tree.AddPath("/usr/.wh.bin", *info1) node.Data.DiffType = Removed info2 := BlankFileChangeInfo("/usr/.wh.bin2") - node, _ = tree.AddPath("/usr/.wh.bin2", info2) + node, _ = tree.AddPath("/usr/.wh.bin2", *info2) node.Data.DiffType = Removed tree.Root.Children["usr"].deriveDiffType(Unchanged) diff --git a/filetree/tree.go b/filetree/tree.go index 921cc1e..01e405f 100644 --- a/filetree/tree.go +++ b/filetree/tree.go @@ -32,7 +32,7 @@ func NewFileTree() (tree *FileTree) { return tree } -func (tree *FileTree) String() string { +func (tree *FileTree) String(showAttributes bool) string { var renderTreeLine func(string, []bool, bool, bool) string var walkTree func(*FileNode, []bool, int) string @@ -73,7 +73,10 @@ func (tree *FileTree) String() string { } last := idx == (len(node.Children) - 1) showCollapsed := child.Data.ViewInfo.Collapsed && len(child.Children) > 0 - result += child.MetadataString() + " " + renderTreeLine(child.String(), spaces, last, showCollapsed) + if showAttributes { + result += child.MetadataString() + " " + } + result += renderTreeLine(child.String(), spaces, last, showCollapsed) if len(child.Children) > 0 && !child.Data.ViewInfo.Collapsed { spacesChild := append(spaces, last) result += walkTree(child, spacesChild, depth+1) @@ -82,7 +85,7 @@ func (tree *FileTree) String() string { return result } - return "." + newLine + walkTree(tree.Root, []bool{}, 0) + return walkTree(tree.Root, []bool{}, 0) } func (tree *FileTree) Copy() *FileTree { diff --git a/filetree/tree_test.go b/filetree/tree_test.go index 283bd39..44b8e60 100644 --- a/filetree/tree_test.go +++ b/filetree/tree_test.go @@ -15,9 +15,6 @@ func stringInSlice(a string, list []string) bool { } func AssertDiffType(node *FileNode, expectedDiffType DiffType) error { - if node.Data.FileInfo == nil { - return fmt.Errorf("expected *FileInfo but got nil at Path %s", node.Path()) - } if node.Data.DiffType != expectedDiffType { return fmt.Errorf("Expecting node at %s to have DiffType %v, but had %v", node.Path(), expectedDiffType, node.Data.DiffType) } @@ -26,18 +23,18 @@ func AssertDiffType(node *FileNode, expectedDiffType DiffType) error { func TestPrintTree(t *testing.T) { tree := NewFileTree() - tree.Root.AddChild("first node!", nil) - two := tree.Root.AddChild("second node!", nil) - tree.Root.AddChild("third node!", nil) - two.AddChild("forth, one level down...", nil) + tree.Root.AddChild("first node!", FileInfo{}) + two := tree.Root.AddChild("second node!", FileInfo{}) + tree.Root.AddChild("third node!", FileInfo{}) + two.AddChild("forth, one level down...", FileInfo{}) - expected := `. -├── first node! + expected := +`├── first node! ├── second node! │ └── forth, one level down... └── third node! ` - actual := tree.String() + actual := tree.String(false) if expected != actual { t.Errorf("Expected tree string:\n--->%s<---\nGot:\n--->%s<---", expected, actual) @@ -47,15 +44,15 @@ func TestPrintTree(t *testing.T) { func TestAddPath(t *testing.T) { tree := NewFileTree() - tree.AddPath("/etc/nginx/nginx.conf", nil) - tree.AddPath("/etc/nginx/public", nil) - tree.AddPath("/var/run/systemd", nil) - tree.AddPath("/var/run/bashful", nil) - tree.AddPath("/tmp", nil) - tree.AddPath("/tmp/nonsense", nil) + tree.AddPath("/etc/nginx/nginx.conf", FileInfo{}) + tree.AddPath("/etc/nginx/public", FileInfo{}) + tree.AddPath("/var/run/systemd", FileInfo{}) + tree.AddPath("/var/run/bashful", FileInfo{}) + tree.AddPath("/tmp", FileInfo{}) + tree.AddPath("/tmp/nonsense", FileInfo{}) - expected := `. -├── etc + expected := +`├── etc │ └── nginx │ ├── nginx.conf │ └── public @@ -66,7 +63,7 @@ func TestAddPath(t *testing.T) { ├── bashful └── systemd ` - actual := tree.String() + actual := tree.String(false) if expected != actual { t.Errorf("Expected tree string:\n--->%s<---\nGot:\n--->%s<---", expected, actual) @@ -76,18 +73,18 @@ func TestAddPath(t *testing.T) { func TestRemovePath(t *testing.T) { tree := NewFileTree() - tree.AddPath("/etc/nginx/nginx.conf", nil) - tree.AddPath("/etc/nginx/public", nil) - tree.AddPath("/var/run/systemd", nil) - tree.AddPath("/var/run/bashful", nil) - tree.AddPath("/tmp", nil) - tree.AddPath("/tmp/nonsense", nil) + tree.AddPath("/etc/nginx/nginx.conf", FileInfo{}) + tree.AddPath("/etc/nginx/public", FileInfo{}) + tree.AddPath("/var/run/systemd", FileInfo{}) + tree.AddPath("/var/run/bashful", FileInfo{}) + tree.AddPath("/tmp", FileInfo{}) + tree.AddPath("/tmp/nonsense", FileInfo{}) tree.RemovePath("/var/run/bashful") tree.RemovePath("/tmp") - expected := `. -├── etc + expected := +`├── etc │ └── nginx │ ├── nginx.conf │ └── public @@ -95,7 +92,7 @@ func TestRemovePath(t *testing.T) { └── run └── systemd ` - actual := tree.String() + actual := tree.String(false) if expected != actual { t.Errorf("Expected tree string:\n--->%s<---\nGot:\n--->%s<---", expected, actual) @@ -111,20 +108,20 @@ func TestStack(t *testing.T) { tree1 := NewFileTree() - tree1.AddPath("/etc/nginx/public", nil) - tree1.AddPath(payloadKey, nil) - tree1.AddPath("/var/run/bashful", nil) - tree1.AddPath("/tmp", nil) - tree1.AddPath("/tmp/nonsense", nil) + tree1.AddPath("/etc/nginx/public", FileInfo{}) + tree1.AddPath(payloadKey, FileInfo{}) + tree1.AddPath("/var/run/bashful", FileInfo{}) + tree1.AddPath("/tmp", FileInfo{}) + tree1.AddPath("/tmp/nonsense", FileInfo{}) tree2 := NewFileTree() // add new files - tree2.AddPath("/etc/nginx/nginx.conf", nil) + tree2.AddPath("/etc/nginx/nginx.conf", FileInfo{}) // modify current files - tree2.AddPath(payloadKey, &payloadValue) + tree2.AddPath(payloadKey, payloadValue) // whiteout the following files - tree2.AddPath("/var/run/.wh.bashful", nil) - tree2.AddPath("/.wh.tmp", nil) + tree2.AddPath("/var/run/.wh.bashful", FileInfo{}) + tree2.AddPath("/.wh.tmp", FileInfo{}) err := tree1.Stack(tree2) @@ -132,8 +129,8 @@ func TestStack(t *testing.T) { t.Errorf("Could not stack refTrees: %v", err) } - expected := `. -├── etc + expected := +`├── etc │ └── nginx │ ├── nginx.conf │ └── public @@ -147,11 +144,11 @@ func TestStack(t *testing.T) { t.Errorf("Expected '%s' to still exist, but it doesn't", payloadKey) } - if *node.Data.FileInfo != payloadValue { + if node.Data.FileInfo.Path != payloadValue.Path { t.Errorf("Expected '%s' value to be %+v but got %+v", payloadKey, payloadValue, node.Data.FileInfo) } - actual := tree1.String() + actual := tree1.String(false) if expected != actual { t.Errorf("Expected tree string:\n--->%s<---\nGot:\n--->%s<---", expected, actual) @@ -161,18 +158,18 @@ func TestStack(t *testing.T) { func TestCopy(t *testing.T) { tree := NewFileTree() - tree.AddPath("/etc/nginx/nginx.conf", nil) - tree.AddPath("/etc/nginx/public", nil) - tree.AddPath("/var/run/systemd", nil) - tree.AddPath("/var/run/bashful", nil) - tree.AddPath("/tmp", nil) - tree.AddPath("/tmp/nonsense", nil) + tree.AddPath("/etc/nginx/nginx.conf", FileInfo{}) + tree.AddPath("/etc/nginx/public", FileInfo{}) + tree.AddPath("/var/run/systemd", FileInfo{}) + tree.AddPath("/var/run/bashful", FileInfo{}) + tree.AddPath("/tmp", FileInfo{}) + tree.AddPath("/tmp/nonsense", FileInfo{}) tree.RemovePath("/var/run/bashful") tree.RemovePath("/tmp") - expected := `. -├── etc + expected := +`├── etc │ └── nginx │ ├── nginx.conf │ └── public @@ -182,7 +179,7 @@ func TestCopy(t *testing.T) { ` NewFileTree := tree.Copy() - actual := NewFileTree.String() + actual := NewFileTree.String(false) if expected != actual { t.Errorf("Expected tree string:\n--->%s<---\nGot:\n--->%s<---", expected, actual) @@ -201,18 +198,14 @@ func TestCompareWithNoChanges(t *testing.T) { Typeflag: 1, MD5sum: [16]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, } - lowerTree.AddPath(value, &fakeData) - upperTree.AddPath(value, &fakeData) + lowerTree.AddPath(value, fakeData) + upperTree.AddPath(value, fakeData) } lowerTree.Compare(upperTree) asserter := func(n *FileNode) error { if n.Path() == "/" { return nil } - if n.Data.FileInfo == nil { - t.Errorf("Expected *FileInfo but got nil") - return fmt.Errorf("expected *FileInfo but got nil") - } if (n.Data.DiffType) != Unchanged { t.Errorf("Expecting node at %s to have DiffType unchanged, but had %v", n.Path(), n.Data.DiffType) } @@ -231,7 +224,7 @@ func TestCompareWithAdds(t *testing.T) { upperPaths := [...]string{"/etc", "/etc/sudoers", "/usr", "/etc/hosts", "/usr/bin", "/usr/bin/bash"} for _, value := range lowerPaths { - lowerTree.AddPath(value, &FileInfo{ + lowerTree.AddPath(value, FileInfo{ Path: value, Typeflag: 1, MD5sum: [16]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, @@ -239,7 +232,7 @@ func TestCompareWithAdds(t *testing.T) { } for _, value := range upperPaths { - upperTree.AddPath(value, &FileInfo{ + upperTree.AddPath(value, FileInfo{ Path: value, Typeflag: 1, MD5sum: [16]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, @@ -291,12 +284,12 @@ func TestCompareWithChanges(t *testing.T) { paths := [...]string{"/etc", "/usr", "/etc/hosts", "/etc/sudoers", "/usr/bin"} for _, value := range paths { - lowerTree.AddPath(value, &FileInfo{ + lowerTree.AddPath(value, FileInfo{ Path: value, Typeflag: 1, MD5sum: [16]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, }) - upperTree.AddPath(value, &FileInfo{ + upperTree.AddPath(value, FileInfo{ Path: value, Typeflag: 1, MD5sum: [16]byte{1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0}, @@ -348,7 +341,7 @@ func TestCompareWithRemoves(t *testing.T) { Typeflag: 1, MD5sum: [16]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, } - lowerTree.AddPath(value, &fakeData) + lowerTree.AddPath(value, fakeData) } for _, value := range upperPaths { @@ -357,7 +350,7 @@ func TestCompareWithRemoves(t *testing.T) { Typeflag: 1, MD5sum: [16]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, } - upperTree.AddPath(value, &fakeData) + upperTree.AddPath(value, fakeData) } lowerTree.Compare(upperTree) @@ -397,12 +390,12 @@ func TestCompareWithRemoves(t *testing.T) { func TestStackRange(t *testing.T) { tree := NewFileTree() - tree.AddPath("/etc/nginx/nginx.conf", nil) - tree.AddPath("/etc/nginx/public", nil) - tree.AddPath("/var/run/systemd", nil) - tree.AddPath("/var/run/bashful", nil) - tree.AddPath("/tmp", nil) - tree.AddPath("/tmp/nonsense", nil) + tree.AddPath("/etc/nginx/nginx.conf", FileInfo{}) + tree.AddPath("/etc/nginx/public", FileInfo{}) + tree.AddPath("/var/run/systemd", FileInfo{}) + tree.AddPath("/var/run/bashful", FileInfo{}) + tree.AddPath("/tmp", FileInfo{}) + tree.AddPath("/tmp/nonsense", FileInfo{}) tree.RemovePath("/var/run/bashful") tree.RemovePath("/tmp") @@ -418,7 +411,7 @@ func TestStackRange(t *testing.T) { Typeflag: 1, MD5sum: [16]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, } - lowerTree.AddPath(value, &fakeData) + lowerTree.AddPath(value, fakeData) } for _, value := range upperPaths { @@ -427,7 +420,7 @@ func TestStackRange(t *testing.T) { Typeflag: 1, MD5sum: [16]byte{1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0}, } - upperTree.AddPath(value, &fakeData) + upperTree.AddPath(value, fakeData) } trees := []*FileTree{lowerTree, upperTree, tree} StackRange(trees, 2) @@ -445,7 +438,7 @@ func TestRemoveOnIterate(t *testing.T) { Typeflag: 1, MD5sum: [16]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, } - node, err := tree.AddPath(value, &fakeData) + node, err := tree.AddPath(value, fakeData) if err == nil && stringInSlice(node.Path(), []string{"/etc"}) { node.Data.ViewInfo.Hidden = true } @@ -458,12 +451,12 @@ func TestRemoveOnIterate(t *testing.T) { return nil }, nil) - expected := `. -└── usr + expected := +`└── usr ├── bin └── something ` - actual := tree.String() + actual := tree.String(false) if expected != actual { t.Errorf("Expected tree string:\n--->%s<---\nGot:\n--->%s<---", expected, actual) } diff --git a/ui/filetreeview.go b/ui/filetreeview.go index 5bbfd99..38f8701 100644 --- a/ui/filetreeview.go +++ b/ui/filetreeview.go @@ -136,16 +136,11 @@ func (view *FileTreeView) getAbsPositionNode() (node *filetree.FileNode) { var evaluator func(*filetree.FileNode) bool var dfsCounter int - // special case: the root node is never visited - if view.TreeIndex == 0 { - return view.ModelTree.Root - } - visiter = func(curNode *filetree.FileNode) error { - dfsCounter++ if dfsCounter == view.TreeIndex { node = curNode } + dfsCounter++ return nil } @@ -205,7 +200,7 @@ func (view *FileTreeView) KeyHelp() string { func (view *FileTreeView) Render() error { // print the tree to the view - lines := strings.Split(view.ViewTree.String(), "\n") + lines := strings.Split(view.ViewTree.String(true), "\n") view.gui.Update(func(g *gocui.Gui) error { view.view.Clear() for idx, line := range lines {