As we have a tool-free bridges between many classes and JavaScript types by setting the isa property on the type, for example CPArray and Array. Using the for...in enumeration the isa property will be included in the loop if the property is enumerable (this is the default behavior). This commit set the property as not enumerable.
Also added test case for check that the isa property on classes are not enumerable using a for...in loop.
JavaScript now handles time a lot better. Times from before around 1900 is different in different
parts of the world so we just changed this test case to be a bit more modern.
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;
}
Fixed: When dependent key paths use a relationship, only the first added observer will observe the attribute for the relationship object.
Also, an optimisation on when the willChange… chain is running, there is no need to replace the observers as no new values are set yet. That will be done when the didChange… chain is running.
We expect this method to return a whole number like in Objective-C. This also goes for the related methods, `shortValue`, `longValue` and `longLongValue`.
Also adds more tests (in addition to the existing, already failing test).
Previously a CPPredicate created with format `value == nil` was converted back to `value == <CPNull @ xxxx>`
This patch ensures `predicateFormat` returns `value == nil`
Test added in CPPredicateTest.j
Conditional Expression : an expression using different expressions for
evaluation, depending of a predicate result.
Support for predicate parsing: ```TERNARY(predicate, trueExpression,
falseExpression)```
With init, equal, evaluation, parsing tests.
When the predicate part of a subquery expression was containing
variables, the substitution was ignored.
Now, the subpredicate can contain variables that will be substituted
when calling evaluateWithObject:substitutionVariables:.
Added expression test and predicate parsing test.