[ 
http://issues.apache.org/jira/browse/HARMONY-124?page=comments#action_12368074 
] 

Richard Liang commented on HARMONY-124:
---------------------------------------

Sorry, there are bugs in my test cases and patches.

1. Refined test cases (the three Mock class are the same)

    /*
     * Test malfunction decode(ByteBuffer)
     */
    public void testDecode_CoderMalfunctionError() throws Exception {
        MockMalfunctionCharset cs = new MockMalfunctionCharset("Harmony-124-1", 
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("Harmony-124-2", 
null); //$NON-NLS-1$
        try {
            cs.decode(ByteBuffer.wrap(new byte[] { 0x00, 0x11 }));
            fail("Charset.decode should throw CoderMalfunctionError");// 
NON-NLS-1
        } catch (CoderMalfunctionError e) {
            //expected
        }
    }

2.  The Charset_patch.txt is unnecessary, please just apply 
CharsetDecoder_patch.txt.

> 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
>  Attachments: CharsetDecoder_patch.txt, Charset_patch.txt
>
> 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