Hi Oliver, I do agree with you but still have a question, I compared related source files in trunk and java6 branch, I see the read() and available() function are exactly same, so why same code, different results?
On Tue, Jan 26, 2010 at 1:26 AM, Oliver Deakin <oliver.dea...@googlemail.com> 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) { > + 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)<j...@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 > > -- Regards, Ray Chen