odatafy-parser
Version:
generate odatafy ast from odata query parameters
145 lines (144 loc) • 5.59 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const assert_1 = __importDefault(require("assert"));
const computeParser_1 = __importDefault(require("../../src/parsing/computeParser"));
const nodes_1 = require("../../src/types/nodes");
function testParsingAndAST(testcase) {
it(`should parse ${testcase.type}: ${testcase.input}`, () => {
let ast = computeParser_1.default.parse(testcase.input);
assert_1.default.deepStrictEqual(ast, testcase.expectedAST);
});
}
describe('computeParser tests', () => {
[{
type: "compute Expression with Identifier",
input: "Name as LastName",
expectedAST: {
nodeType: nodes_1.NodeTypes.ComputeNode,
value: [
{
nodeType: nodes_1.NodeTypes.ComputeItemNode,
commonExpr: {
nodeType: "SymbolNode",
type: "Identifier",
value: "Name"
},
computeIdentifier: "LastName"
}
]
}
},
{
type: "compute Expression with MathExpression",
input: "Age add 1 as NewAge",
expectedAST: {
nodeType: nodes_1.NodeTypes.ComputeNode,
value: [
{
nodeType: nodes_1.NodeTypes.ComputeItemNode,
commonExpr: {
nodeType: "OperatorNode",
op: "add",
left: {
nodeType: "SymbolNode",
type: "Identifier",
value: "Age"
},
right: {
nodeType: "ConstantNode",
type: "Integer",
value: 1
}
},
computeIdentifier: "NewAge"
}
]
}
},
{
type: "compute Expression with FunctionCall",
input: "concat(Name,'Petersen') as LastName",
expectedAST: {
nodeType: nodes_1.NodeTypes.ComputeNode,
value: [
{
nodeType: nodes_1.NodeTypes.ComputeItemNode,
commonExpr: {
nodeType: "FuncNode2Args",
func: "concat",
args: [
{
nodeType: "SymbolNode",
type: "Identifier",
value: "Name"
},
{
nodeType: "ConstantNode",
type: "String",
value: "Petersen"
}
]
},
computeIdentifier: "LastName"
}
]
}
},
{
type: "compute Expression with filterExpression",
input: "Age eq 18 as isOfLegalAge",
expectedAST: {
nodeType: nodes_1.NodeTypes.ComputeNode,
value: [
{
nodeType: nodes_1.NodeTypes.ComputeItemNode,
commonExpr: {
nodeType: "OperatorNode",
op: "eq",
left: {
"nodeType": "SymbolNode",
"type": "Identifier",
"value": "Age"
},
right: {
nodeType: "ConstantNode",
type: "Integer",
value: 18
}
},
computeIdentifier: "isOfLegalAge"
}
]
}
},
{
type: "multiple computeExpressions",
input: "Age as Alter,Name as LastName",
expectedAST: {
nodeType: nodes_1.NodeTypes.ComputeNode,
value: [
{
nodeType: nodes_1.NodeTypes.ComputeItemNode,
commonExpr: {
nodeType: "SymbolNode",
type: "Identifier",
value: "Age"
},
computeIdentifier: "Alter"
},
{
nodeType: nodes_1.NodeTypes.ComputeItemNode,
commonExpr: {
nodeType: "SymbolNode",
type: "Identifier",
value: "Name"
},
computeIdentifier: "LastName"
}
]
}
}].forEach(testcase => testParsingAndAST(testcase));
});