Skip to content

Commit

Permalink
FLUID-5026: Updated branch with latest changes in FLUID-5084
Browse files Browse the repository at this point in the history
  • Loading branch information
kaspermarkus committed Aug 16, 2013
2 parents 968b54a + 6939ef3 commit 1170430
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 68 deletions.
7 changes: 6 additions & 1 deletion src/framework/core/js/ModelTransformation.js
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ var fluid = fluid || fluid_1_5;
};

// unsupported, NON-API function
fluid.model.transform.valueToRule = function (value) {
fluid.model.transform.literalValueToRule = function (value) {
return {
transform: {
type: "fluid.transforms.literalValue",
Expand Down Expand Up @@ -365,8 +365,13 @@ var fluid = fluid || fluid_1_5;
}
// special dispensation to allow "value" at top level
// TODO: Proper escaping rules
<<<<<<< HEAD
else if (rule.value && transform.outputPrefix !== "") {
rule = fluid.model.transform.valueToRule(rule.value);
=======
else if (rule.literalValue && expander.outputPrefix !== "") {
rule = fluid.model.transform.literalValueToRule(rule.literalValue);
>>>>>>> FLUID-5084
}
var togo;
if (rule.transform) {
Expand Down
28 changes: 9 additions & 19 deletions src/framework/core/js/ModelTransformationTransforms.js
Original file line number Diff line number Diff line change
Expand Up @@ -127,31 +127,21 @@ var fluid = fluid || fluid_1_5;
return inputs.value * inputs.factor + inputs.offset;
};

fluid.transforms.linearScale.invert = function (transformSpec, transform) {
/* TODO: This inversion doesn't work if the value and factors are given as paths in the source model */
fluid.transforms.linearScale.invert = function (transformSpec, expander) {
var togo = fluid.copy(transformSpec);
togo.type = "fluid.transforms.inverseLinearScale";
togo.type = "fluid.transforms.linearScale";
if (togo.factor) {
togo.factor = (togo.factor === 0) ? 0 : 1 / togo.factor;
}
if (togo.offset) {
togo.offset = - togo.offset * (togo.factor != undefined ? togo.factor : 1);
}
togo.valuePath = fluid.model.composePaths(transform.outputPrefix, transformSpec.outputPath);
togo.outputPath = fluid.model.composePaths(transform.inputPrefix, transformSpec.valuePath);
return togo;
};

fluid.defaults("fluid.transforms.inverseLinearScale", {
gradeNames: [ "fluid.multiInputTransformFunction", "fluid.standardOutputTransformFunction" ],
inputVariables: {
value: null,
factor: 1,
offset: 0
}
});

/* inverse linear transformation y = (x-b)/a where a=factor, b=offset and x=value */
fluid.transforms.inverseLinearScale = function (inputs, transformSpec, transform) {
if (typeof(inputs.value) !== "number" || typeof(inputs.factor) !== "number" || typeof(inputs.offset) !== "number") {
return undefined;
}
return (inputs.value - inputs.offset) / inputs.factor;
};

fluid.defaults("fluid.transforms.binaryOp", {
gradeNames: [ "fluid.multiInputTransformFunction", "fluid.standardOutputTransformFunction" ],
inputVariables: {
Expand Down
73 changes: 25 additions & 48 deletions src/tests/framework-tests/core/js/ModelTransformationTests.js
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ https://github.com/fluid-project/infusion/raw/master/Infusion-LICENSE.txt
},
invertedRules: {
transform: [{
type: "fluid.transforms.inverseLinearScale",
type: "fluid.transforms.linearScale",
outputPath: "dozen",
valuePath: "value"
}]
Expand Down Expand Up @@ -226,10 +226,10 @@ https://github.com/fluid-project/infusion/raw/master/Infusion-LICENSE.txt
},
invertedRules: {
transform: [{
type: "fluid.transforms.inverseLinearScale",
type: "fluid.transforms.linearScale",
outputPath: "dozen",
valuePath: "value",
factor: 0.25
factor: 4
}]
},
method: "assertDeepEq",
Expand All @@ -239,20 +239,33 @@ https://github.com/fluid-project/infusion/raw/master/Infusion-LICENSE.txt
fullyInvertable: true
}, {
message: "linearScale - factor parameter and offset",
model: {
dozen: 12
},
transform: {
value: {
transform: {
type: "fluid.transforms.linearScale",
value: 12,
valuePath: "dozen",
factor: 0.50,
offset: 100
}
}
},
invertedRules: {
expander: [{
type: "fluid.transforms.linearScale",
outputPath: "dozen",
valuePath: "value",
factor: 2,
offset: -200
}]
},
method: "assertDeepEq",
expected: {
value: 106
}
},
fullyInvertable: true
}, {
message: "linearScale - everything by path",
transform: {
Expand All @@ -270,39 +283,6 @@ https://github.com/fluid-project/infusion/raw/master/Infusion-LICENSE.txt
testOneStructure(linearScaleTests);
});

var inverseLinearScaleTests = [{
message: "inverseLinearScale - factor parameter and offset",
transform: {
value: {
transform: {
type: "fluid.transforms.inverseLinearScale",
value: 106,
factor: 0.50,
offset: 100
}
}
},
method: "assertDeepEq",
expected: {
value: 12
}
}, {
message: "inverseLinearScale - everything by path",
transform: {
type: "fluid.transforms.inverseLinearScale",
valuePath: "lots",
factorPath: "halfdozen",
offsetPath: "hundred"
},
method: "assertEquals",
expected: 12,
expandWrap: true
}];

jqUnit.test("fluid.transforms.inverseLinearScale()", function () {
testOneStructure(inverseLinearScaleTests);
});

var binaryOpTests = [{
message: "binaryOp - ===",
expandWrap: true,
Expand Down Expand Up @@ -1220,7 +1200,7 @@ https://github.com/fluid-project/infusion/raw/master/Infusion-LICENSE.txt
jqUnit.assertDeepEq("wildcards, recursive transform and dot-paths", expected, result);
});

jqUnit.test("transform with path named value and literalValue", function () {
jqUnit.test("Test of keyword literalValue as key and outputting 'literalValue' to output document", function () {
var model = {
"Magnification": 100
};
Expand All @@ -1229,34 +1209,31 @@ https://github.com/fluid-project/infusion/raw/master/Infusion-LICENSE.txt
transform: {
type: "fluid.transforms.value",
inputPath: "Magnification",
outputPath: "value"
outputPath: "literalValue"
},
dataType: {
transform: {
type: "fluid.transforms.literalValue",
value: "REG_DWORD"
}
"dataType": {
"literalValue": "REG_DWORD"
}
}
};

var expected = {
"Magnification": {
"value": 100,
"literalValue": 100,
"dataType": "REG_DWORD"
}
};

var actual = fluid.model.transform(model, transform);

jqUnit.assertDeepEq("Model transformed with value", actual, expected);
jqUnit.assertDeepEq("Model transformed with value", expected, actual);
});

jqUnit.test("transform with compact inputPath", function () {
var rules = {
feline: "cat",
kangaroo: {
value: "literal value"
literalValue: "literal value"
},
"farm.goat": "goat",
"farm.sheep": "sheep"
Expand Down

0 comments on commit 1170430

Please sign in to comment.