2015-11-09 12:36:56 +01:00

39 lines
1.7 KiB
Objective-C

#import "EXPMatchers+equal.h"
#import "EXPMatcherHelpers.h"
EXPMatcherImplementationBegin(_equal, (id expected)) {
match(^BOOL{
if((actual == expected) || [actual isEqual:expected]) {
return YES;
} else if([actual isKindOfClass:[NSNumber class]] && [expected isKindOfClass:[NSNumber class]]) {
if([actual isKindOfClass:[NSDecimalNumber class]] || [expected isKindOfClass:[NSDecimalNumber class]]) {
NSDecimalNumber *actualDecimalNumber = [NSDecimalNumber decimalNumberWithDecimal:[(NSNumber *) actual decimalValue]];
NSDecimalNumber *expectedDecimalNumber = [NSDecimalNumber decimalNumberWithDecimal:[(NSNumber *) expected decimalValue]];
return [actualDecimalNumber isEqualToNumber:expectedDecimalNumber];
}
else {
if(EXPIsNumberFloat((NSNumber *)actual) || EXPIsNumberFloat((NSNumber *)expected)) {
return [(NSNumber *)actual floatValue] == [(NSNumber *)expected floatValue];
}
}
}
return NO;
});
failureMessageForTo(^NSString *{
NSString *expectedDescription = EXPDescribeObject(expected);
NSString *actualDescription = EXPDescribeObject(actual);
if (![expectedDescription isEqualToString:actualDescription]) {
return [NSString stringWithFormat:@"expected: %@, got: %@", EXPDescribeObject(expected), EXPDescribeObject(actual)];
} else {
return [NSString stringWithFormat:@"expected (%@): %@, got (%@): %@", NSStringFromClass([expected class]), EXPDescribeObject(expected), NSStringFromClass([actual class]), EXPDescribeObject(actual)];
}
});
failureMessageForNotTo(^NSString *{
return [NSString stringWithFormat:@"expected: not %@, got: %@", EXPDescribeObject(expected), EXPDescribeObject(actual)];
});
}
EXPMatcherImplementationEnd