...

Source file src/github.com/xlab/treeprint/treeprint_test.go

Documentation: github.com/xlab/treeprint

     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  	// Restore to the original values
   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