瀏覽代碼

Fixes #1027. Fixed minor bugs in CondExpression and added test case.

http://source.rd.rcg.local/trac/eagle6/changeset/1284/Eagle6_SVN
Spencer Rathbun 12 年之前
父節點
當前提交
79257a57df
共有 2 個文件被更改,包括 71 次插入3 次删除
  1. 9 3
      lib/pipeline/expressions/CondExpression.js
  2. 62 0
      test/lib/pipeline/expressions/CondExpression.js

+ 9 - 3
lib/pipeline/expressions/CondExpression.js

@@ -1,6 +1,10 @@
 var CondExpression = module.exports = (function(){
 	// CONSTRUCTOR
-	/* $cond expression; @see evaluate */
+	/**
+	* $cond expression; 
+	*
+	* @see evaluate 
+	**/
 	var klass = module.exports = function CondExpression(){
 		if(arguments.length !== 0) throw new Error("zero args expected");
 		base.call(this);
@@ -16,10 +20,12 @@ var CondExpression = module.exports = (function(){
 
 	proto.addOperand = function addOperand(expr) {
 		this.checkArgLimit(3);
-		base.addOperand(expr);
+		base.prototype.addOperand.call(this, expr);
 	};
 
-	/** Use the $cond operator with the following syntax:  { $cond: [ <boolean-expression>, <true-case>, <false-case> ] } **/
+	/** 
+	* Use the $cond operator with the following syntax:  { $cond: [ <boolean-expression>, <true-case>, <false-case> ] } 
+	**/
 	proto.evaluate = function evaluate(doc){
 		this.checkArgCount(3);
 		var pCond = this.operands[0].evaluate(doc),

+ 62 - 0
test/lib/pipeline/expressions/CondExpression.js

@@ -0,0 +1,62 @@
+var assert = require("assert"),
+	CondExpression = require("../../../../lib/pipeline/expressions/CondExpression"),
+	Expression = require("../../../../lib/pipeline/expressions/Expression");
+
+module.exports = {
+
+	"CondExpression": {
+
+		"constructor()": {
+
+			"should not throw Error when constructing without args": function testConstructor(){
+				assert.doesNotThrow(function(){
+					new CondExpression();
+				});
+			}
+
+		},
+
+		"#getOpName()": {
+
+			"should return the correct op name; $cond": function testOpName(){
+				assert.equal(new CondExpression().getOpName(), "$cond");
+			}
+
+		},
+
+		"#getFactory()": {
+
+			"should return the constructor for this class": function factoryIsConstructor(){
+				assert.strictEqual(new CondExpression().getFactory(), undefined);
+			}
+
+		},
+
+		"#evaluate()": {
+
+			"should evaluate boolean expression as true, then return 1; [ true === true, 1, 0 ]": function testStuff(){
+				assert.strictEqual(Expression.parseOperand({$cond:[ true === true, 1, 0 ]}).evaluate({}), 1);
+			},
+
+			"should evaluate boolean expression as false, then return 0; [ false === true, 1, 0 ]": function testStuff(){
+				assert.strictEqual(Expression.parseOperand({$cond:[ false === true, 1, 0 ]}).evaluate({}), 0);
+			}, 
+
+			"should evaluate boolean expression as true, then return 1; [ (true === true) && true, 1, 0 ]": function testStuff(){
+				assert.strictEqual(Expression.parseOperand({$cond:[ (true === true) && true , 1, 0 ]}).evaluate({}), 1);
+			},
+
+			"should evaluate boolean expression as false, then return 0; [ (false === true) && true, 1, 0 ]": function testStuff(){
+				assert.strictEqual(Expression.parseOperand({$cond:[ (false === true) && true, 1, 0 ]}).evaluate({}), 0);
+			},
+
+			"should evaluate complex boolean expression as true, then return 1; [ ( 1 > 0 ) && (( 'a' == 'b' ) || ( 3 <= 5 )), 1, 0 ]": function testStuff(){
+				assert.strictEqual(Expression.parseOperand({$cond:[ ( 1 > 0 ) && (( 'a' == 'b' ) || ( 3 <= 5 )), 1, 0 ]}).evaluate({}), 1);
+			},
+		}
+
+	}
+
+};
+
+if (!module.parent)(new(require("mocha"))()).ui("exports").reporter("spec").addFile(__filename).run(process.exit);