@@ -1013,6 +1013,8 @@ extension TestJSONSerialization {
10131013 ( " test_serialize_Decimal " , test_serialize_Decimal) ,
10141014 ( " test_serialize_NSDecimalNumber " , test_serialize_NSDecimalNumber) ,
10151015 ( " test_serialize_stringEscaping " , test_serialize_stringEscaping) ,
1016+ ( " test_serialize_fragments " , test_serialize_fragments) ,
1017+ ( " test_serialize_withoutEscapingSlashes " , test_serialize_withoutEscapingSlashes) ,
10161018 ( " test_jsonReadingOffTheEndOfBuffers " , test_jsonReadingOffTheEndOfBuffers) ,
10171019 ( " test_jsonObjectToOutputStreamBuffer " , test_jsonObjectToOutputStreamBuffer) ,
10181020 ( " test_jsonObjectToOutputStreamFile " , test_jsonObjectToOutputStreamFile) ,
@@ -1371,6 +1373,26 @@ extension TestJSONSerialization {
13711373 XCTAssertEqual ( try trySerialize ( json) , " [ \" j \\ / \" ] " )
13721374 }
13731375
1376+ func test_serialize_fragments( ) {
1377+ XCTAssertEqual ( try trySerialize ( 2 , options: . fragmentsAllowed) , " 2 " )
1378+ XCTAssertEqual ( try trySerialize ( false , options: . fragmentsAllowed) , " false " )
1379+ XCTAssertEqual ( try trySerialize ( true , options: . fragmentsAllowed) , " true " )
1380+ XCTAssertEqual ( try trySerialize ( Float ( 1 ) , options: . fragmentsAllowed) , " 1 " )
1381+ XCTAssertEqual ( try trySerialize ( Double ( 2 ) , options: . fragmentsAllowed) , " 2 " )
1382+ XCTAssertEqual ( try trySerialize ( Decimal ( Double . leastNormalMagnitude) , options: . fragmentsAllowed) , " 0.0000000000000000000000000000000000000000000000000002225073858507201792 " )
1383+ XCTAssertEqual ( try trySerialize ( " test " , options: . fragmentsAllowed) , " \" test \" " )
1384+ }
1385+
1386+ func test_serialize_withoutEscapingSlashes( ) {
1387+ // .withoutEscapingSlashes controls whether a "/" is encoded as "\\/" or "/"
1388+ let testString = " This / \\ / is a \\ \\ \\ \\ \\ \\ \" string \" \n \r \t \u{0} \u{1} \u{8} \u{c} \u{f} "
1389+ let escapedString = " \" This \\ / \\ \\ \\ / is a \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \" string \\ \" \\ n \\ r \\ t \\ u0000 \\ u0001 \\ b \\ f \\ u000f \" "
1390+ let unescapedString = " \" This / \\ \\ / is a \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \" string \\ \" \\ n \\ r \\ t \\ u0000 \\ u0001 \\ b \\ f \\ u000f \" "
1391+
1392+ XCTAssertEqual ( try trySerialize ( testString, options: . fragmentsAllowed) , escapedString)
1393+ XCTAssertEqual ( try trySerialize ( testString, options: [ . withoutEscapingSlashes, . fragmentsAllowed] ) , unescapedString)
1394+ }
1395+
13741396 /* These are a programming error and should not be done
13751397 Ideally the interface for JSONSerialization should at compile time prevent this type of thing
13761398 by overloading the interface such that it can only accept dictionaries and arrays.
0 commit comments