very funny

Mikhail Loenko wrote:
ops. sorry

2006/4/25, Geir Magnusson Jr <[EMAIL PROTECTED]>:
psst... hey, Mikhail... how about a "[classlib]" on this subject line? :)


Mikhail Loenko wrote:
Vladimir,

Method available() is still used to determine endOfInput parameter.
According to >specification the
method should be overridden by subclasses.
'should' does not mean 'must' , moreover it might be a user class who
does not care what the spec says. There could be cases when you do not
know how many bytes are available and you have to return 0.

So I think the patch should be modified to avoid 'available()'

Thanks,
Mikhail

-----Original Message-----
From: Vladimir Strigun (JIRA) [mailto:[EMAIL PROTECTED]
Sent: Monday, April 24, 2006 5:14 PM
To: [EMAIL PROTECTED]
Subject: [jira] Updated: (HARMONY-166) method read() in
InputStreamReader failed to read one
character

    [ http://issues.apache.org/jira/browse/HARMONY-166?page=all ]

Vladimir Strigun updated HARMONY-166:
-------------------------------------

   Attachment: InputStreamReader.java.patch

Mikhail,

please review my patch.  Now method read() is not modified. I just
add decoding operations to
fillBuf() method.
Method available() is still used to determine endOfInput parameter.
According to specification the
method should be overridden by subclasses.

method read() in InputStreamReader failed to read one character
---------------------------------------------------------------

         Key: HARMONY-166
         URL: http://issues.apache.org/jira/browse/HARMONY-166
     Project: Harmony
        Type: Bug
  Components: Classlib
    Reporter: Vladimir Strigun
 Attachments: InputStreamReader.java.patch, InputStreamReader.patch.txt,
InputStreamReaderTest.java
I've started to play with harmony-57 contribution and found bug in
InputStreamReader class.
Method read() should read a single character from input stream but it
works incorrectly for 2
bytes-per-char charsets. Example below shows that it failed to read
one character in UTF-16
charset. Sorry for so ugly test, it's just a part of
InputStreamReaderTest from Harmony-57
contribution.
import java.io.*;
import junit.framework.TestCase;
public class InputStreamReaderTest extends TestCase {
public static void main(String[] args) {
junit.textui.TestRunner.run(InputStreamReaderTest.class);
}
public void test_ISR_read() throws Exception {
InputStream in;
InputStreamReader reader;
try {
in = new LimitedByteArrayInputStream(0);
reader = new InputStreamReader(in, "UTF-16BE");
int xx = reader.read();
assertTrue("Incorrect byte UTF-16BE", xx == '\u6172');
} catch (UnsupportedEncodingException e) {
// Can't test without the converter
System.out.println(e);
} catch (IOException e) {
e.printStackTrace();
fail("UTF-16BE unexpected 1: " + e);
}
try {
in = new LimitedByteArrayInputStream(0);
reader = new InputStreamReader(in, "UTF-16LE");
int xx = reader.read();
assertTrue("Incorrect byte UTF-16BE", xx == '\u7261');
} catch (UnsupportedEncodingException e) {
// Can't test without the converter
} catch (IOException e) {
fail("UTF-16BE unexpected 2: " + e);
}
try {
in = new LimitedByteArrayInputStream(1);
reader = new InputStreamReader(in, "UTF-16");
assertTrue("Incorrect byte UTF-16BE", reader.read() == '\u7261');
} catch (UnsupportedEncodingException e) {
// Can't test without the converter
} catch (IOException e) {
fail("UTF-16BE unexpected 3: " + e);
}
try {
in = new LimitedByteArrayInputStream(2);
reader = new InputStreamReader(in, "ISO2022JP");
int ch = reader.read();
assertTrue("Incorrect byte ISO2022JP 1: " + ch, ch == '\u4e5d');
ch = reader.read();
assertTrue("Incorrect byte ISO2022JP 2: " + ch, ch == '\u7b2c');
} catch (UnsupportedEncodingException e) {
// Can't test without the converter
System.out.println(e);
} catch (IOException e) {
fail("ISO2022JP unexpected: " + e);
}
}
static class LimitedByteArrayInputStream extends ByteArrayInputStream {
// A ByteArrayInputStream that only returns a single byte per read
byte[] bytes;
int count;
public LimitedByteArrayInputStream(int type) {
super(new byte[0]);
switch (type) {
case 0:
bytes = new byte[] { 0x61, 0x72 };
break;
case 1:
bytes = new byte[] { (byte) 0xff, (byte) 0xfe, 0x61, 0x72 };
break;
case 2:
bytes = new byte[] { '\u001b', '$', 'B', '6', 'e', 'B', 'h',
'\u001b', '(', 'B' };
break;
}
count = bytes.length;
}
public int read() {
if (count == 0)
return -1;
count--;
return bytes[bytes.length - count];
}
public int read(byte[] buffer, int offset, int length) {
if (count == 0)
return -1;
if (length == 0)
return 0;
buffer[offset] = bytes[bytes.length - count];
count--;
return 1;
}
public int available() {
return count;
}
}
}
--
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
---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to