Просмотр исходного кода

Fixed some bugs in munge and jsext Object extend to get functioning ui. fixes #1780, #1782, #1770

http://source.rd.rcg.local/trac/eagle6/changeset/1448/Eagle6_SVN
Philip Murray 12 лет назад
Родитель
Сommit
fdc34f6666

+ 2 - 1
lib/pipeline/Value.js

@@ -120,7 +120,7 @@ var Value = module.exports = Value = (function(){
 			return l == r ? 0 : l ? 1 : -1;
 		case "object":
 			if (l instanceof Array) {
-				for (var i = 0, ll = l.length, rl = r.length, len = Math.min(ll, rl); i < len; i++) {
+				for (var i = 0, ll = l.length, rl = r.length, len = Math.max(ll, rl); i <= len; i++) {
 					if (i >= ll) {
 						if (i >= rl) return 0; // arrays are same length
 						return -1; // left array is shorter
@@ -129,6 +129,7 @@ var Value = module.exports = Value = (function(){
 					var cmp = Value.compare(l[i], r[i]);
 					if (cmp !== 0) return cmp;
 				}
+				
 				throw new Error("logic error in Value.compare for Array types!");
 			}
 			if (l instanceof Date) return l < r ? -1 : l > r ? 1 : 0;

+ 1 - 1
lib/pipeline/expressions/Expression.js

@@ -325,7 +325,7 @@ var Expression = module.exports = (function(){
 			var path = Expression.removeFieldPrefix(obj);
 			return new FieldPathExpression(path);
 		}
-		else if (t === "object" && obj.constructor === Object) return Expression.parseObject(obj, new ObjectCtx({isDocumentOk: true}));
+		else if (t === "object" && obj && obj.constructor === Object) return Expression.parseObject(obj, new ObjectCtx({isDocumentOk: true}));
 		else return new ConstantExpression(obj);
 	};
 

+ 15 - 1
test/lib/pipeline/expressions/CompareExpression.js

@@ -46,7 +46,21 @@ module.exports = {
 				"should return false if first > second {$eq:[1,0]}": function testEqGt(){
 					assert.equal(Expression.parseOperand({$eq:[1,0]}).evaluate({}), false);
 				},
-
+				"should return false if first and second are different types {$eq:[null,0]}": function testEqGt(){
+					assert.equal(Expression.parseOperand({$eq:[null,0]}).evaluate({}), false);
+				},
+				"should return false if first and second are different types {$eq:[undefined,0]}": function testEqGt(){
+					assert.equal(Expression.parseOperand({$eq:[undefined,0]}).evaluate({}), false);
+				},
+				"should return false if first and second are different arrays {$eq:[[1],[null]]}": function testEqGt(){
+					assert.equal(Expression.parseOperand({$eq:[[1],[null]]}).evaluate({}), false);
+				},
+				"should return false if first and second are different arrays {$eq:[[1],[]]}": function testEqGt(){
+					assert.equal(Expression.parseOperand({$eq:[[1],[]]}).evaluate({}), false);
+				},
+				"should return true if first and second are the same arrays {$eq:[[1],[1]]}": function testEqGt(){
+					assert.equal(Expression.parseOperand({$eq:[[1],[1]]}).evaluate({}), true);
+				}
 			},
 
 			"$ne": {