Skip to content

Commit

Permalink
补充测试用例
Browse files Browse the repository at this point in the history
  • Loading branch information
X37ddV committed Jul 17, 2017
1 parent 3dc2f8e commit b891b37
Show file tree
Hide file tree
Showing 8 changed files with 67 additions and 24 deletions.
26 changes: 21 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
### Simple calculation
```javascript
var exprManager = new window.ExprManager();

var expr = "0.1 + 0.2";
var v = exprManager.calc(expr);
if (!v.errorMsg) {
Expand All @@ -17,15 +18,18 @@ if (!v.errorMsg) {
} else {
console.log(v.errorMsg);
}

var calcData = {v1: "hello", v2: "world"};
expr = "v1 + ' ' + v2 + '!'";
v = exprManager.calc(expr, calcData);
console.log(v.toValue());
// => "hello world!"

expr = "IIf(1 > 2, 'a', 'b')";
v = exprManager.calc(expr);
console.log(v.toValue());
// => "b"

expr = "123.ToString()"
v = exprManager.calc(expr);
console.log(v.toValue());
Expand Down Expand Up @@ -80,7 +84,9 @@ var data = {
var context = {
Field0: "!"
};

exprManager.init(data, dataContext, context);

var tableName = "Table";
var dataCursor = {
"Table": 0,
Expand All @@ -90,38 +96,48 @@ expr = "Field1 + ' ' + SubTable[0].Field1 + $C.Field0";
v = exprManager.calcExpr(expr, tableName, dataCursor);
console.log(v.toValue());
// => "Hello World!"

var t = exprManager.calcDependencies(expr, tableName);
console.log(t.dependencies);
// => ["Table.Field1", "Table.SubTable", "Table.SubTable.Field1"]
```
### Advanced dependent calculation
```javascript
exprManager.resetExpression();

var doCalc = function(type, info) {
console.log(type);
};
// 添加具有依赖关系的表达式

exprManager.addExpression("Field1 + ' ' + SubTable[0].Field1",
"Table", "CalcField0", ["load", "add", "update", "remove"],
doCalc, null);
exprManager.addExpression("CalcField0 + SubTable.Count().ToString()",
"Table", "CalcField1", ["load", "add", "update", "remove"],
doCalc, null);

var errorMsg = exprManager.checkAndSort();
if (!errorMsg) {
exprManager.calcExpression("load", {
entityName: "Table"
}); // => "load"
});
// => "load"

exprManager.calcExpression("add", {
entityName: "Table"
}); // => "add"
});
// => "add"

exprManager.calcExpression("update", {
entityName: "Table",
propertyName: "Field1"
}); // => "update"
});
// => "update"

exprManager.calcExpression("remove", {
entityName: "Table.SubTable"
}); // => "remove"
});
// => "remove"
} else {
console.log(errorMsg)
}
Expand Down
2 changes: 1 addition & 1 deletion docs/expr-manager.html
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ <h1>expr-manager.js</h1>
<div class="pilwrap ">
<a class="pilcrow" href="#section-1">&#182;</a>
</div>
<pre><code>expr-manager.js <span class="hljs-number">0.1</span><span class="hljs-number">.9</span>
<pre><code>expr-manager.js <span class="hljs-number">0.2</span><span class="hljs-number">.0</span>
https:<span class="hljs-comment">//github.com/X37ddV/expr-manager</span>
(c) <span class="hljs-number">2016</span><span class="hljs-number">-2017</span> X37ddV
Released under the MIT License.
Expand Down
2 changes: 1 addition & 1 deletion expr-manager.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// expr-manager.js 0.1.9
// expr-manager.js 0.2.0
// https://github.com/X37ddV/expr-manager
// (c) 2016-2017 X37ddV
// Released under the MIT License.
Expand Down
2 changes: 1 addition & 1 deletion gulpfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ gulp.task("build:example", function() {

gulp.task("build:docs", function() {
docco.document({
args: ["expr-manager.js", "usage.of.expr-manager.js"],
args: ["expr-manager.js", "test/usage.of.expr-manager.js"],
layout: "parallel",
output: "docs",
template: null,
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "expr-manager",
"version": "0.1.9",
"version": "0.2.0",
"description": "Parse, validate, calc, and manage expression",
"main": "expr-manager.js",
"types": "expr-manager.d.js",
Expand Down
16 changes: 9 additions & 7 deletions test/data/test_expressions.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ var exprDataCalc = {
['$C.userId + ""', '"admin"'],
//子实体、实体,单条数据
['Entity1.ID', 'undefined', 'array 无法做属性访问操作'],
['Entity1.Sum("1/PN2")', 'undefined', 'null 不能作为除数使用', 'E1.Entity1|E1.Entity1.PN2'],
['Root().E1[0]', cmpOE1_0, '', 'E1'],
['Root()["E1"]', cmpAE1, ''], // 正确: 字符串下标访问,不计算依赖关系
['Entity1[0]', cmpOE1Entity1_0, '', 'E1.Entity1'],
Expand Down Expand Up @@ -1359,12 +1360,13 @@ var exprFunction = {

window.demoExpr = [exprDataCalc, exprOperator, exprString, exprNumber, exprDate, exprBoolean, exprObject, exprArray, exprNull, exprErr, exprFunction];

// var exprTemp = {
// title: "临时测试",
// exprs: [
// ['Entity1.ID', 'undefined', 'array 无法做属性访问操作', 'E1.Entity1.ID']
// ]
// };
var exprCalc = {
title: "简单计算",
exprs: [
['[null, 1].Distinct("a")', 'undefined', 'null 无法获取属性: a'],
['1/0', 'undefined', '0 不能作为除数使用']
]
};

// window.demoExpr = [exprTemp];
window.demoExprCalc = [exprCalc];

41 changes: 33 additions & 8 deletions test/expr-manager.spec.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,28 @@
describe("表达式测试", function () {
var exprManager = new window.ExprManager();
// 简单计算
for (var i = 0; i < window.demoExprCalc.length; i++) {
var demo = window.demoExprCalc[i];
for (var j = 0; j < demo.exprs.length; j++) {
var expr = demo.exprs[j][0] || ""; // 表达式
var exprExpectedValue = demo.exprs[j][1] || ""; // 预期值
var exprExpectedValueError = demo.exprs[j][2] || ""; // 预期值错误
var itTitle = "[" + i + "-" + j + "]:" + demo.title + ":" + expr;
it("Value" + itTitle, (function (expr, exprExpectedValue, exprExpectedValueError) {
return function() {
var val = exprManager.calc(expr);
var exprActualValue = window.JSON.stringify(val.toValue());
var exprActualValueError = val.errorMsg;
if (exprActualValueError) {
expect(exprActualValueError).toEqual(exprExpectedValueError);
} else {
expect(exprActualValue).toEqual(exprExpectedValue);
}
}
})(expr, exprExpectedValue, exprExpectedValueError));
}
}
// 高级计算
exprManager.init(window.data, window.dataContext, window.context);
for (var i = 0; i < window.demoExpr.length; i++) {
var demo = window.demoExpr[i];
Expand Down Expand Up @@ -222,12 +245,14 @@ describe("接口测试", function () {
}
})());

it("简单计算", (function(){
return function () {
var v = exprManager.calc("1+1", {});
expect(v.toValue()).toEqual(2);
var val = exprManager.calcExpr("1+1", "E1", window.dataCursor);
expect(val.toValue()).toEqual(2);
}
})());
// it("简单计算", (function(){
// return function () {
// var v = exprManager.calc("1+1");
// expect(v.toValue()).toEqual(2);
// v = exprManager.calc("[null, 1].Distinct('a')");
// expect(v.errorMsg).toEqual("null 无法获取属性: a");
// var val = exprManager.calcExpr("1+1", "E1", window.dataCursor);
// expect(val.toValue()).toEqual(2);
// }
// })());
});
File renamed without changes.

0 comments on commit b891b37

Please sign in to comment.