Adds JSONHelper methods to read numbers as NSNumber objects.
This commit is contained in:
@@ -14,8 +14,13 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
|
|
||||||
+(NSString*)readStringFromDictionary:(NSDictionary*)dictionary forKey:(NSString*)key;
|
+(NSString*)readStringFromDictionary:(NSDictionary*)dictionary forKey:(NSString*)key;
|
||||||
+(NSString*)readStringFromDictionary:(NSDictionary*)dictionary forKey:(NSString*)key withDefaultValue:(NSString* _Nullable)defaultValue;
|
+(NSString*)readStringFromDictionary:(NSDictionary*)dictionary forKey:(NSString*)key withDefaultValue:(NSString* _Nullable)defaultValue;
|
||||||
|
+(NSNumber*)readNumberFromDictionary:(NSDictionary*)dictionary forKey:(NSString*)key;
|
||||||
|
+(NSNumber*)readNumberFromDictionary:(NSDictionary*)dictionary forKey:(NSString*)key withDefaultValue:(NSNumber* _Nullable)defaultValue;
|
||||||
+(NSString*)readStringFromArray:(NSArray*)array forIndex:(NSUInteger)index;
|
+(NSString*)readStringFromArray:(NSArray*)array forIndex:(NSUInteger)index;
|
||||||
+(NSString*)readStringFromArray:(NSArray*)array forIndex:(NSUInteger)index withDefaultValue:(NSString* _Nullable)defaultValue;
|
+(NSString*)readStringFromArray:(NSArray*)array forIndex:(NSUInteger)index withDefaultValue:(NSString* _Nullable)defaultValue;
|
||||||
|
+(NSNumber*)readNumberFromArray:(NSArray*)array forIndex:(NSUInteger)index;
|
||||||
|
+(NSNumber*)readNumberFromArray:(NSArray*)array forIndex:(NSUInteger)index withDefaultValue:(NSNumber* _Nullable)defaultValue;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_END
|
NS_ASSUME_NONNULL_END
|
||||||
|
|||||||
@@ -18,6 +18,14 @@ NSString* coerceObjectToString(NSObject *object, NSString *defaultValue) {
|
|||||||
return defaultValue;
|
return defaultValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NSNumber* coerceObjectToNumber(NSObject *object, NSNumber *defaultValue) {
|
||||||
|
if ([object isKindOfClass:[NSNumber class]]) {
|
||||||
|
return (NSNumber*)object;
|
||||||
|
}
|
||||||
|
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
+(NSString*)readStringFromDictionary:(NSDictionary*)dictionary forKey:(NSString*)key {
|
+(NSString*)readStringFromDictionary:(NSDictionary*)dictionary forKey:(NSString*)key {
|
||||||
return [JSONHelper readStringFromDictionary:dictionary forKey:key withDefaultValue:nil];
|
return [JSONHelper readStringFromDictionary:dictionary forKey:key withDefaultValue:nil];
|
||||||
}
|
}
|
||||||
@@ -27,6 +35,15 @@ NSString* coerceObjectToString(NSObject *object, NSString *defaultValue) {
|
|||||||
return coerceObjectToString(object, defaultValue);
|
return coerceObjectToString(object, defaultValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
+(NSNumber*)readNumberFromDictionary:(NSDictionary*)dictionary forKey:(NSString*)key {
|
||||||
|
return [JSONHelper readNumberFromDictionary:dictionary forKey:key withDefaultValue:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
+(NSNumber*)readNumberFromDictionary:(NSDictionary*)dictionary forKey:(NSString*)key withDefaultValue:(NSNumber* _Nullable)defaultValue {
|
||||||
|
NSObject *object = [dictionary objectForKey:key];
|
||||||
|
return coerceObjectToNumber(object, defaultValue);
|
||||||
|
}
|
||||||
|
|
||||||
+(NSString*)readStringFromArray:(NSArray*)array forIndex:(NSUInteger)index{
|
+(NSString*)readStringFromArray:(NSArray*)array forIndex:(NSUInteger)index{
|
||||||
return [JSONHelper readStringFromArray:array forIndex:index withDefaultValue:nil];
|
return [JSONHelper readStringFromArray:array forIndex:index withDefaultValue:nil];
|
||||||
}
|
}
|
||||||
@@ -36,4 +53,13 @@ NSString* coerceObjectToString(NSObject *object, NSString *defaultValue) {
|
|||||||
return coerceObjectToString(object, defaultValue);
|
return coerceObjectToString(object, defaultValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
+(NSNumber*)readNumberFromArray:(NSArray*)array forIndex:(NSUInteger)index {
|
||||||
|
return [JSONHelper readNumberFromArray:array forIndex:index withDefaultValue:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
+(NSNumber*)readNumberFromArray:(NSArray*)array forIndex:(NSUInteger)index withDefaultValue:(NSNumber* _Nullable)defaultValue {
|
||||||
|
NSObject *object = [array objectAtIndex:index];
|
||||||
|
return coerceObjectToNumber(object, defaultValue);
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -144,4 +144,90 @@ NSArray* readJSONArrayFromString(NSString *jsonString) {
|
|||||||
XCTAssertEqualObjects(_jsonStringValue, readString);
|
XCTAssertEqualObjects(_jsonStringValue, readString);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma mark - Integers in Dictionaries
|
||||||
|
|
||||||
|
- (void)testReadIntegerFromDictionaryReturnsNilIfKeyNotPresent {
|
||||||
|
NSString *jsonString = [NSString stringWithFormat:@"{%@}", _jsonStringFragment];
|
||||||
|
NSDictionary *jsonRoot = readJSONDictionaryFromString(jsonString);
|
||||||
|
XCTAssertNotNil(jsonRoot);
|
||||||
|
|
||||||
|
NSNumber *readNumber = [JSONHelper readNumberFromDictionary:jsonRoot forKey:_jsonIntegerKey];
|
||||||
|
XCTAssertNil(readNumber);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)testReadIntegerFromDictionaryWithDefaultReturnsDefaultIfKeyNotPresent {
|
||||||
|
NSString *jsonString = [NSString stringWithFormat:@"{%@}", _jsonStringFragment];
|
||||||
|
NSDictionary *jsonRoot = readJSONDictionaryFromString(jsonString);
|
||||||
|
XCTAssertNotNil(jsonRoot);
|
||||||
|
|
||||||
|
NSNumber *readNumber = [JSONHelper readNumberFromDictionary:jsonRoot forKey:_jsonIntegerKey withDefaultValue:_jsonIntegerValue];
|
||||||
|
XCTAssertEqualObjects(_jsonIntegerValue, readNumber);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) testReadIntegerFromDictionaryReturnsCorrectValue {
|
||||||
|
NSString *jsonString = [NSString stringWithFormat:@"{%@}", _jsonIntegerFragment];
|
||||||
|
NSDictionary *jsonRoot = readJSONDictionaryFromString(jsonString);
|
||||||
|
XCTAssertNotNil(jsonRoot);
|
||||||
|
|
||||||
|
NSNumber *readNumber = [JSONHelper readNumberFromDictionary:jsonRoot forKey:_jsonIntegerKey];
|
||||||
|
XCTAssertEqualObjects(_jsonIntegerValue, readNumber);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)testReadIntegerFromDictionaryWithDefaultReturnsCorrectValue {
|
||||||
|
NSString *jsonString = [NSString stringWithFormat:@"{%@}", _jsonIntegerFragment];
|
||||||
|
NSDictionary *jsonRoot = readJSONDictionaryFromString(jsonString);
|
||||||
|
XCTAssertNotNil(jsonRoot);
|
||||||
|
|
||||||
|
NSNumber *readNumber = [JSONHelper readNumberFromDictionary:jsonRoot forKey:_jsonIntegerKey withDefaultValue:@67890];
|
||||||
|
XCTAssertEqualObjects(_jsonIntegerValue, readNumber);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) testReadIntegerFromDictionaryReturnsNilIfWrongType {
|
||||||
|
NSString *jsonString = [NSString stringWithFormat:@"{\"%@\":\"%@\"}", _jsonIntegerKey, _jsonStringValue];
|
||||||
|
NSDictionary *jsonRoot = readJSONDictionaryFromString(jsonString);
|
||||||
|
XCTAssertNotNil(jsonRoot);
|
||||||
|
|
||||||
|
NSNumber *readNumber = [JSONHelper readNumberFromDictionary:jsonRoot forKey:_jsonIntegerKey];
|
||||||
|
XCTAssertNil(readNumber);
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - Integers in Arrays
|
||||||
|
|
||||||
|
- (void)testReadIntegerFromArrayReturnsNilIfNotAnInteger {
|
||||||
|
NSString *jsonString = [NSString stringWithFormat:@"[\"%@\"]", _jsonStringValue];
|
||||||
|
NSArray *jsonRoot = readJSONArrayFromString(jsonString);
|
||||||
|
XCTAssertNotNil(jsonRoot);
|
||||||
|
|
||||||
|
NSNumber *readNumber = [JSONHelper readNumberFromArray:jsonRoot forIndex:0];
|
||||||
|
XCTAssertNil(readNumber);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)testReadIntegerFromArrayWithDefaultReturnsDefaultValueIfNotAnInteger {
|
||||||
|
NSString *jsonString = [NSString stringWithFormat:@"[\"%@\"]", _jsonStringValue];
|
||||||
|
NSArray *jsonRoot = readJSONArrayFromString(jsonString);
|
||||||
|
XCTAssertNotNil(jsonRoot);
|
||||||
|
|
||||||
|
NSNumber *readNumber = [JSONHelper readNumberFromArray:jsonRoot forIndex:0 withDefaultValue:_jsonIntegerValue];
|
||||||
|
XCTAssertEqualObjects(_jsonIntegerValue, readNumber);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)testReadIntegerFromArrayThrowsIfIndexOutOfRange {
|
||||||
|
// TODO: Decide if this should throw or return nil
|
||||||
|
NSString *jsonString = @"[]";
|
||||||
|
NSArray *jsonRoot = readJSONArrayFromString(jsonString);
|
||||||
|
XCTAssertNotNil(jsonRoot);
|
||||||
|
|
||||||
|
XCTAssertThrows([JSONHelper readNumberFromArray:jsonRoot forIndex:0]);
|
||||||
|
XCTAssertThrows([JSONHelper readNumberFromArray:jsonRoot forIndex:-1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)testReadIntegerFromArrayReturnsCorrectValue {
|
||||||
|
NSString *jsonString = [NSString stringWithFormat:@"[%@]", _jsonIntegerValue];
|
||||||
|
NSArray *jsonRoot = readJSONArrayFromString(jsonString);
|
||||||
|
XCTAssertNotNil(jsonRoot);
|
||||||
|
|
||||||
|
NSNumber *readNumber = [JSONHelper readNumberFromArray:jsonRoot forIndex:0];
|
||||||
|
XCTAssertEqualObjects(_jsonIntegerValue, readNumber);
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
Reference in New Issue
Block a user