...
1 package treeprint
2
3 import (
4 "testing"
5
6 "github.com/stretchr/testify/assert"
7 )
8
9 func TestZeroNodesWithRoot(t *testing.T) {
10 assert := assert.New(t)
11
12 tree := NewWithRoot("mytree")
13 actual := tree.String()
14 expected := "mytree\n"
15 assert.Equal(expected, actual)
16 }
17
18 func TestOneNode(t *testing.T) {
19 assert := assert.New(t)
20
21 tree := New()
22 tree.AddNode("hello")
23 actual := tree.String()
24 expected := `.
25 └── hello
26 `
27 assert.Equal(expected, actual)
28 }
29
30 func TestOneNodeWithRoot(t *testing.T) {
31 assert := assert.New(t)
32
33 tree := NewWithRoot("mytree")
34 tree.AddNode("hello")
35 actual := tree.String()
36 expected := `mytree
37 └── hello
38 `
39 assert.Equal(expected, actual)
40 }
41
42 func TestMetaNode(t *testing.T) {
43 assert := assert.New(t)
44
45 tree := New()
46 tree.AddMetaNode(123, "hello")
47 tree.AddMetaNode([]struct{}{}, "world")
48 actual := tree.String()
49 expected := `.
50 ├── [123] hello
51 └── [[]] world
52 `
53 assert.Equal(expected, actual)
54 }
55
56 func TestTwoNodes(t *testing.T) {
57 assert := assert.New(t)
58
59 tree := New()
60 tree.AddNode("hello")
61 tree.AddNode("world")
62 actual := tree.String()
63 expected := `.
64 ├── hello
65 └── world
66 `
67 assert.Equal(expected, actual)
68 }
69
70 func TestLevel(t *testing.T) {
71 assert := assert.New(t)
72
73 tree := New()
74 tree.AddBranch("hello").AddNode("my friend").AddNode("lol")
75 tree.AddNode("world")
76 actual := tree.String()
77 expected := `.
78 ├── hello
79 │ ├── my friend
80 │ └── lol
81 └── world
82 `
83 assert.Equal(expected, actual)
84 }
85
86 func TestNamedRoot(t *testing.T) {
87 assert := assert.New(t)
88
89 tree := New()
90 tree.AddBranch("hello").AddNode("my friend").AddNode("lol")
91 tree.AddNode("world")
92 tree.SetValue("friends")
93 actual := tree.String()
94 expected := `friends
95 ├── hello
96 │ ├── my friend
97 │ └── lol
98 └── world
99 `
100 assert.Equal(expected, actual)
101 }
102
103 func TestDeepLevel(t *testing.T) {
104 assert := assert.New(t)
105
106 tree := New()
107 one := tree.AddBranch("one")
108 one.AddNode("subnode1").AddNode("subnode2")
109 one.AddBranch("two").
110 AddNode("subnode1").AddNode("subnode2").
111 AddBranch("three").
112 AddNode("subnode1").AddNode("subnode2")
113 one.AddNode("subnode3")
114 tree.AddNode("outernode")
115
116 actual := tree.String()
117 expected := `.
118 ├── one
119 │ ├── subnode1
120 │ ├── subnode2
121 │ ├── two
122 │ │ ├── subnode1
123 │ │ ├── subnode2
124 │ │ └── three
125 │ │ ├── subnode1
126 │ │ └── subnode2
127 │ └── subnode3
128 └── outernode
129 `
130 assert.Equal(expected, actual)
131 }
132
133 func TestComplex(t *testing.T) {
134 assert := assert.New(t)
135
136 tree := New()
137 tree.AddNode("Dockerfile")
138 tree.AddNode("Makefile")
139 tree.AddNode("aws.sh")
140 tree.AddMetaBranch(" 204", "bin").
141 AddNode("dbmaker").AddNode("someserver").AddNode("testtool")
142 tree.AddMetaBranch(" 374", "deploy").
143 AddNode("Makefile").AddNode("bootstrap.sh")
144 tree.AddMetaNode("122K", "testtool.a")
145
146 actual := tree.String()
147 expected := `.
148 ├── Dockerfile
149 ├── Makefile
150 ├── aws.sh
151 ├── [ 204] bin
152 │ ├── dbmaker
153 │ ├── someserver
154 │ └── testtool
155 ├── [ 374] deploy
156 │ ├── Makefile
157 │ └── bootstrap.sh
158 └── [122K] testtool.a
159 `
160 assert.Equal(expected, actual)
161 }
162
163 func TestIndirectOrder(t *testing.T) {
164 assert := assert.New(t)
165
166 tree := New()
167 tree.AddBranch("one").AddNode("two")
168 foo := tree.AddBranch("foo")
169 foo.AddBranch("bar").AddNode("a").AddNode("b").AddNode("c")
170 foo.AddNode("end")
171
172 actual := tree.String()
173 expected := `.
174 ├── one
175 │ └── two
176 └── foo
177 ├── bar
178 │ ├── a
179 │ ├── b
180 │ └── c
181 └── end
182 `
183 assert.Equal(expected, actual)
184 }
185
186 func TestEdgeTypeAndIndent(t *testing.T) {
187 assert := assert.New(t)
188
189
190 defer func(link, mid, end EdgeType, indent int) {
191 EdgeTypeLink = link
192 EdgeTypeMid = mid
193 EdgeTypeEnd = end
194 IndentSize = indent
195 }(EdgeTypeLink, EdgeTypeMid, EdgeTypeEnd, IndentSize)
196
197 EdgeTypeLink = "|"
198 EdgeTypeMid = "+-"
199 EdgeTypeEnd = "+-"
200 IndentSize = 2
201
202 tree := New()
203 tree.AddBranch("one").AddNode("two")
204 foo := tree.AddBranch("foo")
205 foo.AddBranch("bar").AddNode("a").AddNode("b").AddNode("c")
206 foo.AddNode("end")
207
208 actual := tree.String()
209 expected := `.
210 +- one
211 | +- two
212 +- foo
213 +- bar
214 | +- a
215 | +- b
216 | +- c
217 +- end
218 `
219 assert.Equal(expected, actual)
220 }
221
222 func TestRelationships(t *testing.T) {
223 assert := assert.New(t)
224
225 tree := New()
226 tree.AddBranch("one").AddNode("two")
227 foo := tree.AddBranch("foo")
228 foo.AddBranch("bar").AddNode("a").AddNode("b").AddNode("c")
229 foo.AddNode("end")
230
231 treeNode := tree.(*Node)
232
233 assert.Nil(treeNode.Root)
234 assert.Len(treeNode.Nodes, 2)
235 assert.Equal(treeNode, treeNode.Nodes[0].Root)
236 assert.Equal(treeNode.Nodes[0], treeNode.Nodes[0].Nodes[0].Root)
237 }
238
239 func TestMultiline(t *testing.T) {
240 assert := assert.New(t)
241
242 multi1 := `I am
243 a multiline
244 value`
245
246 multi2 := `I have
247 many
248
249
250 empty lines`
251
252 multi3 := `I am another
253 multiple
254 lines value`
255
256 tree := New()
257 tree.AddBranch("one").AddMetaNode("meta", multi1)
258 tree.AddBranch("two")
259 foo := tree.AddBranch("foo")
260 foo.AddBranch("bar").AddNode("a").AddNode(multi2).AddNode("c")
261 foo.AddBranch(multi3)
262
263 actual := tree.String()
264 expected := `.
265 ├── one
266 │ └── [meta] I am
267 │ a multiline
268 │ value
269 ├── two
270 └── foo
271 ├── bar
272 │ ├── a
273 │ ├── I have
274 │ │ many
275 │ │
276 │ │
277 │ │ empty lines
278 │ └── c
279 └── I am another
280 multiple
281 lines value
282 `
283
284 assert.Equal(expected, actual)
285 }
286
287 func TestVisitAll(t *testing.T) {
288
289 tree := New()
290 one := tree.AddBranch("one")
291 one.AddNode("one-subnode1").AddNode("one-subnode2")
292 one.AddBranch("two").AddNode("two-subnode1").AddNode("two-subnode2").
293 AddBranch("three").AddNode("three-subnode1").AddNode("three-subnode2")
294 tree.AddNode("outernode")
295
296 var visitedNodeValues []Value
297 expectedNodeValues := []Value{
298 "one",
299 "one-subnode1",
300 "one-subnode2",
301 "two",
302 "two-subnode1",
303 "two-subnode2",
304 "three",
305 "three-subnode1",
306 "three-subnode2",
307 "outernode",
308 }
309
310 tree.VisitAll(func(item *Node) {
311 visitedNodeValues = append(visitedNodeValues, item.Value)
312 })
313
314 assert := assert.New(t)
315 assert.Equal(expectedNodeValues, visitedNodeValues)
316
317 }
318
View as plain text