@@ -31,6 +31,11 @@ func TestSimpleGraph(t *testing.T) {
31
31
}
32
32
t .Log (graphStr )
33
33
34
+ sortedNodes := g .TopologicalSort ()
35
+ assert .Equal (t , 4 , len (sortedNodes ))
36
+ assert .Equal (t , root , sortedNodes [0 ])
37
+ assert .Equal (t , summary , sortedNodes [3 ])
38
+
34
39
err = g .AddNode (calc1 )
35
40
assert .Error (t , err )
36
41
assert .True (t , errors .Is (err , graph .ErrDuplicateNode ))
@@ -41,27 +46,92 @@ func TestSimpleGraph(t *testing.T) {
41
46
assert .True (t , errors .Is (err , graph .ErrConnectNotExistingNode ))
42
47
}
43
48
49
+ func TestDemoGraph (t * testing.T ) {
50
+ g := graph .NewGraph (edgeSpecFromConnection )
51
+ root := & testNode {Name : "root" }
52
+ g .AddNode (root )
53
+
54
+ paramServerName := & testNode {Name : "param_serverName" }
55
+ g .AddNode (paramServerName )
56
+ g .Connect (root , paramServerName )
57
+ connect := & testNode {Name : "func_getConnection" }
58
+ g .AddNode (connect )
59
+ g .Connect (paramServerName , connect )
60
+ checkAuth := & testNode {Name : "func_checkAuth" }
61
+ g .AddNode (checkAuth )
62
+
63
+ paramTable1 := & testNode {Name : "param_table1" }
64
+ g .AddNode (paramTable1 )
65
+ g .Connect (root , paramTable1 )
66
+ tableClient1 := & testNode {Name : "func_getTableClient1" }
67
+ g .AddNode (tableClient1 )
68
+ g .Connect (connect , tableClient1 )
69
+ g .Connect (paramTable1 , tableClient1 )
70
+ paramQuery1 := & testNode {Name : "param_query1" }
71
+ g .AddNode (paramQuery1 )
72
+ g .Connect (root , paramQuery1 )
73
+ queryTable1 := & testNode {Name : "func_queryTable1" }
74
+ g .AddNode (queryTable1 )
75
+ g .Connect (paramQuery1 , queryTable1 )
76
+ g .Connect (tableClient1 , queryTable1 )
77
+ g .Connect (checkAuth , queryTable1 )
78
+
79
+ paramTable2 := & testNode {Name : "param_table2" }
80
+ g .AddNode (paramTable2 )
81
+ g .Connect (root , paramTable2 )
82
+ tableClient2 := & testNode {Name : "func_getTableClient2" }
83
+ g .AddNode (tableClient2 )
84
+ g .Connect (connect , tableClient2 )
85
+ g .Connect (paramTable2 , tableClient2 )
86
+ paramQuery2 := & testNode {Name : "param_query2" }
87
+ g .AddNode (paramQuery2 )
88
+ g .Connect (root , paramQuery2 )
89
+ queryTable2 := & testNode {Name : "func_queryTable2" }
90
+ g .AddNode (queryTable2 )
91
+ g .Connect (paramQuery2 , queryTable2 )
92
+ g .Connect (tableClient2 , queryTable2 )
93
+ g .Connect (checkAuth , queryTable2 )
94
+
95
+ summary := & testNode {Name : "func_summarize" }
96
+ g .AddNode (summary )
97
+ g .Connect (queryTable1 , summary )
98
+ g .Connect (queryTable2 , summary )
99
+
100
+ email := & testNode {Name : "func_email" }
101
+ g .AddNode (email )
102
+ g .Connect (summary , email )
103
+
104
+ sortedNodes := g .TopologicalSort ()
105
+ for _ , n := range sortedNodes {
106
+ fmt .Println (n .GetName ())
107
+ }
108
+ }
109
+
44
110
type testNode struct {
45
111
Name string
46
112
}
47
113
114
+ func (tn * testNode ) GetName () string {
115
+ return tn .Name
116
+ }
117
+
48
118
func (tn * testNode ) DotSpec () * graph.DotNodeSpec {
49
119
return & graph.DotNodeSpec {
50
- ID : tn .Name ,
51
- Name : tn .Name ,
52
- Tooltip : tn .Name ,
53
- Shape : "box" ,
54
- Style : "filled" ,
55
- FillColor : "green" ,
120
+ Name : tn .Name ,
121
+ DisplayName : tn .Name ,
122
+ Tooltip : tn .Name ,
123
+ Shape : "box" ,
124
+ Style : "filled" ,
125
+ FillColor : "green" ,
56
126
}
57
127
}
58
128
59
129
func edgeSpecFromConnection (from , to * testNode ) * graph.DotEdgeSpec {
60
130
return & graph.DotEdgeSpec {
61
- FromNodeID : from .DotSpec (). ID ,
62
- ToNodeID : to .DotSpec (). ID ,
63
- Tooltip : fmt .Sprintf ("%s -> %s" , from .DotSpec ().Name , to .DotSpec ().Name ),
64
- Style : "solid" ,
65
- Color : "black" ,
131
+ FromNodeName : from .GetName () ,
132
+ ToNodeName : to .GetName () ,
133
+ Tooltip : fmt .Sprintf ("%s -> %s" , from .DotSpec ().Name , to .DotSpec ().Name ),
134
+ Style : "solid" ,
135
+ Color : "black" ,
66
136
}
67
137
}
0 commit comments