TCK tests Signed-off-by: Jorge Bescos Gascon <jorge.bescos.gascon@oracle.com>
diff --git a/tck/tck-tests/src/main/java/jakarta/jsonp/tck/api/jsongeneratortests/ClientTests.java b/tck/tck-tests/src/main/java/jakarta/jsonp/tck/api/jsongeneratortests/ClientTests.java index 616dece..fc47578 100644 --- a/tck/tck-tests/src/main/java/jakarta/jsonp/tck/api/jsongeneratortests/ClientTests.java +++ b/tck/tck-tests/src/main/java/jakarta/jsonp/tck/api/jsongeneratortests/ClientTests.java
@@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2021 Oracle and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at @@ -2139,4 +2139,49 @@ result.eval(); } + /* + * @testName: jsonGeneratorStreamNotClosedTest + */ + @Test + public void jsonGeneratorStreamNotClosedTest() throws Fault { + ByteArrayOutputStreamCloseChecker stream = new ByteArrayOutputStreamCloseChecker(); + JsonGenerator gen = Json.createGenerator(stream); + try { + gen.writeStartObject(); + gen.write("foo", "bar"); + // no end object + gen.close(); + throw new Fault("It is expected a JsonGenerationException"); + } catch (JsonGenerationException e) { + if (stream.closed) { + // Stream should not be closed + throw new Fault("The underlying stream is closed but it shouldn't because JSON object was not completed"); + } + } + } + + /* + * @testName: jsonGeneratorStreamClosedTest + */ + @Test + public void jsonGeneratorStreamClosedTest() throws Fault { + ByteArrayOutputStreamCloseChecker stream = new ByteArrayOutputStreamCloseChecker(); + JsonGenerator gen = Json.createGenerator(stream); + gen.writeStartObject(); + gen.write("foo", "bar"); + gen.writeEnd(); + gen.close(); + if (!stream.closed) { + // Stream should be closed + throw new Fault("The underlying stream has to be closed because JSON object was completed"); + } + } + + private static class ByteArrayOutputStreamCloseChecker extends ByteArrayOutputStream { + private boolean closed = false; + @Override + public void close() throws IOException { + closed = true; + } + } }