On 25/01/2010 17:26, Oliver Deakin wrote:
>
>
> On 25/01/2010 16:59, Tim Ellison wrote:
>> On 25/Jan/2010 16:09, Oliver Deakin wrote:
>>> Looks like this is caused by DTD.java's use of available() again. This
>>> time the test is failing because RAFStream.available() is being called
>>> by DTD.read() and its return value is expected to be a true indication
>>> of the number of bytes available. However, the RAFStream.available()
>>> call will only return 0 or 1 in our implementation which causes the
>>> DTD.read() to only read a single byte rather than the whole DTD. I
>>> hacked RAFStream.available() to return (mLength-mOffset) and this makes
>>> the test pass, but twe really need to fix the DTD.read() method to not
>>> use available() at all I think.
>> It looks like both need fixing then. I thought we had done all these
>> already?
>>
>> RAFStream should return the actual number of bytes available, and
>> DTD.read() should not use available, but read until it gets EOF (-1).
>
> Agreed. Perhaps something along the lines of the patch below. I have
> not fully tested it yet, but this certainly fixes the test case in
> question.
>
> Regards,
> Oliver
>
> Index: modules/archive/src/main/java/java/util/zip/ZipFile.java
> ===================================================================
> --- modules/archive/src/main/java/java/util/zip/ZipFile.java
> (revision 901661)
> +++ modules/archive/src/main/java/java/util/zip/ZipFile.java
> (working copy)
> @@ -378,7 +378,15 @@
>
> @Override
> public int available() throws IOException {
> - return (mOffset < mLength ? 1 : 0);
> + if (mOffset < mLength) {
> + if (mOffset - mLength < Integer.MAX_VALUE) {
Mistype here - should be (mLength-mOffset < Integer.MAX_VALUE).
> + return (int)(mLength-mOffset);
> + } else {
> + return Integer.MAX_VALUE;
> + }
> + } else {
> + return 0;
> + }
> }
>
> @Override
> Index:
> modules/swing/src/main/java/common/javax/swing/text/html/parser/DTD.java
> ===================================================================
> ---
> modules/swing/src/main/java/common/javax/swing/text/html/parser/DTD.java
> (revision 901661)
> +++
> modules/swing/src/main/java/common/javax/swing/text/html/parser/DTD.java
> (working copy)
> @@ -16,6 +16,7 @@
> */
> package javax.swing.text.html.parser;
>
> +import java.io.ByteArrayOutputStream;
> import java.io.DataInputStream;
> import java.io.IOException;
> import java.util.BitSet;
> @@ -142,9 +143,18 @@
>
> public void read(final DataInputStream stream) throws IOException {
> // converts from DataInputStream into a byte array
> - byte[] enc = new byte[stream.available()];
> - stream.read(enc);
> + byte[] enc = new byte[1024];
> + ByteArrayOutputStream bs = new ByteArrayOutputStream();
>
> + int iRead = 0;
> + while (iRead != -1) {
> + iRead = stream.read(enc, 0, enc.length);
> + if (iRead > 0) {
> + bs.write(enc, 0, iRead);
> + }
> + }
> + enc = bs.toByteArray();
> +
> // decode the byte array
> Asn1Dtd asn1 = new Asn1Dtd(enc);
>
>
>> Regards,
>> Tim
>>
>>> On 25/01/2010 13:15, Oliver Deakin wrote:
>>>> Hi Ray,
>>>>
>>>> Thanks for the information - from your results it seems that there
>>>> must be a difference in common classes between java 5 and 6 that are
>>>> causing the failures. I see the same result - with the java5 M12a
>>>> swing.jar the test passes 100% and with the java6 swing.jar it fails
>>>> 100%.
>>>>
>>>> I'll dig a little deeper at the code differences between the modules.
>>>>
>>>> Regards,
>>>> Oliver
>>>>
>>>> On 25/01/2010 12:10, Ray Chen wrote:
>>>>> Hi Oliver,
>>>>> I have done some investigation for this issue before, and disscussed
>>>>> it on the 6.0 Milestone1 thread.
>>>>>
>>>>> I compared two swing.jar of trunk and java6, the only difference
>>>>> between them is that java6 added some new classes:
>>>>>
>>>>> javax\swing\event\RowSorterEvent$Type.class
>>>>> javax\swing\event\RowSorterEvent.class
>>>>> javax\swing\event\RowSorterListener.class
>>>>> javax\swing\filechooser\FileNameExtensionFilter.class
>>>>> javax\swing\RowSorter$SortKey.class
>>>>> javax\swing\RowSorter.class
>>>>> javax\swing\SortOrder.class
>>>>>
>>>>> I think these classes are not related to this test. However, even
>>>>> after I removed these new added classes or replaced trunk's swing.jar
>>>>> with java6's swing.jar and run the test on the modified trunk , the
>>>>> test still failed.
>>>>> And trunk's swing.jar works well in both trunk and java6 to run this
>>>>> test.
>>>>> So I am a little confused, same classes, same vm, why different
>>>>> result?
>>>>>
>>>>> On Mon, Jan 25, 2010 at 7:03 PM, Oliver Deakin
>>>>> (JIRA)<jira@apache.org> wrote:
>>>>>> [
>>>>>> https://issues.apache.org/jira/browse/HARMONY-6392?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12804502#action_12804502
>>>>>>
>>>>>> ]
>>>>>>
>>>>>> Oliver Deakin commented on HARMONY-6392:
>>>>>> ----------------------------------------
>>>>>>
>>>>>> This issue has been fixed in java5 M12, but still persists in the
>>>>>> java6 branch.
>>>>>>
>>>>>>> [classlib][swing] Test failures in
>>>>>>> javax.swing.text.html.HTMLDocument_Reader_ActionsTest
>>>>>>> ----------------------------------------------------------------------------------------
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Key: HARMONY-6392
>>>>>>> URL:
>>>>>>> https://issues.apache.org/jira/browse/HARMONY-6392
>>>>>>> Project: Harmony
>>>>>>> Issue Type: Bug
>>>>>>> Components: Classlib
>>>>>>> Affects Versions: 6.0M1, 5.0M12
>>>>>>> Environment: Windows x86
>>>>>>> Reporter: Oliver Deakin
>>>>>>> Fix For: 5.0M12
>>>>>>>
>>>>>>>
>>>>>>> I see 1 failure and 1 error.
>>>>>>> javax.swing.text.html.HTMLDocument_Reader_ActionsTest.testHarmony_4582
>>>>>>>
>>>>>>> fails with output:
>>>>>>> N/A
>>>>>>> java.lang.NullPointerException
>>>>>>> at
>>>>>>> javax.swing.text.html.HTMLDocument_Reader_ActionsTest.testHarmony_4582(HTMLDocument_Reader_ActionsTest.java:584)
>>>>>>>
>>>>>>>
>>>>>>> at java.lang.reflect.VMReflection.invokeMethod(VMReflection.java)
>>>>>>> at
>>>>>>> javax.swing.BasicSwingTestCase.runBareSuper(BasicSwingTestCase.java:116)
>>>>>>>
>>>>>>>
>>>>>>> at
>>>>>>> javax.swing.BasicSwingTestCase.runBareImpl(BasicSwingTestCase.java:121)
>>>>>>>
>>>>>>>
>>>>>>> at
>>>>>>> javax.swing.BasicSwingTestCase$1.run(BasicSwingTestCase.java:135)
>>>>>>> at java.lang.Thread.run(Thread.java:669)
>>>>>>> javax.swing.text.html.HTMLDocument_Reader_ActionsTest.testHarmony_4615
>>>>>>>
>>>>>>> fails with output:
>>>>>>> null expected:<[line4 line4]> but was:<[ line4 line]>
>>>>>>> junit.framework.ComparisonFailure: null expected:<[line4 line4]>
>>>>>>> but was:<[line4 line]>
>>>>>>> at
>>>>>>> javax.swing.text.html.HTMLDocument_Reader_ActionsTest.testHarmony_4615(HTMLDocument_Reader_ActionsTest.java:601)
>>>>>>>
>>>>>>>
>>>>>>> at java.lang.reflect.VMReflection.invokeMethod(VMReflection.java)
>>>>>>> at
>>>>>>> javax.swing.BasicSwingTestCase.runBareSuper(BasicSwingTestCase.java:116)
>>>>>>>
>>>>>>>
>>>>>>> at
>>>>>>> javax.swing.BasicSwingTestCase.runBareImpl(BasicSwingTestCase.java:121)
>>>>>>>
>>>>>>>
>>>>>>> at
>>>>>>> javax.swing.BasicSwingTestCase$1.run(BasicSwingTestCase.java:135)
>>>>>>> at java.lang.Thread.run(Thread.java:669)
>>>>>>> These tests pass for me against M11.
>>>>>> --
>>>>>> This message is automatically generated by JIRA.
>>>>>> -
>>>>>> You can reply to this email to add a comment to the issue online.
>>>>>>
>>>>>>
>>>>>
>
--
Oliver Deakin
Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number 741598.
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU
|