@@ -67,4 +67,80 @@ - (void)testQueryStringWithRepeatingParameterWithBracketsToDictionary {
6767 XCTAssertEqualObjects (actualDictionary, desiredDictionary, @" Query parameters are incorrect." );
6868}
6969
70+ - (void )testQueryStringWithEmoji {
71+ NSString *desiredString = @" grinning=%F 0%9F%98% 81&winking=%F 0%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