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:[EMAIL PROTECTED]

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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]







--
Spark Shen
China Software Development Lab, IBM



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