Skip to content

Commit

Permalink
Merge f317768 into 22ef065
Browse files Browse the repository at this point in the history
  • Loading branch information
LorenzKahl committed Jan 2, 2018
2 parents 22ef065 + f317768 commit 7a7b3f0
Show file tree
Hide file tree
Showing 5 changed files with 266 additions and 0 deletions.
52 changes: 52 additions & 0 deletions source/export/transformer/JspEqualityTransformer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
'use strict';

/**
* Requirements
* @ignore
*/
const NodeTransformer = require('entoj-system').export.transformer.NodeTransformer;
const OperandNode = require('entoj-system').export.ast.OperandNode;


/**
* Transforms boolean tests to their empty / not empty equivalents
*/
class JspEqualityTransformer extends NodeTransformer
{
/**
* @inheritDoc
*/
static get className()
{
return 'export.transformer/JspEqualityTransformer';
}


/**
* @inheritDoc
*/
transformNode(node, transformer, options)
{
if (node.is('ConditionNode'))
{
for (const currentNode of node.children)
{
if (currentNode.is('OperandNode', {value: ['===']}))
{
node.children.insertAfter(currentNode, new OperandNode({value: '=='}));
node.children.remove(currentNode);
continue;
}
else if (currentNode.is('OperandNode', {value: ['!==']}))
{
node.children.insertAfter(currentNode, new OperandNode({value: '!='}));
node.children.remove(currentNode);
continue;
}
}
}
return Promise.resolve(node);
}
}

module.exports.JspEqualityTransformer = JspEqualityTransformer;
2 changes: 2 additions & 0 deletions source/export/transformer/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
module.exports =
{
JspConcatTransformer: require('./JspConcatTransformer.js').JspConcatTransformer,
JspEqualityTransformer: require('./JspEqualityTransformer.js').JspEqualityTransformer,
JspEmptyTransformer: require('./JspEmptyTransformer.js').JspEmptyTransformer,
JspForEachTransformer: require('./JspForEachTransformer.js').JspForEachTransformer,
JspInlineMacroCallTransformer: require('./JspInlineMacroCallTransformer.js').JspInlineMacroCallTransformer,
Expand All @@ -13,6 +14,7 @@ module.exports =
[
require('entoj-system').export.transformer.RemoveLoadModelTransformer,
require('./JspConcatTransformer.js').JspConcatTransformer,
require('./JspEqualityTransformer.js').JspEqualityTransformer,
require('./JspEmptyTransformer.js').JspEmptyTransformer,
require('./JspForEachTransformer.js').JspForEachTransformer,
require('./JspInlineMacroCallTransformer.js').JspInlineMacroCallTransformer
Expand Down
179 changes: 179 additions & 0 deletions test/__fixtures__/transformer/JspEqualityTransformer.expected.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
{
"type": "NodeList",
"children": [
{
"type": "IfNode",
"children": [],
"condition": {
"type": "ConditionNode",
"children": [
{
"type": "LiteralNode",
"value": "string"
},
{
"type": "OperandNode",
"value": "=="
},
{
"type": "VariableNode",
"fields": [
"variable"
]
}
]
},
"elseIfChildren": [],
"elseChildren": []
},
{
"type": "TextNode",
"value": "\n"
},
{
"type": "IfNode",
"children": [],
"condition": {
"type": "ConditionNode",
"children": [
{
"type": "LiteralNode",
"value": "string"
},
{
"type": "OperandNode",
"value": "=="
},
{
"type": "VariableNode",
"fields": [
"variable"
]
}
]
},
"elseIfChildren": [],
"elseChildren": []
},
{
"type": "TextNode",
"value": "\n"
},
{
"type": "IfNode",
"children": [],
"condition": {
"type": "ConditionNode",
"children": [
{
"type": "LiteralNode",
"value": "string"
},
{
"type": "OperandNode",
"value": "=="
},
{
"type": "LiteralNode",
"value": true
}
]
},
"elseIfChildren": [],
"elseChildren": []
},
{
"type": "TextNode",
"value": "\n"
},
{
"type": "IfNode",
"children": [],
"condition": {
"type": "ConditionNode",
"children": [
{
"type": "LiteralNode",
"value": "string"
},
{
"type": "OperandNode",
"value": "=="
},
{
"type": "LiteralNode",
"value": true
}
]
},
"elseIfChildren": [],
"elseChildren": []
},
{
"type": "TextNode",
"value": "\n"
},
{
"type": "IfNode",
"children": [],
"condition": {
"type": "ConditionNode",
"children": [
{
"type": "VariableNode",
"fields": [
"foo"
]
},
{
"type": "OperandNode",
"value": "!="
},
{
"type": "VariableNode",
"fields": [
"bar"
]
}
]
},
"elseIfChildren": [],
"elseChildren": []
},
{
"type": "TextNode",
"value": "\n"
},
{
"type": "IfNode",
"children": [],
"condition": {
"type": "ConditionNode",
"children": [
{
"type": "VariableNode",
"fields": [
"foo"
]
},
{
"type": "OperandNode",
"value": "!="
},
{
"type": "VariableNode",
"fields": [
"bar"
]
}
]
},
"elseIfChildren": [],
"elseChildren": []
},
{
"type": "TextNode",
"value": "\n"
}
]
}
6 changes: 6 additions & 0 deletions test/__fixtures__/transformer/JspEqualityTransformer.input.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{% if 'string' == variable %}{% endif %}
{% if 'string' === variable %}{% endif %}
{% if 'string' == true %}{% endif %}
{% if 'string' === true %}{% endif %}
{% if foo != bar %}{% endif %}
{% if foo !== bar %}{% endif %}
27 changes: 27 additions & 0 deletions test/export/transformer/JspEqualityTransformerSpec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
'use strict';

/**
* Requirements
*/
const JspEqualityTransformer = require(JSP_SOURCE + '/export/transformer/JspEqualityTransformer.js').JspEqualityTransformer;
const nodeTransformerSpec = require('entoj-system/test').export.NodeTransformerShared;


/**
* Spec
*/
describe(JspEqualityTransformer.className, function()
{
/**
* NodeTransformer Test
*/
const options =
{
basePath: JSP_FIXTURES + '/transformer'
};
const testFixtures =
{
'should decorate variables': 'JspEqualityTransformer'
};
nodeTransformerSpec(JspEqualityTransformer, 'export.transformer/JspEqualityTransformer', undefined, testFixtures, options);
});

0 comments on commit 7a7b3f0

Please sign in to comment.