1
- package com .fasterxml .jackson .failing ;
1
+ package com .fasterxml .jackson .core . json ;
2
2
3
3
import java .io .ByteArrayOutputStream ;
4
4
import java .io .StringWriter ;
9
9
import org .junit .jupiter .api .Test ;
10
10
11
11
import static org .junit .jupiter .api .Assertions .assertEquals ;
12
+ import static org .junit .jupiter .api .Assertions .assertFalse ;
12
13
13
14
class Surrogate223Test extends JUnit5TestBase
14
15
{
15
- private final JsonFactory JSON_F = new JsonFactory ();
16
+ private final JsonFactory DEFAULT_JSON_F = newStreamFactory ();
17
+
18
+ // for [core#223]
19
+ @ Test
20
+ void surrogatesDefaultSetting () throws Exception {
21
+ // default in 2.x should be disabled:
22
+ assertFalse (DEFAULT_JSON_F .isEnabled (JsonWriteFeature .COMBINE_UNICODE_SURROGATES_IN_UTF8 .mappedFeature ()));
23
+ }
16
24
17
25
// for [core#223]
18
26
@ Test
@@ -23,36 +31,41 @@ void surrogatesByteBacked() throws Exception
23
31
final String toQuote = new String (Character .toChars (0x1F602 ));
24
32
assertEquals (2 , toQuote .length ()); // just sanity check
25
33
26
- // default should be disabled:
27
- // assertFalse(JSON_F.isEnabled(JsonGenerator.Feature.ESCAPE_UTF8_SURROGATES));
28
-
29
34
out = new ByteArrayOutputStream ();
30
- g = JSON_F .createGenerator (out );
35
+
36
+ JsonFactory f = JsonFactory .builder ()
37
+ .enable (JsonWriteFeature .COMBINE_UNICODE_SURROGATES_IN_UTF8 )
38
+ .build ();
39
+ g = f .createGenerator (out );
31
40
g .writeStartArray ();
32
41
g .writeString (toQuote );
33
42
g .writeEndArray ();
34
43
g .close ();
35
44
assertEquals (2 + 2 + 4 , out .size ()); // brackets, quotes, 4-byte encoding
36
45
37
46
// Also parse back to ensure correctness
38
- JsonParser p = JSON_F .createParser (out .toByteArray ());
47
+ JsonParser p = f .createParser (out .toByteArray ());
39
48
assertToken (JsonToken .START_ARRAY , p .nextToken ());
40
49
assertToken (JsonToken .VALUE_STRING , p .nextToken ());
50
+ assertEquals (toQuote , p .getText ());
41
51
assertToken (JsonToken .END_ARRAY , p .nextToken ());
42
52
p .close ();
43
53
44
54
// but may revert back to original behavior
45
55
out = new ByteArrayOutputStream ();
46
- g = JSON_F .createGenerator (out );
47
- // g.enable(JsonGenerator.Feature.ESCAPE_UTF8_SURROGATES);
56
+ f = JsonFactory .builder ()
57
+ .disable (JsonWriteFeature .COMBINE_UNICODE_SURROGATES_IN_UTF8 )
58
+ .build ();
59
+
60
+ g = f .createGenerator (out );
48
61
g .writeStartArray ();
49
62
g .writeString (toQuote );
50
63
g .writeEndArray ();
51
64
g .close ();
52
65
assertEquals (2 + 2 + 12 , out .size ()); // brackets, quotes, 2 x 6 byte JSON escape
53
66
}
54
67
55
- // for [core#223]
68
+ // for [core#223]: no change for character-backed (cannot do anything)
56
69
@ Test
57
70
void surrogatesCharBacked () throws Exception
58
71
{
@@ -61,32 +74,20 @@ void surrogatesCharBacked() throws Exception
61
74
final String toQuote = new String (Character .toChars (0x1F602 ));
62
75
assertEquals (2 , toQuote .length ()); // just sanity check
63
76
64
- // default should be disabled:
65
- // assertFalse(JSON_F.isEnabled(JsonGenerator.Feature.ESCAPE_UTF8_SURROGATES));
66
-
67
77
out = new StringWriter ();
68
- g = JSON_F .createGenerator (out );
78
+ g = DEFAULT_JSON_F .createGenerator (out );
69
79
g .writeStartArray ();
70
80
g .writeString (toQuote );
71
81
g .writeEndArray ();
72
82
g .close ();
73
83
assertEquals (2 + 2 + 2 , out .toString ().length ()); // brackets, quotes, 2 chars as is
74
84
75
85
// Also parse back to ensure correctness
76
- JsonParser p = JSON_F .createParser (out .toString ());
86
+ JsonParser p = DEFAULT_JSON_F .createParser (out .toString ());
77
87
assertToken (JsonToken .START_ARRAY , p .nextToken ());
78
88
assertToken (JsonToken .VALUE_STRING , p .nextToken ());
89
+ assertEquals (toQuote , p .getText ());
79
90
assertToken (JsonToken .END_ARRAY , p .nextToken ());
80
91
p .close ();
81
-
82
- // but may revert back to original behavior
83
- out = new StringWriter ();
84
- g = JSON_F .createGenerator (out );
85
- // g.enable(JsonGenerator.Feature.ESCAPE_UTF8_SURROGATES);
86
- g .writeStartArray ();
87
- g .writeString (toQuote );
88
- g .writeEndArray ();
89
- g .close ();
90
- assertEquals (2 + 2 + 12 , out .toString ().length ()); // brackets, quotes, 2 x 6 byte JSON escape
91
92
}
92
93
}
0 commit comments