@@ -81,7 +81,11 @@ class TestNSString : XCTestCase {
8181 ( " test_resolvingSymlinksInPath " , test_resolvingSymlinksInPath) ,
8282 ( " test_expandingTildeInPath " , test_expandingTildeInPath) ,
8383 ( " test_standardizingPath " , test_standardizingPath) ,
84- ( " test_removingPercentEncoding " , test_removingPercentEncoding) ,
84+ ( " test_addingPercentEncoding " , test_addingPercentEncoding) ,
85+ ( " test_removingPercentEncodingInLatin " , test_removingPercentEncodingInLatin) ,
86+ ( " test_removingPercentEncodingInNonLatin " , test_removingPercentEncodingInNonLatin) ,
87+ ( " test_removingPersentEncodingWithoutEncoding " , test_removingPersentEncodingWithoutEncoding) ,
88+ ( " test_addingPercentEncodingAndBack " , test_addingPercentEncodingAndBack) ,
8589 ( " test_stringByAppendingPathExtension " , test_stringByAppendingPathExtension) ,
8690 ( " test_deletingPathExtension " , test_deletingPathExtension) ,
8791 ( " test_ExternalRepresentation " , test_ExternalRepresentation) ,
@@ -867,13 +871,66 @@ class TestNSString : XCTestCase {
867871 }
868872 }
869873
870- func test_removingPercentEncoding( ) {
874+ func test_addingPercentEncoding( ) {
875+ let s1 = " a b " . addingPercentEncoding ( withAllowedCharacters: . alphanumerics)
876+ XCTAssertEqual ( s1, " a%20b " )
877+
878+ let s2 = " \u{0434} \u{043E} \u{043C} " . addingPercentEncoding ( withAllowedCharacters: . alphanumerics)
879+ XCTAssertEqual ( s2, " %D0%B4%D0%BE%D0%BC " )
880+ }
881+
882+ func test_removingPercentEncodingInLatin( ) {
871883 let s1 = " a%20b " . removingPercentEncoding
872884 XCTAssertEqual ( s1, " a b " )
873885 let s2 = " a%1 b " . removingPercentEncoding
874886 XCTAssertNil ( s2, " returns nil for a string with an invalid percent encoding " )
875887 }
876888
889+ func test_removingPercentEncodingInNonLatin( ) {
890+ let s1 = " \u{043C} \u{043E} \u{0439} %20 \u{0434} \u{043E} \u{043C} " . removingPercentEncoding
891+ XCTAssertEqual ( s1, " \u{043C} \u{043E} \u{0439} \u{0434} \u{043E} \u{043C} " )
892+
893+ let s2 = " %D0%B4%D0%BE%D0%BC " . removingPercentEncoding
894+ XCTAssertEqual ( s2, " \u{0434} \u{043E} \u{043C} " )
895+
896+ let s3 = " \u{00E0} a%1 b " . removingPercentEncoding
897+ XCTAssertNil ( s3, " returns nil for a string with an invalid percent encoding " )
898+ }
899+
900+ func test_removingPersentEncodingWithoutEncoding( ) {
901+ let cyrillicString = " \u{0434} \u{043E} \u{043C} "
902+ let cyrillicEscapedString = cyrillicString. removingPercentEncoding
903+ XCTAssertEqual ( cyrillicString, cyrillicEscapedString)
904+
905+ let chineseString = " \u{623F} \u{5B50} "
906+ let chineseEscapedString = chineseString. removingPercentEncoding
907+ XCTAssertEqual ( chineseString, chineseEscapedString)
908+
909+ let arabicString = " \u{0645} \u{0646} \u{0632} \u{0644} "
910+ let arabicEscapedString = arabicString. removingPercentEncoding
911+ XCTAssertEqual ( arabicString, arabicEscapedString)
912+
913+ let randomString = " \u{00E0} \u{00E6} "
914+ let randomEscapedString = randomString. removingPercentEncoding
915+ XCTAssertEqual ( randomString, randomEscapedString)
916+
917+ let latinString = " home "
918+ let latinEscapedString = latinString. removingPercentEncoding
919+ XCTAssertEqual ( latinString, latinEscapedString)
920+ }
921+
922+ func test_addingPercentEncodingAndBack( ) {
923+ let latingString = " a b "
924+ let escapedLatingString = latingString. addingPercentEncoding ( withAllowedCharacters: . alphanumerics)
925+ let returnedLatingString = escapedLatingString? . removingPercentEncoding
926+ XCTAssertEqual ( returnedLatingString, latingString)
927+
928+ let cyrillicString = " \u{0434} \u{043E} \u{043C} "
929+ let escapedCyrillicString = cyrillicString. addingPercentEncoding ( withAllowedCharacters: . alphanumerics)
930+ let returnedCyrillicString = escapedCyrillicString? . removingPercentEncoding
931+ XCTAssertEqual ( returnedCyrillicString, cyrillicString)
932+ }
933+
877934 func test_stringByAppendingPathExtension( ) {
878935 let values = [
879936 NSString ( string: " /tmp/scratch.old " ) : " /tmp/scratch.old.tiff " ,
0 commit comments