|
16 | 16 |
|
17 | 17 | package org.eclipse.parsson.tests; |
18 | 18 |
|
19 | | -import jakarta.json.*; |
20 | 19 | import java.io.ByteArrayOutputStream; |
21 | 20 | import java.io.IOException; |
22 | 21 | import java.io.StringWriter; |
23 | | - |
| 22 | +import java.util.HashMap; |
| 23 | +import java.util.Map; |
| 24 | + |
| 25 | +import jakarta.json.Json; |
| 26 | +import jakarta.json.JsonArray; |
| 27 | +import jakarta.json.JsonObject; |
| 28 | +import jakarta.json.JsonValue; |
| 29 | +import jakarta.json.JsonWriter; |
| 30 | +import jakarta.json.JsonWriterFactory; |
| 31 | +import jakarta.json.stream.JsonGenerator; |
| 32 | +import jakarta.json.stream.JsonGeneratorFactory; |
24 | 33 | import junit.framework.TestCase; |
25 | 34 |
|
26 | 35 | /** |
@@ -214,6 +223,97 @@ public void testClose() throws Exception { |
214 | 223 | assertTrue(baos.isClosed()); |
215 | 224 | } |
216 | 225 |
|
| 226 | + private String nameValueNanInfinity(JsonWriterFactory writerFactory) { |
| 227 | + StringWriter writer = new StringWriter(); |
| 228 | + JsonWriter jsonWriter = writerFactory.createWriter(writer); |
| 229 | + JsonObject jsonObject = Json.createObjectBuilder() |
| 230 | + .add("val1", Double.NaN) |
| 231 | + .add("val2", 1.0) |
| 232 | + .add("val3", 0.0) |
| 233 | + .add("val4", Double.POSITIVE_INFINITY) |
| 234 | + .add("val5", Double.NEGATIVE_INFINITY) |
| 235 | + .add("val6", Json.createValue(Double.NaN)) |
| 236 | + .add("val7", Json.createValue(1.0)) |
| 237 | + .add("val8", Json.createValue(0.0)) |
| 238 | + .add("val9", Json.createValue(Double.POSITIVE_INFINITY)) |
| 239 | + .add("val10", Json.createValue(Double.NEGATIVE_INFINITY)).build(); |
| 240 | + jsonWriter.writeObject(jsonObject); |
| 241 | + jsonWriter.close(); |
| 242 | + return writer.toString(); |
| 243 | + } |
| 244 | + |
| 245 | + private String jsonNumberNanInfinity(JsonWriterFactory writerFactory, double value) { |
| 246 | + StringWriter writer = new StringWriter(); |
| 247 | + JsonWriter jsonWriter = writerFactory.createWriter(writer); |
| 248 | + jsonWriter.write(Json.createValue(value)); |
| 249 | + jsonWriter.close(); |
| 250 | + return writer.toString(); |
| 251 | + } |
| 252 | + |
| 253 | + public void testNanInfinityDefault() { |
| 254 | + Map<String, Object> config = new HashMap<>(); |
| 255 | + JsonWriterFactory writerFactory = Json.createWriterFactory(config); |
| 256 | + assertEquals("{\"val1\":null,\"val2\":1.0,\"val3\":0.0,\"val4\":null,\"val5\":null,\"val6\":null,\"val7\":1.0,\"val8\":0.0,\"val9\":null,\"val10\":null}", nameValueNanInfinity(writerFactory)); |
| 257 | + assertEquals("0.0", jsonNumberNanInfinity(writerFactory, 0.0)); |
| 258 | + assertEquals("1.0", jsonNumberNanInfinity(writerFactory, 1.0)); |
| 259 | + assertEquals("null", jsonNumberNanInfinity(writerFactory, Double.NaN)); |
| 260 | + assertEquals("null", jsonNumberNanInfinity(writerFactory, Double.POSITIVE_INFINITY)); |
| 261 | + assertEquals("null", jsonNumberNanInfinity(writerFactory, Double.NEGATIVE_INFINITY)); |
| 262 | + } |
| 263 | + |
| 264 | + public void testNanInfinityWriteNanAsNull() { |
| 265 | + Map<String, Object> config = new HashMap<>(); |
| 266 | + config.put(JsonGenerator.WRITE_NAN_AS_NULLS, true); |
| 267 | + JsonWriterFactory writerFactory = Json.createWriterFactory(config); |
| 268 | + assertEquals("{\"val1\":null,\"val2\":1.0,\"val3\":0.0,\"val4\":null,\"val5\":null,\"val6\":null,\"val7\":1.0,\"val8\":0.0,\"val9\":null,\"val10\":null}", nameValueNanInfinity(writerFactory)); |
| 269 | + assertEquals("0.0", jsonNumberNanInfinity(writerFactory, 0.0)); |
| 270 | + assertEquals("1.0", jsonNumberNanInfinity(writerFactory, 1.0)); |
| 271 | + assertEquals("null", jsonNumberNanInfinity(writerFactory, Double.NaN)); |
| 272 | + assertEquals("null", jsonNumberNanInfinity(writerFactory, Double.POSITIVE_INFINITY)); |
| 273 | + assertEquals("null", jsonNumberNanInfinity(writerFactory, Double.NEGATIVE_INFINITY)); |
| 274 | + } |
| 275 | + |
| 276 | + public void testNanInfinityWriteNanAsString() { |
| 277 | + Map<String, Object> config = new HashMap<>(); |
| 278 | + config.put(JsonGenerator.WRITE_NAN_AS_STRINGS, true); |
| 279 | + JsonWriterFactory writerFactory = Json.createWriterFactory(config); |
| 280 | + assertEquals("{\"val1\":\"NaN\",\"val2\":1.0,\"val3\":0.0,\"val4\":\"+Infinity\",\"val5\":\"-Infinity\",\"val6\":\"NaN\",\"val7\":1.0,\"val8\":0.0,\"val9\":\"+Infinity\",\"val10\":\"-Infinity\"}", nameValueNanInfinity(writerFactory)); |
| 281 | + assertEquals("0.0", jsonNumberNanInfinity(writerFactory, 0.0)); |
| 282 | + assertEquals("1.0", jsonNumberNanInfinity(writerFactory, 1.0)); |
| 283 | + assertEquals("\"NaN\"", jsonNumberNanInfinity(writerFactory, Double.NaN)); |
| 284 | + assertEquals("\"+Infinity\"", jsonNumberNanInfinity(writerFactory, Double.POSITIVE_INFINITY)); |
| 285 | + assertEquals("\"-Infinity\"", jsonNumberNanInfinity(writerFactory, Double.NEGATIVE_INFINITY)); |
| 286 | + } |
| 287 | + |
| 288 | + public void testNanInfinityBothFalse() { |
| 289 | + Map<String, Object> config = new HashMap<>(); |
| 290 | + config.put(JsonGenerator.WRITE_NAN_AS_STRINGS, false); |
| 291 | + config.put(JsonGenerator.WRITE_NAN_AS_NULLS, false); |
| 292 | + JsonWriterFactory writerFactory = Json.createWriterFactory(config); |
| 293 | + try { |
| 294 | + nameValueNanInfinity(writerFactory); |
| 295 | + fail("Expected a failure"); |
| 296 | + } catch (NumberFormatException e) {} |
| 297 | + try { |
| 298 | + jsonNumberNanInfinity(writerFactory, Double.NaN); |
| 299 | + fail("Expected a failure"); |
| 300 | + } catch (NumberFormatException e) {} |
| 301 | + assertEquals("0.0", jsonNumberNanInfinity(writerFactory, 0.0)); |
| 302 | + assertEquals("1.0", jsonNumberNanInfinity(writerFactory, 1.0)); |
| 303 | + } |
| 304 | + |
| 305 | + public void testNanInfinityBothTrue() { |
| 306 | + Map<String, Object> config = new HashMap<>(); |
| 307 | + config.put(JsonGenerator.WRITE_NAN_AS_STRINGS, true); |
| 308 | + config.put(JsonGenerator.WRITE_NAN_AS_NULLS, true); |
| 309 | + JsonWriterFactory writerFactory = Json.createWriterFactory(config); |
| 310 | + assertEquals("{\"val1\":null,\"val2\":1.0,\"val3\":0.0,\"val4\":null,\"val5\":null,\"val6\":null,\"val7\":1.0,\"val8\":0.0,\"val9\":null,\"val10\":null}", nameValueNanInfinity(writerFactory)); |
| 311 | + assertEquals("0.0", jsonNumberNanInfinity(writerFactory, 0.0)); |
| 312 | + assertEquals("1.0", jsonNumberNanInfinity(writerFactory, 1.0)); |
| 313 | + assertEquals("null", jsonNumberNanInfinity(writerFactory, Double.NaN)); |
| 314 | + assertEquals("null", jsonNumberNanInfinity(writerFactory, Double.POSITIVE_INFINITY)); |
| 315 | + assertEquals("null", jsonNumberNanInfinity(writerFactory, Double.NEGATIVE_INFINITY)); |
| 316 | + } |
217 | 317 | private static final class MyByteStream extends ByteArrayOutputStream { |
218 | 318 | boolean closed; |
219 | 319 |
|
|
0 commit comments