diff --git a/iOS/MonsterCards/Helpers/JSONHelper.h b/iOS/MonsterCards/Helpers/JSONHelper.h index 05b1294..0ee4b67 100644 --- a/iOS/MonsterCards/Helpers/JSONHelper.h +++ b/iOS/MonsterCards/Helpers/JSONHelper.h @@ -38,6 +38,14 @@ NS_ASSUME_NONNULL_BEGIN +(NSArray*)readArrayFromArray:(NSArray*)array forIndex:(NSUInteger)index; +(NSArray*)readArrayFromArray:(NSArray*)array forIndex:(NSUInteger)index withDefaultValue:(NSArray* _Nullable)defaultValue; ++(id)parseJSONString:(NSString*)jsonString; ++(NSDictionary*)parseJSONStringAsDictionary:(NSString*)jsonString; ++(NSArray*)parseJSONStringAsArray:(NSString*)jsonString; + ++(id)parseJSONData:(NSData*)jsonData; ++(NSDictionary*)parseJSONDataAsDictionary:(NSData*)jsonData; ++(NSArray*)parseJSONDataAsArray:(NSData*)jsonData; + @end NS_ASSUME_NONNULL_END diff --git a/iOS/MonsterCards/Helpers/JSONHelper.m b/iOS/MonsterCards/Helpers/JSONHelper.m index f8d128d..a30b092 100644 --- a/iOS/MonsterCards/Helpers/JSONHelper.m +++ b/iOS/MonsterCards/Helpers/JSONHelper.m @@ -175,4 +175,53 @@ BOOL coerceObjectToBool(NSObject *object, BOOL defaultValue) { return defaultValue; } ++(id)parseJSONString:(NSString*)jsonString { + NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; + NSArray *jsonRoot = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil]; + return jsonRoot; +} + ++(NSDictionary*)parseJSONStringAsDictionary:(NSString*)jsonString { + NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; + NSDictionary *jsonRoot = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil]; + if (![jsonRoot isKindOfClass:[NSDictionary class]]) { + return nil; + } else { + return jsonRoot; + } +} + ++(NSArray*)parseJSONStringAsArray:(NSString*)jsonString { + NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; + NSArray *jsonRoot = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil]; + if (![jsonRoot isKindOfClass:[NSArray class]]) { + return nil; + } else { + return jsonRoot; + } +} + ++(id)parseJSONData:(NSData*)jsonData { + NSArray *jsonRoot = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil]; + return jsonRoot; +} + ++(NSDictionary*)parseJSONDataAsDictionary:(NSData*)jsonData { + NSDictionary *jsonRoot = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil]; + if (![jsonRoot isKindOfClass:[NSDictionary class]]) { + return nil; + } else { + return jsonRoot; + } +} + ++(NSArray*)parseJSONDataAsArray:(NSData*)jsonData { + NSArray *jsonRoot = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil]; + if (![jsonRoot isKindOfClass:[NSArray class]]) { + return nil; + } else { + return jsonRoot; + } +} + @end diff --git a/iOS/MonsterCardsTests/Helpers/JSONHelperTests.m b/iOS/MonsterCardsTests/Helpers/JSONHelperTests.m index d23ecc2..ce3bc83 100644 --- a/iOS/MonsterCardsTests/Helpers/JSONHelperTests.m +++ b/iOS/MonsterCardsTests/Helpers/JSONHelperTests.m @@ -594,4 +594,104 @@ NSArray* readJSONArrayFromString(NSString *jsonString) { XCTAssertEqualObjects(_jsonArrayValue, readValue); } +#pragma mark - JSON parsing + +- (void)testParseJSONDataReturnsDictionary { + NSString *jsonString = @"{\"a\":1,\"b\":2}"; + NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; + + id parsedResult = [JSONHelper parseJSONData:jsonData]; + XCTAssertNotNil(parsedResult); + XCTAssertTrue([parsedResult isKindOfClass:[NSDictionary class]]); +} + +- (void)testParseJSONDataReturnsArray { + NSString *jsonString = @"[\"a\",1,\"b\",2]"; + NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; + + id parsedResult = [JSONHelper parseJSONData:jsonData]; + XCTAssertNotNil(parsedResult); + XCTAssertTrue([parsedResult isKindOfClass:[NSArray class]]); +} + +- (void)testParseJSONDataAsDictionaryReturnsDictionary { + NSString *jsonString = @"{\"a\":1,\"b\":2}"; + NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; + + NSDictionary *parsedResult = [JSONHelper parseJSONDataAsDictionary:jsonData]; + XCTAssertNotNil(parsedResult); + XCTAssertTrue([parsedResult isKindOfClass:[NSDictionary class]]); +} + +- (void)testParseJSONDataAsDictionaryReturnsNilIfNotDictionary { + NSString *jsonString = @"[\"a\",1,\"b\",2]"; + NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; + + id parsedResult = [JSONHelper parseJSONDataAsDictionary:jsonData]; + XCTAssertNil(parsedResult); +} + +- (void)testParseJSONDataAsArrayReturnsArray { + NSString *jsonString = @"[\"a\",1,\"b\",2]"; + NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; + + id parsedResult = [JSONHelper parseJSONDataAsArray:jsonData]; + XCTAssertNotNil(parsedResult); + XCTAssertTrue([parsedResult isKindOfClass:[NSArray class]]); +} + +- (void)testParseJSONDataAsArrayReturnsNilIfNotArray { + NSString *jsonString = @"{\"a\":1,\"b\":2}"; + NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; + + id parsedResult = [JSONHelper parseJSONDataAsArray:jsonData]; + XCTAssertNil(parsedResult); +} + +- (void)testParseJSONStringReturnsDictionary { + NSString *jsonString = @"{\"a\":1,\"b\":2}"; + + id parsedResult = [JSONHelper parseJSONString:jsonString]; + XCTAssertNotNil(parsedResult); + XCTAssertTrue([parsedResult isKindOfClass:[NSDictionary class]]); +} + +- (void)testParseJSONStringReturnsArray { + NSString *jsonString = @"[\"a\",1,\"b\",2]"; + + id parsedResult = [JSONHelper parseJSONString:jsonString]; + XCTAssertNotNil(parsedResult); + XCTAssertTrue([parsedResult isKindOfClass:[NSArray class]]); +} + +- (void)testParseJSONStringAsDictionaryReturnsDictionary { + NSString *jsonString = @"{\"a\":1,\"b\":2}"; + + NSDictionary *parsedResult = [JSONHelper parseJSONStringAsDictionary:jsonString]; + XCTAssertNotNil(parsedResult); + XCTAssertTrue([parsedResult isKindOfClass:[NSDictionary class]]); +} + +- (void)testParseJSONStringAsDictionaryReturnsNilIfNotDictionary { + NSString *jsonString = @"[\"a\",1,\"b\",2]"; + + id parsedResult = [JSONHelper parseJSONStringAsDictionary:jsonString]; + XCTAssertNil(parsedResult); +} + +- (void)testParseJSONStringAsArrayReturnsArray { + NSString *jsonString = @"[\"a\",1,\"b\",2]"; + + id parsedResult = [JSONHelper parseJSONStringAsArray:jsonString]; + XCTAssertNotNil(parsedResult); + XCTAssertTrue([parsedResult isKindOfClass:[NSArray class]]); +} + +- (void)testParseJSONStringAsArrayReturnsNilIfNotArray { + NSString *jsonString = @"{\"a\":1,\"b\":2}"; + + id parsedResult = [JSONHelper parseJSONStringAsArray:jsonString]; + XCTAssertNil(parsedResult); +} + @end