github.com/unirita/cuto@v0.9.8-0.20160830082821-aa6652f877b7/message/variable_test.go (about)

     1  package message
     2  
     3  import (
     4  	"os"
     5  	"testing"
     6  )
     7  
     8  func TestNewVariable_変数オブジェクトを生成できる(t *testing.T) {
     9  	v := NewVariable(`$METEST$`)
    10  	if v == nil {
    11  		t.Fatal("オブジェクト生成に失敗した。")
    12  	}
    13  	if v.String() != `$METEST$` {
    14  		t.Errorf("文字列表現[%s]が想定と違っている", v.String())
    15  	}
    16  	if v.Place != 'M' {
    17  		t.Errorf("Placeの値[%c]が想定と違っている。", v.Place)
    18  	}
    19  	if v.Kind != 'E' {
    20  		t.Errorf("Kindの値[%c]が想定と違っている。", v.Kind)
    21  	}
    22  	if v.Name != `TEST` {
    23  		t.Errorf("Nameの値[%s]が想定と違っている。", v.Name)
    24  	}
    25  	if v.Tag != `` {
    26  		t.Errorf("Tagの値[%s]が想定と違っている。", v.Tag)
    27  	}
    28  }
    29  
    30  func TestNewVariable_変数名が明らかに短い場合nilを返す(t *testing.T) {
    31  	v := NewVariable(`$ME$`)
    32  	if v != nil {
    33  		t.Error("nilを返さなかった。")
    34  	}
    35  }
    36  
    37  func TestNewVariable_場所識別子が定義外の場合nilを返す(t *testing.T) {
    38  	v := NewVariable(`$AETEST$`)
    39  	if v != nil {
    40  		t.Error("nilを返さなかった。")
    41  	}
    42  }
    43  
    44  func TestNewVariable_種別識別子が定義外の場合nilを返す(t *testing.T) {
    45  	v := NewVariable(`$MATEST$`)
    46  	if v != nil {
    47  		t.Error("nilを返さなかった。")
    48  	}
    49  }
    50  
    51  func TestNewVariable_変数オブジェクトを生成できる_タグ付き(t *testing.T) {
    52  	v := NewVariable(`$MJTEST:ID$`)
    53  	if v == nil {
    54  		t.Fatal("オブジェクト生成に失敗した。")
    55  	}
    56  	if v.String() != `$MJTEST:ID$` {
    57  		t.Errorf("文字列表現[%s]が想定と違っている", v.String())
    58  	}
    59  	if v.Place != 'M' {
    60  		t.Errorf("Placeの値[%c]が想定と違っている。", v.Place)
    61  	}
    62  	if v.Kind != 'J' {
    63  		t.Errorf("Kindの値[%c]が想定と違っている。", v.Kind)
    64  	}
    65  	if v.Name != `TEST` {
    66  		t.Errorf("Nameの値[%s]が想定と違っている。", v.Name)
    67  	}
    68  	if v.Tag != `ID` {
    69  		t.Errorf("Tagの値[%s]が想定と違っている。", v.Tag)
    70  	}
    71  }
    72  
    73  func TestExpand_システム変数の値を取得できる(t *testing.T) {
    74  	AddSysValue(`JOBNET`, `ID`, `123456`)
    75  	AddSysValue(`ROOT`, ``, `C:\cute`)
    76  
    77  	v := NewVariable("$MSJOBNET:ID$")
    78  	val, err := v.Expand()
    79  	if err != nil {
    80  		t.Fatalf("想定外のエラーが発生[%s]", err)
    81  	}
    82  	if val != `123456` {
    83  		t.Errorf("取得したJOBNET:IDの値[%s]が想定と違っている。", val)
    84  	}
    85  
    86  	v = NewVariable("$SSROOT$")
    87  	val, err = v.Expand()
    88  	if err != nil {
    89  		t.Fatalf("想定外のエラーが発生[%s]", err)
    90  	}
    91  	if val != `C:\cute` {
    92  		t.Errorf("取得したSSROOTの値[%s]が想定と違っている。", val)
    93  	}
    94  }
    95  
    96  func TestExpand_未定義のシステム変数を参照したらエラー(t *testing.T) {
    97  	v := NewVariable("$MSUNDEF$")
    98  	_, err := v.Expand()
    99  	if err == nil {
   100  		t.Error("エラーが発生しなかった。")
   101  	}
   102  }
   103  
   104  func TestExpand_環境変数の値を取得できる(t *testing.T) {
   105  	v := NewVariable("$METEST$")
   106  	os.Setenv("TEST", "testenv")
   107  
   108  	val, err := v.Expand()
   109  	if err != nil {
   110  		t.Fatalf("想定外のエラーが発生[%s]", err)
   111  	}
   112  	if val != "testenv" {
   113  		t.Errorf("取得した値[%s]が想定と違っている。", val)
   114  	}
   115  }
   116  
   117  func TestExpand_ジョブネットワーク変数の値を取得できる(t *testing.T) {
   118  	res := new(Response)
   119  	res.JID = "JOB1"
   120  	res.RC = 1
   121  	res.St = "2015-01-01 12:34:56.789"
   122  	res.Et = "2015-01-01 13:00:00.000"
   123  	res.Var = "testout"
   124  	AddJobValue("test", res)
   125  
   126  	v := NewVariable("$MJtest:ID$")
   127  	val, err := v.Expand()
   128  	if err != nil {
   129  		t.Fatalf("想定外のエラーが発生[%s]", err)
   130  	}
   131  	if val != "JOB1" {
   132  		t.Errorf("取得したRCの値[%s]が想定と違っている。", val)
   133  	}
   134  
   135  	v = NewVariable("$MJtest:RC$")
   136  	val, err = v.Expand()
   137  	if err != nil {
   138  		t.Fatalf("想定外のエラーが発生[%s]", err)
   139  	}
   140  	if val != "1" {
   141  		t.Errorf("取得したRCの値[%s]が想定と違っている。", val)
   142  	}
   143  
   144  	v = NewVariable("$MJtest:SD$")
   145  	val, err = v.Expand()
   146  	if err != nil {
   147  		t.Fatalf("想定外のエラーが発生[%s]", err)
   148  	}
   149  	if val != "$ST20150101123456.789$" {
   150  		t.Errorf("取得したSDの値[%s]が想定と違っている。", val)
   151  	}
   152  
   153  	v = NewVariable("$MJtest:ED$")
   154  	val, err = v.Expand()
   155  	if err != nil {
   156  		t.Fatalf("想定外のエラーが発生[%s]", err)
   157  	}
   158  	if val != "$ST20150101130000.000$" {
   159  		t.Errorf("取得したEDの値[%s]が想定と違っている。", val)
   160  	}
   161  
   162  	v = NewVariable("$MJtest:OUT$")
   163  	val, err = v.Expand()
   164  	if err != nil {
   165  		t.Fatalf("想定外のエラーが発生[%s]", err)
   166  	}
   167  	if val != "testout" {
   168  		t.Errorf("取得したOUTの値[%s]が想定と違っている。", val)
   169  	}
   170  }
   171  
   172  func TestExpand_未定義のジョブネットワーク変数を参照したらエラー(t *testing.T) {
   173  	res := new(Response)
   174  	res.RC = 1
   175  	res.St = "2015-01-01 12:34:56.789"
   176  	res.Et = "2015-01-01 13:00:00.000"
   177  	res.Var = "testout"
   178  	AddJobValue("test", res)
   179  
   180  	v := NewVariable("$MJtest2:RC$")
   181  	_, err := v.Expand()
   182  	if err == nil {
   183  		t.Error("エラーが発生しなかった。")
   184  	}
   185  }
   186  
   187  func TestExpand_servantではジョブネットワーク変数を参照したらエラー(t *testing.T) {
   188  	res := new(Response)
   189  	res.RC = 1
   190  	res.St = "2015-01-01 12:34:56.789"
   191  	res.Et = "2015-01-01 13:00:00.000"
   192  	res.Var = "testout"
   193  	AddJobValue("test", res)
   194  
   195  	v := NewVariable("$SJtest:RC$")
   196  	_, err := v.Expand()
   197  	if err == nil {
   198  		t.Error("エラーが発生しなかった。")
   199  	}
   200  }
   201  
   202  func TestExpandStringVars_文字列中の変数を展開できる(t *testing.T) {
   203  	AddSysValue("JOBNET", "ID", "123456")
   204  	os.Setenv("TEST", "testenv")
   205  	res := new(Response)
   206  	res.RC = 1
   207  	res.St = "2015-01-01 12:34:56.789"
   208  	res.Et = "2015-01-01 13:00:00.000"
   209  	res.Var = "testout"
   210  	AddJobValue("test", res)
   211  
   212  	before := `NETWORK[$MSJOBNET:ID$] END. JOBRC[$MJtest:RC$] TESTENV[$METEST$]`
   213  	after, err := ExpandStringVars(before, plcMaster, kndSys, kndEnv, kndJob)
   214  	if err != nil {
   215  		t.Fatalf("想定外のエラーが発生した[%s]", err)
   216  	}
   217  
   218  	expect := `NETWORK[123456] END. JOBRC[1] TESTENV[testenv]`
   219  	if after != expect {
   220  		t.Errorf("変数展開後の文字列が想定と一致しない。")
   221  		t.Logf("想定値:%s", expect)
   222  		t.Logf("実績値:%s", after)
   223  	}
   224  }
   225  
   226  func TestExpandStringVars_利用可能種別に指定した変数種別だけを展開する(t *testing.T) {
   227  	AddSysValue("JOBNET", "ID", "123456")
   228  	os.Setenv("TEST", "testenv")
   229  	res := new(Response)
   230  	res.RC = 1
   231  	AddJobValue("test", res)
   232  
   233  	before := `NETWORK[$MSJOBNET:ID$] END. JOBRC[$MJtest:RC$] TESTENV[$METEST$]`
   234  	after, err := ExpandStringVars(before, plcMaster, kndEnv)
   235  	if err != nil {
   236  		t.Fatalf("想定外のエラーが発生した[%s]", err)
   237  	}
   238  
   239  	expect := `NETWORK[$MSJOBNET:ID$] END. JOBRC[$MJtest:RC$] TESTENV[testenv]`
   240  	if after != expect {
   241  		t.Errorf("変数展開後の文字列が想定と一致しない。")
   242  		t.Logf("想定値:%s", expect)
   243  		t.Logf("実績値:%s", after)
   244  	}
   245  }
   246  
   247  func TestExpandStringVars_場所識別子が異なる変数を無視する(t *testing.T) {
   248  	os.Setenv("TEST", "testenv")
   249  
   250  	before := `MASTERENV[$METEST$] SERVANTENV[$SETEST$]`
   251  	after, err := ExpandStringVars(before, plcMaster, kndSys, kndEnv, kndJob)
   252  	if err != nil {
   253  		t.Fatalf("想定外のエラーが発生した[%s]", err)
   254  	}
   255  
   256  	expect := `MASTERENV[testenv] SERVANTENV[$SETEST$]`
   257  	if after != expect {
   258  		t.Errorf("変数展開後の文字列が想定と一致しない。")
   259  		t.Logf("想定値:%s", expect)
   260  		t.Logf("実績値:%s", after)
   261  	}
   262  }
   263  
   264  func TestExpandTime(t *testing.T) {
   265  	v := NewVariable("$ST20150730123456.789$")
   266  	result, err := v.expandTime()
   267  	if err != nil {
   268  		t.Fatalf("想定外のエラーが発生した[%s]", err)
   269  	}
   270  	if result != "2015-07-30 21:34:56.789" {
   271  		t.Errorf("変数展開後の文字列が想定と一致しない。")
   272  		t.Logf("想定値:%s", "2015-07-30 21:34:56.789")
   273  		t.Logf("実績値:%s", result)
   274  	}
   275  }