mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-11-15 11:13:50 +00:00
Fixed: CPComparisonPredicate does never evaluate to true for a predicate like 'something != nil'
An example:
var array = @[ @{@"Name": @"1"},
@{@"Name": @"2", @"approveTime": @"Now"}
];
var predicate = [CPPredicate predicateWithFormat:@"approveTime != nil"];
CPLog(@"result: %@", [array filteredArrayUsingPredicate:predicate]); // result: <empty array>
If I run this in Cappuccino I get an empty array
If I run it in Cocoa on a Mac I get:
result: (
{
Name = 2;
approveTime = Now;
}
This commit is contained in:
1 parent
7dc77ed609
commit
f5937a6fad
2 files changed
+23
-4
No files matched your search
@@ -287,10 +287,13 @@
|
||||
rightIsNil = (rhs == nil || [rhs isEqual:[CPNull null]]);
|
||||
|
||||
if ((leftIsNil || rightIsNil) && _type != CPCustomSelectorPredicateOperatorType)
|
||||
return (leftIsNil == rightIsNil &&
|
||||
(_type == CPEqualToPredicateOperatorType ||
|
||||
_type == CPLessThanOrEqualToPredicateOperatorType ||
|
||||
_type == CPGreaterThanOrEqualToPredicateOperatorType));
|
||||
return (leftIsNil === rightIsNil &&
|
||||
(_type === CPEqualToPredicateOperatorType ||
|
||||
_type === CPLessThanOrEqualToPredicateOperatorType ||
|
||||
_type === CPGreaterThanOrEqualToPredicateOperatorType))
|
||||
||
|
||||
(leftIsNil !== rightIsNil &&
|
||||
(_type === CPNotEqualToPredicateOperatorType));
|
||||
|
||||
var string_compare_options = 0;
|
||||
|
||||
|
||||
@@ -271,6 +271,22 @@
|
||||
pred = [[CPComparisonPredicate alloc] initWithLeftExpression:[CPExpression expressionForConstantValue:nil] rightExpression:[CPExpression expressionForConstantValue:nil] modifier:CPDirectPredicateModifier type:CPBeginsWithPredicateOperatorType options:0];
|
||||
|
||||
[self assertFalse:[pred evaluateWithObject:dict] message:"'" + [pred description] + "' should be false"];
|
||||
|
||||
pred = [[CPComparisonPredicate alloc] initWithLeftExpression:[CPExpression expressionForConstantValue:nil] rightExpression:[CPExpression expressionForConstantValue:nil] modifier:CPDirectPredicateModifier type:CPEqualToPredicateOperatorType options:0];
|
||||
|
||||
[self assertTrue:[pred evaluateWithObject:dict] message:"'" + [pred description] + "' should be true"];
|
||||
|
||||
pred = [[CPComparisonPredicate alloc] initWithLeftExpression:[CPExpression expressionForConstantValue:nil] rightExpression:[CPExpression expressionForConstantValue:nil] modifier:CPDirectPredicateModifier type:CPNotEqualToPredicateOperatorType options:0];
|
||||
|
||||
[self assertFalse:[pred evaluateWithObject:dict] message:"'" + [pred description] + "' should be false"];
|
||||
|
||||
pred = [[CPComparisonPredicate alloc] initWithLeftExpression:[CPExpression expressionForConstantValue:@"Something"] rightExpression:[CPExpression expressionForConstantValue:nil] modifier:CPDirectPredicateModifier type:CPEqualToPredicateOperatorType options:0];
|
||||
|
||||
[self assertFalse:[pred evaluateWithObject:dict] message:"'" + [pred description] + "' should be false"];
|
||||
|
||||
pred = [[CPComparisonPredicate alloc] initWithLeftExpression:[CPExpression expressionForConstantValue:@"Something"] rightExpression:[CPExpression expressionForConstantValue:nil] modifier:CPDirectPredicateModifier type:CPNotEqualToPredicateOperatorType options:0];
|
||||
|
||||
[self assertTrue:[pred evaluateWithObject:dict] message:"'" + [pred description] + "' should be true"];
|
||||
}
|
||||
|
||||
- (void)testPredicateParsing
|
||||
|
||||
Reference in new issue
Block a user