Hi Richard, I've tried your test - it fails indeed. Strange, such an obvious violation of the spec by RI... +1 for filing JIRA and preserving our behavior.
Regards, 2006/7/25, Richard Liang <[EMAIL PROTECTED]>:
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 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] >>> >>> >>> >> >> > -- Richard Liang 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]
-- Alexei Zakharov, Intel Middleware Product Division --------------------------------------------------------------------- Terms of use : http://incubator.apache.org/harmony/mailing.html To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]