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 }