github.com/hy3/cuto@v0.9.8-0.20160830082821-aa6652f877b7/master/jobnet/parser/network_test.go (about) 1 package parser 2 3 import ( 4 "strings" 5 "testing" 6 ) 7 8 func TestParseNetworkFile_ファイルが存在しない場合はエラーが発生する(t *testing.T) { 9 if _, err := ParseNetworkFile("noexistfilepath"); err == nil { 10 t.Error("エラーが発生しなかった。") 11 } 12 } 13 14 func TestParseNetwork_ネットワーク定義XMLをパースできる(t *testing.T) { 15 xml := ` 16 <?xml version="1.0" encoding="UTF-8"?> 17 <definitions> 18 <process id="sample" name="Sample" isExecutable="true"> 19 <startEvent id="startevent1" name="Start"></startEvent> 20 <endEvent id="endevent1" name="End"></endEvent> 21 <serviceTask id="servicetask1" name="JOB1"></serviceTask> 22 <parallelGateway id="parallelgateway1" name="Parallel Gateway"></parallelGateway> 23 <serviceTask id="servicetask2" name="JOB2"></serviceTask> 24 <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="servicetask1"></sequenceFlow> 25 <serviceTask id="servicetask3" name="JOB3"></serviceTask> 26 <sequenceFlow id="flow2" sourceRef="servicetask1" targetRef="parallelgateway1"></sequenceFlow> 27 <sequenceFlow id="flow3" sourceRef="parallelgateway1" targetRef="servicetask2"></sequenceFlow> 28 <sequenceFlow id="flow4" sourceRef="parallelgateway1" targetRef="servicetask3"></sequenceFlow> 29 <parallelGateway id="parallelgateway2" name="Parallel Gateway"></parallelGateway> 30 <sequenceFlow id="flow5" sourceRef="servicetask2" targetRef="parallelgateway2"></sequenceFlow> 31 <sequenceFlow id="flow6" sourceRef="servicetask3" targetRef="parallelgateway2"></sequenceFlow> 32 <sequenceFlow id="flow7" sourceRef="parallelgateway2" targetRef="endevent1"></sequenceFlow> 33 </process> 34 </definitions>` 35 36 r := strings.NewReader(xml) 37 proc, err := ParseNetwork(r) 38 if err != nil { 39 t.Fatalf("想定外のエラーが発生: %s", err) 40 } 41 42 se := proc.Start 43 if len(se) != 1 { 44 t.Fatalf("startEventが%d個にも関わらず、%d個取得された", 1, len(se)) 45 } 46 if se[0].ID != "startevent1" { 47 t.Errorf("startEventのidは%sのはずが、%sが取得された", "startevent1", se[0].ID) 48 } 49 50 ee := proc.End 51 if len(ee) != 1 { 52 t.Fatalf("endEventが%d個にも関わらず、%d個取得された", 1, len(ee)) 53 } 54 if ee[0].ID != "endevent1" { 55 t.Errorf("endEventのidは%sのはずが、%sが取得された", "endevent1", ee[0].ID) 56 } 57 58 st := proc.Task 59 if len(st) != 3 { 60 t.Fatalf("serviceTaskが%d個にも関わらず、%d個取得された", 3, len(st)) 61 } 62 if st[0].ID != "servicetask1" { 63 t.Errorf("1つめのserviceTaskのidは%sのはずが、%sが取得された", "servicetask1", st[0].ID) 64 } 65 if st[1].ID != "servicetask2" { 66 t.Errorf("2つめのserviceTaskのidは%sのはずが、%sが取得された", "servicetask2", st[1].ID) 67 } 68 69 pg := proc.Gateway 70 if len(pg) != 2 { 71 t.Fatalf("parallelGatewayが%d個にも関わらず、%d個取得された", 2, len(pg)) 72 } 73 if pg[0].ID != "parallelgateway1" { 74 t.Errorf("1つめのparallelgatewayのidは%sのはずが、%sが取得された", "parallelgateway1", pg[0].ID) 75 } 76 if pg[1].ID != "parallelgateway2" { 77 t.Errorf("2つめのparallelgatewayのidは%sのはずが、%sが取得された", "parallelgateway2", pg[1].ID) 78 } 79 80 sf := proc.Flow 81 if len(sf) != 7 { 82 t.Fatalf("sequenceFlowが%d個にも関わらず、%d個取得された", 7, len(sf)) 83 } 84 if sf[0].From != "startevent1" { 85 t.Errorf("1つめのsequenceFlowのsourceRefは%sのはずが、%sが取得された", "startevent1", sf[0].From) 86 } 87 if sf[0].To != "servicetask1" { 88 t.Errorf("1つめのsequenceFlowのtargetRefは%sのはずが、%sが取得された", "servicetask1", sf[0].To) 89 } 90 if sf[1].From != "servicetask1" { 91 t.Errorf("1つめのsequenceFlowのsourceRefは%sのはずが、%sが取得された", "servicetask1", sf[1].From) 92 } 93 if sf[1].To != "parallelgateway1" { 94 t.Errorf("1つめのsequenceFlowのtargetRefは%sのはずが、%sが取得された", "parallelgateway1", sf[1].To) 95 } 96 } 97 98 func TestParseNetwork_必要最低限の要素があればエラーを吐かない(t *testing.T) { 99 xml := ` 100 <?xml version="1.0" encoding="UTF-8"?> 101 <definitions> 102 <process> 103 <startEvent/> 104 <endEvent/> 105 </process> 106 </definitions>` 107 108 r := strings.NewReader(xml) 109 _, err := ParseNetwork(r) 110 if err != nil { 111 t.Fatalf("想定外のエラーが発生した: %s", err) 112 } 113 } 114 115 func TestParseNetwork_XMLの書式エラー時にエラーを吐く(t *testing.T) { 116 xml := "bad_xml" 117 118 r := strings.NewReader(xml) 119 _, err := ParseNetwork(r) 120 if err == nil { 121 t.Fatal("エラーが返されなかった。") 122 } 123 } 124 125 func TestParseNetwork_process要素が無い場合にエラーを吐く(t *testing.T) { 126 xml := ` 127 <?xml version="1.0" encoding="UTF-8"?> 128 <definitions> 129 </definitions>` 130 131 r := strings.NewReader(xml) 132 _, err := ParseNetwork(r) 133 if err == nil { 134 t.Fatal("エラーが返されなかった。") 135 } 136 } 137 138 func TestParseNetwork_process要素が多すぎる場合にエラーを吐く(t *testing.T) { 139 xml := ` 140 <?xml version="1.0" encoding="UTF-8"?> 141 <definitions> 142 <process/> 143 <process/> 144 </definitions>` 145 146 r := strings.NewReader(xml) 147 _, err := ParseNetwork(r) 148 if err == nil { 149 t.Fatal("エラーが返されなかった。") 150 } 151 } 152 153 func TestParseNetwork_startEvent要素が無い場合にエラーを吐く(t *testing.T) { 154 xml := ` 155 <?xml version="1.0" encoding="UTF-8"?> 156 <definitions> 157 <process> 158 <endEvent/> 159 </process> 160 </definitions>` 161 162 r := strings.NewReader(xml) 163 _, err := ParseNetwork(r) 164 if err == nil { 165 t.Fatal("エラーが返されなかった。") 166 } 167 } 168 169 func TestParseNetwork_startEvent要素が多すぎる場合にエラーを吐く(t *testing.T) { 170 xml := ` 171 <?xml version="1.0" encoding="UTF-8"?> 172 <definitions> 173 <process> 174 <startEvent/> 175 <startEvent/> 176 <endEvent/> 177 </process> 178 </definitions>` 179 180 r := strings.NewReader(xml) 181 _, err := ParseNetwork(r) 182 if err == nil { 183 t.Fatal("エラーが返されなかった。") 184 } 185 } 186 187 func TestParseNetwork_endEvent要素が無い場合にエラーを吐く(t *testing.T) { 188 xml := ` 189 <?xml version="1.0" encoding="UTF-8"?> 190 <definitions> 191 <process> 192 <startEvent/> 193 </process> 194 </definitions>` 195 196 r := strings.NewReader(xml) 197 _, err := ParseNetwork(r) 198 if err == nil { 199 t.Fatal("エラーが返されなかった。") 200 } 201 } 202 203 func TestParseNetwork_endEvent要素が多すぎる場合にエラーを吐く(t *testing.T) { 204 xml := ` 205 <?xml version="1.0" encoding="UTF-8"?> 206 <definitions> 207 <process> 208 <startEvent/> 209 <endEvent/> 210 <endEvent/> 211 </process> 212 </definitions>` 213 214 r := strings.NewReader(xml) 215 _, err := ParseNetwork(r) 216 if err == nil { 217 t.Fatal("エラーが返されなかった。") 218 } 219 }