java.nio.charset.CharsetDecoder doesn't throw CoderMalfunctionError exception 
when decodeLoop threw unexpected exception.
-------------------------------------------------------------------------------------------------------------------------

         Key: HARMONY-124
         URL: http://issues.apache.org/jira/browse/HARMONY-124
     Project: Harmony
        Type: Bug
  Components: Classlib  
    Reporter: Richard Liang


public final CoderResult decode(ByteBuffer in, CharBuffer out, boolean 
endOfInput)
As spec says, the method throws CoderMalfunctionError if an invocation of the 
decodeLoop method threw an unexpected exception.

However, Harmony doesn't throws CoderMalfunctionError when decodeLoop method 
threw an unexpected exception. 

The following test cases pass on RI , but fail on Harmony.

        /*
         * Test malfunction decode(ByteBuffer) 
         */
        public void testDecode_CoderMalfunctionError() throws Exception {
                MockMalfunctionCharset cs = new MockMalfunctionCharset("mock", 
null);
                try{
                        
cs.newDecoder().onMalformedInput(CodingErrorAction.REPLACE)
                       
.onUnmappableCharacter(CodingErrorAction.REPLACE).decode(ByteBuffer.wrap(new 
byte[]{0x00,0x11}));
                        fail("should throw CoderMalfunctionError");//NON-NLS-1$
                }catch(CoderMalfunctionError e){
                        //expected
                }
        }

        /*
         * Test malfunction decode(ByteBuffer) 
         */
        public void testDecode_NoCoderMalfunctionError() throws Exception {
                MockMalfunctionCharset cs = new MockMalfunctionCharset("mock", 
null);
                try{
                        cs.decode(ByteBuffer.wrap(new byte[]{0x00,0x11}));
                }catch(CoderMalfunctionError e){
                        fail("Charset.decode should return 
silently");//NON-NLS-1
                }
        }
        /*
         * Mock charset class with malfunction decode & encode.
         */
        static final class MockMalfunctionCharset extends Charset {

                public MockMalfunctionCharset(String canonicalName, String[] 
aliases) {
                        super(canonicalName, aliases);
                }

                public boolean contains(Charset cs) {
                        return false;
                }

                public CharsetDecoder newDecoder() {
                        return new MockMalfunctionDecoder(this);
                }

                public CharsetEncoder newEncoder() {
                        return new MockMalfunctionEncoder(this);
                }
        }
        /*
         * Mock decoder. decodeLoop always throws unexpected exception.
         */
        static class MockMalfunctionDecoder extends 
java.nio.charset.CharsetDecoder {

                public MockMalfunctionDecoder(Charset cs) {
                        super(cs, 1, 10);
                }

                protected CoderResult decodeLoop(ByteBuffer in, CharBuffer out) 
{
                        throw new BufferOverflowException();
                }
        }
        /*
         * Mock encoder. encodeLoop always throws unexpected exception.
         */
        static class MockMalfunctionEncoder extends 
java.nio.charset.CharsetEncoder {

                public MockMalfunctionEncoder(Charset cs) {
                        super(cs, 1, 3, new byte[] { (byte) '?' });
                }

                protected CoderResult encodeLoop(CharBuffer in, ByteBuffer out) 
{
                        throw new BufferOverflowException();
                }
        }


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to