@@ -1013,6 +1013,8 @@ extension TestJSONSerialization {
1013
1013
( " test_serialize_Decimal " , test_serialize_Decimal) ,
1014
1014
( " test_serialize_NSDecimalNumber " , test_serialize_NSDecimalNumber) ,
1015
1015
( " test_serialize_stringEscaping " , test_serialize_stringEscaping) ,
1016
+ ( " test_serialize_fragments " , test_serialize_fragments) ,
1017
+ ( " test_serialize_withoutEscapingSlashes " , test_serialize_withoutEscapingSlashes) ,
1016
1018
( " test_jsonReadingOffTheEndOfBuffers " , test_jsonReadingOffTheEndOfBuffers) ,
1017
1019
( " test_jsonObjectToOutputStreamBuffer " , test_jsonObjectToOutputStreamBuffer) ,
1018
1020
( " test_jsonObjectToOutputStreamFile " , test_jsonObjectToOutputStreamFile) ,
@@ -1371,6 +1373,26 @@ extension TestJSONSerialization {
1371
1373
XCTAssertEqual ( try trySerialize ( json) , " [ \" j \\ / \" ] " )
1372
1374
}
1373
1375
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
+
1374
1396
/* These are a programming error and should not be done
1375
1397
Ideally the interface for JSONSerialization should at compile time prevent this type of thing
1376
1398
by overloading the interface such that it can only accept dictionaries and arrays.
0 commit comments