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) 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