]> granicus.if.org Git - icu/commitdiff
ICU-21621 Fixing TestCharset/TestInvalidInput failure on Java 16 runtime.
authorYoshito Umaoka <yumaoka@users.noreply.github.com>
Wed, 19 May 2021 20:19:06 +0000 (16:19 -0400)
committerYoshito Umaoka <yumaoka@users.noreply.github.com>
Thu, 20 May 2021 15:48:43 +0000 (11:48 -0400)
icu4j/main/tests/charset/src/com/ibm/icu/dev/test/charset/TestCharset.java

index f4c792a6a2423fc3eaf7c61c44fb617cd008aa67..8ada416253dec569d4e722133d27e923c70a8921 100644 (file)
@@ -16,6 +16,7 @@ import java.nio.charset.CharacterCodingException;
 import java.nio.charset.Charset;
 import java.nio.charset.CharsetDecoder;
 import java.nio.charset.CharsetEncoder;
+import java.nio.charset.CoderMalfunctionError;
 import java.nio.charset.CoderResult;
 import java.nio.charset.CodingErrorAction;
 import java.nio.charset.UnsupportedCharsetException;
@@ -5053,12 +5054,22 @@ public class TestCharset extends TestFmwk {
         try {
             encoder.encode(CharBuffer.allocate(10), null, true);
             errln("Illegal argument exception should have been thrown due to null target.");
+        } catch (CoderMalfunctionError err) {
+            // Java 16 updated handling of Exception thrown by encodeLoop(CharBuffer,ByteBuffer).
+            // Previously when encodeLoop is called with null input/output buffer, it throws
+            // IllegalArgumentException, and Java CharsetEncoder does not catch the exception.
+            // In Java 16, a runtime exception thrown by encodeLoop implementation is caught
+            // and wrapped by CoderMalfunctionError. This block is required because CoderMalfunctionError
+            // is not an Exception.
         } catch (Exception ex) {
+            // IllegalArgumentException is thrown by encodeLoop(CharBuffer,ByteBuffer) implementation
+            // is not wrapped by CharsetEncoder up to Java 15.
         }
 
         try {
             decoder.decode(ByteBuffer.allocate(10), null, true);
             errln("Illegal argument exception should have been thrown due to null target.");
+        } catch (CoderMalfunctionError err) {
         } catch (Exception ex) {
         }
     }