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  }