Skip to content
This repository was archived by the owner on Aug 16, 2023. It is now read-only.

Commit 9d6cd7e

Browse files
committed
Merge pull request #3 from 0xced/more-tests
More tests and a few fixes.
2 parents 43af4e0 + 9a99e3d commit 9d6cd7e

3 files changed

Lines changed: 86 additions & 1 deletion

File tree

CMDQueryStringSerialization.xcodeproj/project.pbxproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,10 @@
7575
3B6EAF9C188F5D78005D2EB4 /* Frameworks */,
7676
3B6EAF9B188F5D78005D2EB4 /* Products */,
7777
);
78+
indentWidth = 4;
7879
sourceTree = "<group>";
80+
tabWidth = 4;
81+
usesTabs = 0;
7982
};
8083
3B6EAF9B188F5D78005D2EB4 /* Products */ = {
8184
isa = PBXGroup;

CMDQueryStringSerialization/CMDQueryStringSerialization.m

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ + (NSDictionary *)dictionaryWithQueryString:(NSString *)string {
3737

3838

3939
+ (NSString *)queryStringWithDictionary:(NSDictionary *)dictionary {
40+
if (!dictionary) {
41+
return nil;
42+
}
4043
NSMutableArray *pairs = [NSMutableArray arrayWithCapacity:[dictionary count]];
4144
[dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *key, id value, BOOL *stop) {
4245
void (^addPair)(NSString *key, NSString *value) = ^(NSString *key, NSString *value) {
@@ -70,11 +73,14 @@ - (NSString *)cmd_stringByAddingEscapes {
7073

7174

7275
- (NSString *)cmd_stringByRemovingEscapes {
73-
return [self stringByRemovingPercentEncoding];
76+
return [self stringByRemovingPercentEncoding] ?: @"";
7477
}
7578

7679

7780
- (void)cmd_enumeratePairs:(void (^) (NSString *key, NSString *value))block {
81+
if ([self length] == 0) {
82+
return;
83+
}
7884
NSArray *pairs = [self componentsSeparatedByString:@"&"];
7985
[pairs enumerateObjectsUsingBlock:^(NSString *pair, NSUInteger index, BOOL *stop) {
8086
NSRange range = [pair rangeOfString:@"="];

CMDQueryStringSerializationTests/CMDQueryStringSerializationTests.m

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,4 +67,80 @@ - (void)testQueryStringWithRepeatingParameterWithBracketsToDictionary {
6767
XCTAssertEqualObjects(actualDictionary, desiredDictionary, @"Query parameters are incorrect.");
6868
}
6969

70+
- (void)testQueryStringWithEmoji {
71+
NSString *desiredString = @"grinning=%F0%9F%98%81&winking=%F0%9F%98%89";
72+
NSDictionary *desiredDictionary = @{
73+
@"grinning" : @"😁",
74+
@"winking" : @"\U0001F609"
75+
};
76+
77+
NSString *actualString = [CMDQueryStringSerialization queryStringWithDictionary:desiredDictionary];
78+
XCTAssertEqualObjects(actualString, desiredString, @"Query string is incorrect.");
79+
80+
NSDictionary *actualDictionary = [CMDQueryStringSerialization dictionaryWithQueryString:desiredString];
81+
XCTAssertEqualObjects(actualDictionary, desiredDictionary, @"Query parameters are incorrect.");
82+
}
83+
84+
- (void)testNilQueryString {
85+
NSDictionary *nilDictionary = [CMDQueryStringSerialization dictionaryWithQueryString:nil];
86+
XCTAssertNil(nilDictionary);
87+
}
88+
89+
- (void)testNilDictionary {
90+
NSString *nilString = [CMDQueryStringSerialization queryStringWithDictionary:nil];
91+
XCTAssertNil(nilString);
92+
}
93+
94+
- (void)testEmptyQueryString {
95+
NSString *desiredString = @"";
96+
NSDictionary *desiredDictionary = @{ };
97+
98+
NSString *actualString = [CMDQueryStringSerialization queryStringWithDictionary:desiredDictionary];
99+
XCTAssertEqualObjects(actualString, desiredString, @"Query string is incorrect.");
100+
101+
NSDictionary *actualDictionary = [CMDQueryStringSerialization dictionaryWithQueryString:desiredString];
102+
XCTAssertEqualObjects(actualDictionary, desiredDictionary, @"Query parameters are incorrect.");
103+
}
104+
105+
- (void)testEmptyQueryStringKey {
106+
NSString *desiredString = @"=value";
107+
NSDictionary *desiredDictionary = @{ @"" : @"value" };
108+
109+
NSString *actualString = [CMDQueryStringSerialization queryStringWithDictionary:desiredDictionary];
110+
XCTAssertEqualObjects(actualString, desiredString, @"Query string is incorrect.");
111+
112+
NSDictionary *actualDictionary = [CMDQueryStringSerialization dictionaryWithQueryString:desiredString];
113+
XCTAssertEqualObjects(actualDictionary, desiredDictionary, @"Query parameters are incorrect.");
114+
}
115+
116+
- (void)testEmptyQueryStringValue {
117+
NSString *desiredString = @"key=";
118+
NSDictionary *desiredDictionary = @{ @"key" : @"" };
119+
120+
NSString *actualString = [CMDQueryStringSerialization queryStringWithDictionary:desiredDictionary];
121+
XCTAssertEqualObjects(actualString, desiredString, @"Query string is incorrect.");
122+
123+
NSDictionary *actualDictionary = [CMDQueryStringSerialization dictionaryWithQueryString:desiredString];
124+
XCTAssertEqualObjects(actualDictionary, desiredDictionary, @"Query parameters are incorrect.");
125+
}
126+
127+
- (void)testQueryStringWithoutEqualCharacter {
128+
NSDictionary *desiredDictionary = @{ @"key" : @"" };
129+
130+
NSDictionary *actualDictionary = [CMDQueryStringSerialization dictionaryWithQueryString:@"key"];
131+
XCTAssertEqualObjects(actualDictionary, desiredDictionary, @"Query parameters are incorrect.");
132+
}
133+
134+
- (void)testDictionaryWithUnserializableKey {
135+
NSDictionary *desiredDictionary = @{ [NSDate date] : @"value" };
136+
137+
XCTAssertThrowsSpecificNamed([CMDQueryStringSerialization queryStringWithDictionary:desiredDictionary], NSException, NSInvalidArgumentException);
138+
}
139+
140+
- (void)testDictionaryWithUnserializableValue {
141+
NSDictionary *desiredDictionary = @{ @"key" : [NSDate date] };
142+
143+
XCTAssertThrowsSpecificNamed([CMDQueryStringSerialization queryStringWithDictionary:desiredDictionary], NSException, NSInvalidArgumentException);
144+
}
145+
70146
@end

0 commit comments

Comments
 (0)