harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Spark Shen <smallsmallor...@gmail.com>
Subject Re: [classlib]bug-to-bug compatibility j.u.Formatter
Date Tue, 25 Jul 2006 11:03:04 GMT
Richard Liang 写道:
> Hello All,
>
> As we have further discussion about our Compatibility issues, I'd like 
> to summarize this particular problems and ask for comments. Thanks a lot.
>
> If we pass a null to j.u.Formatter.Formatter(Appendable a), when we 
> try to get the destination of the formatter's output by calling 
> formatter.out(), RI will thrown a java.util.FormatterClosedException. 
> But according to the specification, the destination should be a 
> StringBuilder.
>
> Shall we follow RI or specification?
>
> (My opinion is: Following spec, and record a "Non-bug differences from 
> RI" in JIRA)
>
> The following test passes on Harmony, but fails on RI.
> public void test_ConstructorLjava_lang_Appendable() {
> Formatter formatter = new Formatter((Appendable) null);
> Appendable out = formatter.out();
> assertTrue(out instanceof StringBuilder);
> }
>
Richard, I am fully agree with you. :-)
And there are places RI behaves irrational and not compatible with RI. 
See the test cases below:
public void 
test_formatLjava_lang_String$Ljava_lang_Object_BigDecimalConversionF() {
f = new Formatter(Locale.US);
f.format("%f", new BigDecimal("5.0E9"));
// error on RI
// RI throw ArrayIndexOutOfBoundsException
assertEquals("5000000000.000000", f.toString());
}
And others [1]
**These assertion failures can neither be categoried to test case bug 
nor harmony implementation imcompatible.
IMHO, fully compatible with RI on these occasions may not be 
appropriate. Record them in JIRA may be a good idea.

[1]refer to thread '[classlib] Exception throwing compatibility: 
java.util.Scanner'

BTW, this one below is not caused by java.util.Formatter itself:

tests.api.java.util.FormatterTest.test_ConstructorLjava_io_FileLjava_lang_St 

ring(FormatterTest.java:465)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at

The failed assertion is on tests.api.java.util.FormatterTest Line 474 : 
**assertTrue(notExist.delete());*

*Best regards*
*
>
> Richard Liang wrote:
>> Hello All,
>>
>> Here we think it's a bug of RI. I have addressed this issue in the 
>> comments of these test cases. You may want to refer to the spec of 
>> java.util.Formatter. Do you think I shall raise a "Non-bug 
>> differences from RI" in JIRA? Thanks a lot.
>>
>> <quote>
>> public Formatter(Appendable a)
>> Constructs a new formatter with the specified destination.
>> The locale used is the default locale for this instance of the Java 
>> virtual machine.
>> Parameters:
>> *a - Destination for the formatted output. If a is null then a 
>> StringBuilder will be created.*
>> </quote>
>>
>> Tim Ellison wrote:
>>> Richard is probably best placed to answer that question (so I've 
>>> changed
>>> the subject to attract his attention ;-) )
>>>
>>> Regards,
>>> Tim
>>>
>>> Nathan Beyer wrote:
>>>
>>>> Here are the particular failures that I'm seeing. Some seem like minor
>>>> things like exception discrepancies, but others like this unexpected
>>>> exception "java.util.IllegalFormatFlagsException: Flags = '+'" seem 
>>>> like
>>>> flaws.
>>>>
>>>> BTW: if you search for "test_", it will land on the failed test 
>>>> methods.
>>>>
>>>> TESTROOT
>>>> tests.api.java.util.FormatterTest
>>>> test_ConstructorLjava_lang_Appendable(tests.api.java.util.FormatterTest)

>>>>
>>>> java.util.FormatterClosedException
>>>> at java.util.Formatter.ensureOpen(Formatter.java:2315)
>>>> at java.util.Formatter.out(Formatter.java:2226)
>>>> at
>>>> tests.api.java.util.FormatterTest.test_ConstructorLjava_lang_Appendable(Form

>>>>
>>>> atterTest.java:183)
>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>> at
>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39

>>>>
>>>> )
>>>> at
>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl

>>>>
>>>> .java:25)
>>>> at java.lang.reflect.Method.invoke(Method.java:585)
>>>> at junit.framework.TestCase.runTest(TestCase.java:154)
>>>> at junit.framework.TestCase.runBare(TestCase.java:127)
>>>> at junit.framework.TestResult$1.protect(TestResult.java:106)
>>>> at junit.framework.TestResult.runProtected(TestResult.java:124)
>>>> at junit.framework.TestResult.run(TestResult.java:109)
>>>> at junit.framework.TestCase.run(TestCase.java:118)
>>>> at junit.framework.TestSuite.runTest(TestSuite.java:208)
>>>> at junit.framework.TestSuite.run(TestSuite.java:203)
>>>> at
>>>> org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3T

>>>>
>>>> estReference.java:128)
>>>> at
>>>> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:3

>>>>
>>>> 8)
>>>> at
>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRu

>>>>
>>>> nner.java:460)
>>>> at
>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRu

>>>>
>>>> nner.java:673)
>>>> at
>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.

>>>>
>>>> java:386)
>>>> at
>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner

>>>>
>>>> .java:196)
>>>>
>>>> test_ConstructorLjava_io_FileLjava_lang_String(tests.api.java.util.Formatter

>>>>
>>>> Test)
>>>> junit.framework.AssertionFailedError
>>>> at junit.framework.Assert.fail(Assert.java:47)
>>>> at junit.framework.Assert.assertTrue(Assert.java:20)
>>>> at junit.framework.Assert.assertTrue(Assert.java:27)
>>>> at
>>>> tests.api.java.util.FormatterTest.test_ConstructorLjava_io_FileLjava_lang_St

>>>>
>>>> ring(FormatterTest.java:465)
>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>> at
>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39

>>>>
>>>> )
>>>> at
>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl

>>>>
>>>> .java:25)
>>>> at java.lang.reflect.Method.invoke(Method.java:585)
>>>> at junit.framework.TestCase.runTest(TestCase.java:154)
>>>> at junit.framework.TestCase.runBare(TestCase.java:127)
>>>> at junit.framework.TestResult$1.protect(TestResult.java:106)
>>>> at junit.framework.TestResult.runProtected(TestResult.java:124)
>>>> at junit.framework.TestResult.run(TestResult.java:109)
>>>> at junit.framework.TestCase.run(TestCase.java:118)
>>>> at junit.framework.TestSuite.runTest(TestSuite.java:208)
>>>> at junit.framework.TestSuite.run(TestSuite.java:203)
>>>> at
>>>> org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3T

>>>>
>>>> estReference.java:128)
>>>> at
>>>> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:3

>>>>
>>>> 8)
>>>> at
>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRu

>>>>
>>>> nner.java:460)
>>>> at
>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRu

>>>>
>>>> nner.java:673)
>>>> at
>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.

>>>>
>>>> java:386)
>>>> at
>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner

>>>>
>>>> .java:196)
>>>>
>>>> test_formatLjava_lang_String$Ljava_lang_Object_Percent(tests.api.java.util.F

>>>>
>>>> ormatterTest)
>>>> java.util.IllegalFormatFlagsException: Flags = '+'
>>>> at
>>>> java.util.Formatter$FormatSpecifier.checkText(Formatter.java:2939)
>>>> at java.util.Formatter$FormatSpecifier.<init>(Formatter.java:2644)
>>>> at java.util.Formatter.parse(Formatter.java:2477)
>>>> at java.util.Formatter.format(Formatter.java:2411)
>>>> at java.util.Formatter.format(Formatter.java:2364)
>>>> at
>>>> tests.api.java.util.FormatterTest.test_formatLjava_lang_String$Ljava_lang_Ob

>>>>
>>>> ject_Percent(FormatterTest.java:1069)
>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>> at
>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39

>>>>
>>>> )
>>>> at
>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl

>>>>
>>>> .java:25)
>>>> at java.lang.reflect.Method.invoke(Method.java:585)
>>>> at junit.framework.TestCase.runTest(TestCase.java:154)
>>>> at junit.framework.TestCase.runBare(TestCase.java:127)
>>>> at junit.framework.TestResult$1.protect(TestResult.java:106)
>>>> at junit.framework.TestResult.runProtected(TestResult.java:124)
>>>> at junit.framework.TestResult.run(TestResult.java:109)
>>>> at junit.framework.TestCase.run(TestCase.java:118)
>>>> at junit.framework.TestSuite.runTest(TestSuite.java:208)
>>>> at junit.framework.TestSuite.run(TestSuite.java:203)
>>>> at
>>>> org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3T

>>>>
>>>> estReference.java:128)
>>>> at
>>>> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:3

>>>>
>>>> 8)
>>>> at
>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRu

>>>>
>>>> nner.java:460)
>>>> at
>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRu

>>>>
>>>> nner.java:673)
>>>> at
>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.

>>>>
>>>> java:386)
>>>> at
>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner

>>>>
>>>> .java:196)
>>>>
>>>> test_formatLjava_lang_String$Ljava_lang_Object_GeneralConversion(tests.api.j

>>>>
>>>> ava.util.FormatterTest)
>>>> junit.framework.AssertionFailedError: should throw
>>>> FormatFlagsConversionMismatchException
>>>> at junit.framework.Assert.fail(Assert.java:47)
>>>> at
>>>> tests.api.java.util.FormatterTest.test_formatLjava_lang_String$Ljava_lang_Ob

>>>>
>>>> ject_GeneralConversion(FormatterTest.java:1264)
>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>> at
>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39

>>>>
>>>> )
>>>> at
>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl

>>>>
>>>> .java:25)
>>>> at java.lang.reflect.Method.invoke(Method.java:585)
>>>> at junit.framework.TestCase.runTest(TestCase.java:154)
>>>> at junit.framework.TestCase.runBare(TestCase.java:127)
>>>> at junit.framework.TestResult$1.protect(TestResult.java:106)
>>>> at junit.framework.TestResult.runProtected(TestResult.java:124)
>>>> at junit.framework.TestResult.run(TestResult.java:109)
>>>> at junit.framework.TestCase.run(TestCase.java:118)
>>>> at junit.framework.TestSuite.runTest(TestSuite.java:208)
>>>> at junit.framework.TestSuite.run(TestSuite.java:203)
>>>> at
>>>> org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3T

>>>>
>>>> estReference.java:128)
>>>> at
>>>> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:3

>>>>
>>>> 8)
>>>> at
>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRu

>>>>
>>>> nner.java:460)
>>>> at
>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRu

>>>>
>>>> nner.java:673)
>>>> at
>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.

>>>>
>>>> java:386)
>>>> at
>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner

>>>>
>>>> .java:196)
>>>>
>>>> test_formatLjava_lang_String$Ljava_lang_Object_CharacterConversion(tests.api

>>>>
>>>> .java.util.FormatterTest)
>>>> java.util.UnknownFormatConversionException: Conversion = 'C'
>>>> at
>>>> java.util.Formatter$FormatSpecifier.conversion(Formatter.java:2603)
>>>> at java.util.Formatter$FormatSpecifier.<init>(Formatter.java:2631)
>>>> at java.util.Formatter.parse(Formatter.java:2477)
>>>> at java.util.Formatter.format(Formatter.java:2411)
>>>> at java.util.Formatter.format(Formatter.java:2364)
>>>> at
>>>> tests.api.java.util.FormatterTest.test_formatLjava_lang_String$Ljava_lang_Ob

>>>>
>>>> ject_CharacterConversion(FormatterTest.java:1335)
>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>> at
>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39

>>>>
>>>> )
>>>> at
>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl

>>>>
>>>> .java:25)
>>>> at java.lang.reflect.Method.invoke(Method.java:585)
>>>> at junit.framework.TestCase.runTest(TestCase.java:154)
>>>> at junit.framework.TestCase.runBare(TestCase.java:127)
>>>> at junit.framework.TestResult$1.protect(TestResult.java:106)
>>>> at junit.framework.TestResult.runProtected(TestResult.java:124)
>>>> at junit.framework.TestResult.run(TestResult.java:109)
>>>> at junit.framework.TestCase.run(TestCase.java:118)
>>>> at junit.framework.TestSuite.runTest(TestSuite.java:208)
>>>> at junit.framework.TestSuite.run(TestSuite.java:203)
>>>> at
>>>> org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3T

>>>>
>>>> estReference.java:128)
>>>> at
>>>> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:3

>>>>
>>>> 8)
>>>> at
>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRu

>>>>
>>>> nner.java:460)
>>>> at
>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRu

>>>>
>>>> nner.java:673)
>>>> at
>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.

>>>>
>>>> java:386)
>>>> at
>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner

>>>>
>>>> .java:196)
>>>>
>>>>
>>>>
>>>>> -----Original Message-----
>>>>> From: Geir Magnusson Jr [mailto:geir@pobox.com]
>>>>>
>>>>> Nathan Beyer wrote:
>>>>>> Sure, no problem.
>>>>>>
>>>>>> While talking about this issue, I did want to bring up that the
>>>>>> FormatterTest as it stands, even before this small addendum, doesn't
>>>>> pass
>>>>>> against the RI (Sun 5.0_7).
>>>>> Would you mind if I'm lazy and ask why?
>>>>>
>>>>> geir
>>>>>
>>>>> This particular test isn't in the 'api' test
>>>>>> folder as defined by our suggested best practice, so this may not
be
>>>>>> important, but is this expected/known?
>>>>>>
>>>>>> -Nathan
>>>>>>
>>>> ---------------------------------------------------------------------
>>>> Terms of use : http://incubator.apache.org/harmony/mailing.html
>>>> To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
>>>> For additional commands, e-mail: harmony-dev-help@incubator.apache.org
>>>>
>>>>
>>>
>>
>


-- 
Spark Shen
China Software Development Lab, IBM



---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
For additional commands, e-mail: harmony-dev-help@incubator.apache.org


Mime
View raw message