github.com/TIBCOSoftware/flogo-lib@v0.5.9/core/mapper/mapper_test.go (about)

     1  package mapper
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/TIBCOSoftware/flogo-lib/core/data"
     7  	_ "github.com/TIBCOSoftware/flogo-lib/core/mapper/exprmapper/function/string/concat"
     8  	"github.com/stretchr/testify/assert"
     9  )
    10  
    11  func TestLiteralMapper(t *testing.T) {
    12  
    13  	factory := GetFactory()
    14  
    15  	mapping1 := &data.MappingDef{Type: data.MtLiteral, Value: "1", MapTo: "Simple"}
    16  	mapping2 := &data.MappingDef{Type: data.MtLiteral, Value: 2, MapTo: "Obj.key"}
    17  	mapping3 := &data.MappingDef{Type: data.MtLiteral, Value: 3, MapTo: "Array[2]"}
    18  	mapping4 := &data.MappingDef{Type: data.MtLiteral, Value: "4", MapTo: "Params.paramKey"}
    19  
    20  	mappings := []*data.MappingDef{mapping1, mapping2, mapping3, mapping4}
    21  
    22  	mapper := factory.NewMapper(&data.MapperDef{Mappings: mappings}, nil)
    23  
    24  	attr1, _ := data.NewAttribute("Simple", data.TypeInteger, nil)
    25  	attr2, _ := data.NewAttribute("Obj", data.TypeObject, nil)
    26  	attr3, _ := data.NewAttribute("Array", data.TypeArray, nil)
    27  	attr4, _ := data.NewAttribute("Params", data.TypeParams, nil)
    28  
    29  	md := map[string]*data.Attribute{attr1.Name(): attr1, attr2.Name(): attr2, attr3.Name(): attr3, attr4.Name(): attr4}
    30  	outScope := data.NewFixedScope(md)
    31  
    32  	objVal, _ := data.CoerceToObject("{\"key1\":5}")
    33  	outScope.SetAttrValue("Obj", objVal)
    34  
    35  	objVal, _ = data.CoerceToObject("{\"key1\":6}")
    36  	outScope.SetAttrValue("Obj2", objVal)
    37  
    38  	arrVal, _ := data.CoerceToArray("[1,6,3]")
    39  	outScope.SetAttrValue("Array", arrVal)
    40  
    41  	arrVal, _ = data.CoerceToArray("[7,8,9]")
    42  	outScope.SetAttrValue("Array2", arrVal)
    43  
    44  	paramVal, _ := data.CoerceToParams("{\"param1\":\"val\"}")
    45  	outScope.SetAttrValue("Params", paramVal)
    46  
    47  	paramVal, _ = data.CoerceToParams("{\"param1\":\"val2\"}")
    48  	outScope.SetAttrValue("Params2", paramVal)
    49  
    50  	err := mapper.Apply(nil, outScope)
    51  	assert.Nil(t, err)
    52  
    53  	resolver := &data.BasicResolver{}
    54  
    55  	//newVal, err := resolver.Resolve("Obj.key", outScope)
    56  	//assert.Nil(t, err)
    57  	//assert.Equal(t, 2, newVal)
    58  
    59  	newVal, err := resolver.Resolve("Array[2]", outScope)
    60  	assert.Nil(t, err)
    61  	assert.Equal(t, 3, newVal)
    62  
    63  	//newVal, err = resolver.Resolve("Params.paramKey", outScope)
    64  	//assert.Nil(t, err)
    65  	//assert.Equal(t, "4", newVal)
    66  }
    67  
    68  func TestAssignMapper(t *testing.T) {
    69  
    70  	factory := GetFactory()
    71  
    72  	mapping1 := &data.MappingDef{Type: data.MtAssign, Value: "$.SimpleI", MapTo: "SimpleO"}
    73  	mapping2 := &data.MappingDef{Type: data.MtAssign, Value: "$.ObjI.key", MapTo: "ObjO.key"}
    74  	mapping3 := &data.MappingDef{Type: data.MtAssign, Value: "$.ArrayI[2]", MapTo: "ArrayO[2]"}
    75  	mapping4 := &data.MappingDef{Type: data.MtAssign, Value: "$.ParamsI.paramKey", MapTo: "ParamsO.paramKey"}
    76  
    77  	mappings := []*data.MappingDef{mapping1, mapping2, mapping3, mapping4}
    78  
    79  	mapper := factory.NewMapper(&data.MapperDef{Mappings: mappings}, nil)
    80  
    81  	attrI1, _ := data.NewAttribute("SimpleI", data.TypeInteger, nil)
    82  	attrI2, _ := data.NewAttribute("ObjI", data.TypeObject, nil)
    83  	attrI3, _ := data.NewAttribute("ArrayI", data.TypeArray, nil)
    84  	attrI4, _ := data.NewAttribute("ParamsI", data.TypeParams, nil)
    85  
    86  	mdI := map[string]*data.Attribute{attrI1.Name(): attrI1, attrI2.Name(): attrI2, attrI3.Name(): attrI3, attrI4.Name(): attrI4}
    87  	inScope := data.NewFixedScope(mdI)
    88  
    89  	attrO1, _ := data.NewAttribute("SimpleO", data.TypeInteger, nil)
    90  	attrO2, _ := data.NewAttribute("ObjO", data.TypeObject, nil)
    91  	attrO3, _ := data.NewAttribute("ArrayO", data.TypeArray, nil)
    92  	attrO4, _ := data.NewAttribute("ParamsO", data.TypeParams, nil)
    93  
    94  	mdO := map[string]*data.Attribute{attrO1.Name(): attrO1, attrO2.Name(): attrO2, attrO3.Name(): attrO3, attrO4.Name(): attrO4}
    95  	outScope := data.NewFixedScope(mdO)
    96  
    97  	inScope.SetAttrValue("SimpleI", 1)
    98  
    99  	objVal, _ := data.CoerceToObject("{\"key\":1}")
   100  	inScope.SetAttrValue("ObjI", objVal)
   101  
   102  	arrVal, _ := data.CoerceToArray("[1,2,3]")
   103  	inScope.SetAttrValue("ArrayI", arrVal)
   104  
   105  	paramVal, _ := data.CoerceToParams("{\"paramKey\":\"val1\"}")
   106  	inScope.SetAttrValue("ParamsI", paramVal)
   107  
   108  	objVal, _ = data.CoerceToObject("{\"key1\":5}")
   109  	outScope.SetAttrValue("ObjO", objVal)
   110  
   111  	arrVal, _ = data.CoerceToArray("[4,5,6]")
   112  	outScope.SetAttrValue("ArrayO", arrVal)
   113  
   114  	paramVal, _ = data.CoerceToParams("{\"param1\":\"val\"}")
   115  	outScope.SetAttrValue("ParamsO", paramVal)
   116  
   117  	err := mapper.Apply(inScope, outScope)
   118  	assert.Nil(t, err)
   119  
   120  	resolver := &data.BasicResolver{}
   121  
   122  	newVal, err := resolver.Resolve("ObjO.key", outScope)
   123  	assert.Nil(t, err)
   124  	assert.Equal(t, 1.0, newVal)
   125  
   126  	newVal, err = resolver.Resolve("ArrayO[2]", outScope)
   127  	assert.Nil(t, err)
   128  	assert.Equal(t, 3.0, newVal)
   129  
   130  	newVal, err = resolver.Resolve("ParamsO.paramKey", outScope)
   131  	assert.Nil(t, err)
   132  	assert.Equal(t, "val1", newVal)
   133  }
   134  
   135  func BenchmarkAssignMapper(b *testing.B) {
   136  
   137  	mapping1 := &data.MappingDef{Type: data.MtAssign, Value: "$.Simple0", MapTo: "SimpleO"}
   138  
   139  	attrI1, _ := data.NewAttribute("Simple0", data.TypeInteger, nil)
   140  
   141  	mdI := map[string]*data.Attribute{attrI1.Name(): attrI1}
   142  	inScope := data.NewFixedScope(mdI)
   143  
   144  	attrO1, _ := data.NewAttribute("SimpleO", data.TypeInteger, nil)
   145  
   146  	mdO := map[string]*data.Attribute{attrO1.Name(): attrO1}
   147  	outScope := data.NewFixedScope(mdO)
   148  
   149  	inScope.SetAttrValue("Simple0", 1)
   150  
   151  	mapper := GetFactory().NewMapper(&data.MapperDef{Mappings: []*data.MappingDef{mapping1}}, nil)
   152  
   153  	for n := 0; n < b.N; n++ {
   154  
   155  		err := mapper.Apply(inScope, outScope)
   156  		if err != nil {
   157  			panic(err)
   158  		}
   159  
   160  		attr, ok := outScope.GetAttr("SimpleO")
   161  		if ok {
   162  			if attr.Value() != 1 {
   163  				panic("Mapper error")
   164  			}
   165  		}
   166  	}
   167  }
   168  
   169  func BenchmarkLiteralMapper(b *testing.B) {
   170  
   171  	mapping1 := &data.MappingDef{Type: data.MtLiteral, Value: "testing", MapTo: "SimpleO"}
   172  
   173  	attrO1, _ := data.NewAttribute("SimpleO", data.TypeString, nil)
   174  
   175  	mdO := map[string]*data.Attribute{attrO1.Name(): attrO1}
   176  	outScope := data.NewFixedScope(mdO)
   177  
   178  	mapper := GetFactory().NewMapper(&data.MapperDef{Mappings: []*data.MappingDef{mapping1}}, nil)
   179  
   180  	for n := 0; n < b.N; n++ {
   181  
   182  		err := mapper.Apply(nil, outScope)
   183  		if err != nil {
   184  			panic(err)
   185  		}
   186  
   187  		attr, ok := outScope.GetAttr("SimpleO")
   188  		if ok {
   189  			if attr.Value() != "testing" {
   190  				panic("Mapper error")
   191  			}
   192  		}
   193  	}
   194  }
   195  
   196  func BenchmarkExpressionMapperFunction(b *testing.B) {
   197  
   198  	mapping1 := &data.MappingDef{Type: data.MtExpression, Value: `string.concat("Hello ",$.Simple0)`, MapTo: "SimpleO"}
   199  
   200  	attrI1, _ := data.NewAttribute("Simple0", data.TypeString, nil)
   201  
   202  	mdI := map[string]*data.Attribute{attrI1.Name(): attrI1}
   203  	inScope := data.NewFixedScope(mdI)
   204  
   205  	attrO1, _ := data.NewAttribute("SimpleO", data.TypeString, nil)
   206  
   207  	mdO := map[string]*data.Attribute{attrO1.Name(): attrO1}
   208  	outScope := data.NewFixedScope(mdO)
   209  
   210  	inScope.SetAttrValue("Simple0", "FLOGO")
   211  
   212  	mapper := GetFactory().NewMapper(&data.MapperDef{Mappings: []*data.MappingDef{mapping1}}, nil)
   213  
   214  	for n := 0; n < b.N; n++ {
   215  
   216  		err := mapper.Apply(inScope, outScope)
   217  		if err != nil {
   218  			panic(err)
   219  		}
   220  
   221  		attr, ok := outScope.GetAttr("Hello FLOGO")
   222  		if ok {
   223  			if attr.Value() != 1 {
   224  				panic("Mapper error")
   225  			}
   226  		}
   227  	}
   228  }
   229  
   230  func BenchmarkExpressionMapperConditionExpr(b *testing.B) {
   231  
   232  	mapping1 := &data.MappingDef{Type: data.MtExpression, Value: `$.Simple0 == "FLOGO"`, MapTo: "SimpleO"}
   233  
   234  	attrI1, _ := data.NewAttribute("Simple0", data.TypeString, nil)
   235  
   236  	mdI := map[string]*data.Attribute{attrI1.Name(): attrI1}
   237  	inScope := data.NewFixedScope(mdI)
   238  
   239  	attrO1, _ := data.NewAttribute("SimpleO", data.TypeBoolean, nil)
   240  
   241  	mdO := map[string]*data.Attribute{attrO1.Name(): attrO1}
   242  	outScope := data.NewFixedScope(mdO)
   243  
   244  	inScope.SetAttrValue("Simple0", "FLOGO")
   245  
   246  	mapper := GetFactory().NewMapper(&data.MapperDef{Mappings: []*data.MappingDef{mapping1}}, nil)
   247  
   248  	for n := 0; n < b.N; n++ {
   249  
   250  		err := mapper.Apply(inScope, outScope)
   251  		if err != nil {
   252  			panic(err)
   253  		}
   254  
   255  		attr, ok := outScope.GetAttr("Hello FLOGO")
   256  		if ok {
   257  			if attr.Value() == true {
   258  				panic("Mapper error")
   259  			}
   260  		}
   261  	}
   262  }
   263  
   264  func BenchmarkExpressionMapperTernaryExpr(b *testing.B) {
   265  
   266  	mapping1 := &data.MappingDef{Type: data.MtExpression, Value: `$.Simple0 == "FLOGO" ? "Welcome FLOGO" : "Bye bye !"`, MapTo: "SimpleO"}
   267  
   268  	attrI1, _ := data.NewAttribute("Simple0", data.TypeString, nil)
   269  
   270  	mdI := map[string]*data.Attribute{attrI1.Name(): attrI1}
   271  	inScope := data.NewFixedScope(mdI)
   272  
   273  	attrO1, _ := data.NewAttribute("SimpleO", data.TypeString, nil)
   274  
   275  	mdO := map[string]*data.Attribute{attrO1.Name(): attrO1}
   276  	outScope := data.NewFixedScope(mdO)
   277  
   278  	inScope.SetAttrValue("Simple0", "FLOGO")
   279  
   280  	mapper := GetFactory().NewMapper(&data.MapperDef{Mappings: []*data.MappingDef{mapping1}}, nil)
   281  
   282  	for n := 0; n < b.N; n++ {
   283  
   284  		err := mapper.Apply(inScope, outScope)
   285  		if err != nil {
   286  			panic(err)
   287  		}
   288  
   289  		attr, ok := outScope.GetAttr("Welcome FLOGO")
   290  		if ok {
   291  			if attr.Value() == true {
   292  				panic("Mapper error")
   293  			}
   294  		}
   295  	}
   296  }