@@ -20,28 +20,45 @@ func Test_fileTreeNode_String(t *testing.T) {
20
20
tests := []struct {
21
21
name string
22
22
fields fields
23
+ opts getStringOpts
23
24
want string
24
25
}{
25
26
{
26
27
name : "get string of only root node" ,
27
28
fields : fields {"/" , true , nil },
29
+ opts : getStringOpts {showLinks : false , depth : 99999 },
28
30
want : "/\n " ,
29
31
},
30
32
{
31
33
name : "get string of /etc/file" ,
32
34
fields : fields {"/" , true , []* fileTreeNode {& etcNode }},
35
+ opts : getStringOpts {showLinks : false , depth : 99999 },
33
36
want : "/\n └── etc/\n └── file\n " ,
34
37
},
35
38
{
36
39
name : "get string of /etc/file + /other_file" ,
37
40
fields : fields {"/" , true , []* fileTreeNode {& etcNode , & otherFileNode }},
41
+ opts : getStringOpts {showLinks : false , depth : 99999 },
38
42
want : "/\n ├── etc/\n │ └── file\n └── other_file\n " ,
39
43
},
40
44
{
41
45
name : "get string with symlink" ,
42
46
fields : fields {"/" , true , []* fileTreeNode {& etcNode , & binNodeWithSymlink }},
47
+ opts : getStringOpts {showLinks : true , depth : 99999 },
43
48
want : "/\n ├── etc/\n │ └── file\n └── bin/\n ├── file\n └── link -> /tmp/file\n " ,
44
49
},
50
+ {
51
+ name : "get string with depth = 1" ,
52
+ fields : fields {"/" , true , []* fileTreeNode {& etcNode , & binNodeWithSymlink }},
53
+ opts : getStringOpts {showLinks : false , depth : 2 }, // we use depth == 2 because we want it to handle root + one more level of nesting
54
+ want : "/\n ├── etc/\n └── bin/\n " ,
55
+ },
56
+ {
57
+ name : "get string with depth = 2" ,
58
+ fields : fields {"/" , true , []* fileTreeNode {& etcNode , & binNodeWithSymlink }},
59
+ opts : getStringOpts {showLinks : false , depth : 3 },
60
+ want : "/\n ├── etc/\n │ └── file\n └── bin/\n ├── file\n └── link\n " ,
61
+ },
45
62
}
46
63
for _ , tt := range tests {
47
64
t .Run (tt .name , func (t * testing.T ) {
@@ -50,28 +67,15 @@ func Test_fileTreeNode_String(t *testing.T) {
50
67
IsDir : tt .fields .IsDir ,
51
68
Children : tt .fields .Children ,
52
69
}
53
- if got := n .getString ("" , true , true , true ); got != tt .want {
70
+
71
+ if got := n .getString ("" , tt .opts , true , true ); got != tt .want {
54
72
t .Errorf ("getString() = %v, want %v" , got , tt .want )
55
73
}
56
74
})
57
75
}
58
76
}
59
77
60
78
func Test_mergeFileTrees (t * testing.T ) {
61
- singleFileTree := & fileTreeNode {"file" , "" , false , nil }
62
-
63
- etcWithFile := & fileTreeNode {"etc" , "" , true , []* fileTreeNode {singleFileTree }}
64
- rootWithEtcTreeNode := & fileTreeNode {"/" , "" , true , []* fileTreeNode {etcWithFile }}
65
-
66
- varWithFile := & fileTreeNode {"var" , "" , true , []* fileTreeNode {singleFileTree }}
67
- rootWithVarTreeNode := & fileTreeNode {"/" , "" , true , []* fileTreeNode {varWithFile }}
68
-
69
- deleteSingleFileTree := & fileTreeNode {".wh.file" , "" , false , nil }
70
- etcWithDeleteFile := & fileTreeNode {"etc" , "" , true , []* fileTreeNode {deleteSingleFileTree }}
71
- rootWithEtcWithDeleteFileTreeNode := & fileTreeNode {"/" , "" , true , []* fileTreeNode {etcWithDeleteFile }}
72
-
73
- rootWithEtcWithDeleteFileAndAddVarFileTreeNode := & fileTreeNode {"/" , "" , true , []* fileTreeNode {etcWithDeleteFile , varWithFile }}
74
-
75
79
type args struct {
76
80
original * fileTreeNode
77
81
updated * fileTreeNode
@@ -86,40 +90,83 @@ func Test_mergeFileTrees(t *testing.T) {
86
90
name : "original is nil" ,
87
91
args : args {
88
92
original : nil ,
89
- updated : singleFileTree ,
93
+ updated : & fileTreeNode { "file" , "" , false , nil } ,
90
94
},
91
- want : singleFileTree ,
95
+ want : & fileTreeNode { "file" , "" , false , nil } ,
92
96
wantErr : false ,
93
97
},
94
98
{
95
99
name : "add /var/file to /etc/file" ,
96
100
args : args {
97
- original : rootWithEtcTreeNode ,
98
- updated : rootWithVarTreeNode ,
101
+ original : & fileTreeNode {"/" , "" , true , []* fileTreeNode {
102
+ {"etc" , "" , true , []* fileTreeNode {
103
+ {"file" , "" , false , nil },
104
+ }},
105
+ }},
106
+ updated : & fileTreeNode {"/" , "" , true , []* fileTreeNode {
107
+ {"var" , "" , true , []* fileTreeNode {
108
+ {"file" , "" , false , nil },
109
+ }},
110
+ }},
99
111
},
100
- want : & fileTreeNode {"/" , "" , true , []* fileTreeNode {etcWithFile , varWithFile }},
112
+ want : & fileTreeNode {"/" , "" , true , []* fileTreeNode {
113
+ {"etc" , "" , true , []* fileTreeNode {
114
+ {"file" , "" , false , nil }},
115
+ },
116
+ {"var" , "" , true , []* fileTreeNode {
117
+ {"file" , "" , false , nil }},
118
+ },
119
+ }},
120
+
101
121
wantErr : false ,
102
122
},
103
123
{
104
124
name : "delete /etc/file" ,
105
125
args : args {
106
- original : rootWithEtcTreeNode ,
107
- updated : rootWithEtcWithDeleteFileTreeNode ,
126
+ original : & fileTreeNode {"/" , "" , true , []* fileTreeNode {
127
+ {"etc" , "" , true , []* fileTreeNode {
128
+ {"file" , "" , false , nil },
129
+ }},
130
+ }},
131
+ updated : & fileTreeNode {"/" , "" , true , []* fileTreeNode {
132
+ {"etc" , "" , true , []* fileTreeNode {
133
+ {".wh.file" , "" , false , nil },
134
+ }},
135
+ }},
108
136
},
109
- want : & fileTreeNode {"/" , "" , true , []* fileTreeNode {{"etc" , "" , true , []* fileTreeNode {}}}},
137
+ want : & fileTreeNode {"/" , "" , true , []* fileTreeNode {
138
+ {"etc" , "" , true , []* fileTreeNode {}},
139
+ }},
110
140
wantErr : false ,
111
141
},
112
142
{
113
143
name : "delete /etc/file and add /var/file" ,
114
144
args : args {
115
- original : rootWithEtcTreeNode ,
116
- updated : rootWithEtcWithDeleteFileAndAddVarFileTreeNode ,
145
+ original : & fileTreeNode {"/" , "" , true , []* fileTreeNode {
146
+ {"etc" , "" , true , []* fileTreeNode {
147
+ {"file" , "" , false , nil },
148
+ }},
149
+ }},
150
+ updated : & fileTreeNode {"/" , "" , true , []* fileTreeNode {
151
+ {"etc" , "" , true , []* fileTreeNode {
152
+ {".wh.file" , "" , false , nil },
153
+ }},
154
+ {"var" , "" , false , []* fileTreeNode {
155
+ {"file" , "" , false , nil },
156
+ }},
157
+ }},
117
158
},
118
- want : & fileTreeNode {"/" , "" , true , []* fileTreeNode {{"etc" , "" , true , []* fileTreeNode {}}, varWithFile }},
159
+ want : & fileTreeNode {"/" , "" , true , []* fileTreeNode {
160
+ {"etc" , "" , true , []* fileTreeNode {}},
161
+ {"var" , "" , false , []* fileTreeNode {
162
+ {"file" , "" , false , nil },
163
+ }},
164
+ }},
119
165
wantErr : false ,
120
166
},
121
167
}
122
168
169
+ defaultOpts := getStringOpts {showLinks : true , depth : 99999 }
123
170
for _ , tt := range tests {
124
171
t .Run (tt .name , func (t * testing.T ) {
125
172
got , err := mergeFileTrees (tt .args .original , tt .args .updated )
@@ -128,7 +175,9 @@ func Test_mergeFileTrees(t *testing.T) {
128
175
return
129
176
}
130
177
if ! reflect .DeepEqual (got , tt .want ) {
131
- t .Errorf ("mergeFileTrees() got:\n %v, want:\n %v" , got , tt .want )
178
+ t .Errorf ("mergeFileTrees() got:\n %v, want:\n %v" ,
179
+ got .getString ("" , defaultOpts , true , false ),
180
+ tt .want .getString ("" , defaultOpts , true , false ))
132
181
}
133
182
})
134
183
}
0 commit comments