[RFC][icedtea-web] Fix PR955: regression: SweetHome3D fails to run
Danesh Dadachanji
ddadacha at redhat.com
Wed Aug 8 07:50:14 PDT 2012
On 08/08/12 08:11 AM, Jiri Vanek wrote:
> On 08/07/2012 08:20 PM, Danesh Dadachanji wrote:
>>
>>
>
> I'm ok for head and in some time also for 1.3
>
Awesome, thanks very much for the review! I have one more minor update in the attached patch, I've added printing of homepage and
description when checking for title/vendor if in debug mode. This will make regression tests a bit easier. =)
Can I get another okay?
Thanks again for all the comments!
Cheers,
Danesh
>> On 02/08/12 09:57 AM, Jiri Vanek wrote:
>>> On 08/01/2012 05:13 PM, Danesh Dadachanji wrote:
>>>> Hello,
>>>>
>>>> Here is a fix for PR955. [1]
>>>>
>>>> This was quite a tricky patch to figure out. Proprietary webstart handles locales..
>>>> interestingly.. I've made ours use a fallback
>>>> mechanism to find any information in the information tag. For each item it searches for (e.g. the
>>>> title), it will try to find an
>>>> information tag which has the closest possible locale that looks like your JVM's locale. Please
>>>> see the unit tests for examples.
>>>>
>>>> I have changed a few other things too with how we setup locales, the variant was not working
>>>> properly. It was assumed to be 2
>>>> characters long which is definitely not the case. My locale is en_CA.utf8 <-- variant has 4 chars.
>>>>
>>>> My changes to the localeMatches method cover both the implementation I needed (being able to
>>>> match multiple a locale by a given
>>>> precision - the enum), as well as making it more easily understood. I hope the switch cases do
>>>> this, it was a bit of a brain teaser
>>>> figuring out those if statements and double negatives. :/
>>>>
>>>> All other changes are in the ChangeLog below:
>>>> +2012-08-01 Danesh Dadachanji <ddadacha at redhat.com>
>>>> +
>>>> + Fix PR955: regression: SweetHome3D fails to run
>>>> + * NEWS: Added entry for PR955
>>>> + * netx/net/sourceforge/jnlp/JNLPFile.java: New enum Match that represents
>>>> + the level of precision to use when matching locales.
>>>> + (localMatches): Renamed to localeMatches, added matchLevel paramater
>>>> + and updated conditionals to handle the level of precision specified by it.
>>>> + (getVendor): New method that returns an information's vendor text.
>>>> + (getInformation): Added override methods for getTitle and getVendor
>>>> + that are used by the anonymous class to filter by locale. All three
>>>> + methods now go through all levels of precision to search for the best
>>>> + fitted locale.
>>>> + (getResources), (getResourcesDescs): Updated to check if any level of
>>>> + precision matches when searching for locales.
>>>> + (parse): Added call to checkForTitleVendor.
>>>> + * netx/net/sourceforge/jnlp/Parser.java
>>>> + (checkForTitleVendor): New method to check for availability of localized
>>>> + title and vendor from the information tags. Throws ParseException.
>>>> + (getInfo): Replace loop with foreach loop.
>>>> + (getInformationDesc): Remove check for present title and vendor.
>>>> + (getLocale): Variant returned can now use everything after the eigth
>>>> + element of the locale's string.
>>>> + * netx/net/sourceforge/jnlp/resources/Messages.properties:
>>>> + Update missing title and vendor messages to mention localization.
>>>> + *
>>>> tests/reproducers/simple/InformationTitleVendorParser/testcases/InformationTitleVendorParserTest.java:
>>>>
>>>> + Update output string as per new changes to Messages internationalizations.
>>>> + * tests/netx/unit/net/sourceforge/jnlp/JNLPFileTest.java:
>>>> + New unit test that checks the localesMatches method in JNLPFile.
>>>> + * tests/netx/unit/net/sourceforge/jnlp/MockJNLPFile.java:
>>>> + New class used to create a mock JNLPFile object.
>>>> + * tests/netx/unit/net/sourceforge/jnlp/ParserTest.java:
>>>> + New unit test that checks that the return of getTitle and getVendor
>>>> + have localized information.
>>>>
>>>> I would like to push this to HEAD and backport it to 1.3. The regression isn't present in 1.2 and
>>>> before. Any thoughts?
>>>>
>>>> Regards,
>>>> Danesh
>>>> [1] http://icedtea.classpath.org/bugzilla/show_bug.cgi?id=955
>>>
>>> Hi! Nice work, I have just few really minor stuff for patch itself and several more for tests.
>>>
>>> in JNLPFile there are iner classes ( you have touched them) InformationDesc and ResourcesDesc
>>> which are overriding methods but are
>>> missing annotations. Can you please add those notations? ( I have counted 5 of them)
>>
>> Ah yes, good catch, done.
>>
>>> You are throwing ParseException if venodr/title is not found, and later in tests you are testing
>>> result against internationalize-able
>>> text. What do you think about more modular exception chain?
>>> eg ParseException -> RequiredElementException --> (MissingTitleException + MissingVendorException)
>>> and then in tests check just for
>>> those exceptions without real text?
>>
>> Amazing idea, this also makes the unit tests cleaner! I added a third, MissingInformationException
>> is needed as well.
>>
>>> In Message.properties you are writing
>>> "The title/vendor section has not been defined for your locale in the JNLP file." which looks
>>> wrong to me or I understand badly your
>>> code. Your code will fallback to the not-localised if no locale (ab_CD.efg -> ab_CD -> ab ->
>>> defualt) or not?
>>
>> You are correct, I added that change before I fully understood the fallbacks, changing it now.
>>
>>> This should be a bit reflecting in error message. eg "The title/vendor section has not been
>>> defined for your locale nor is existing its
>>> default value in yourJNLP file."
>>> You can also save duplicate entries in properties by something like :
>>>
>>> PVendor=vendor
>>> PTitle=title
>>> PNoVendorTitleElement=The {1} section has not been defined for your locale in the JNLP file.
>>
>> Neat, I did not know about this. I think it's {0} though for param1.
>
> sorry, sure.
>>
>>>
>>> and
>>>
>>> throw new SomeBetterThenParseException(R("PNoVendorTitleElement",R("PTitle"/"PVendor")));
>>
>> Done.
>>
>>>
>>> but as you wish....
>>>
>>>
>>>
>>> Tests:
>>> MockJNLPFile is in tests directory but is not a test. So test runner will fail on it. This is not
>>> what is wanted. To prevent this yo
>>> can make this class as inner or move to test-extensions. because this file is already shared I'm
>>> for second approach. lets move it eg
>>> to test-extensions/net.sourceforge.jnlp.mocks
>>
>> Great idea, done.
>>
>>> Unittests will probably also deserve tests with new Locale("X") and new Locale("x","y") (you are
>>> now just testing new Locale("x","y","z");
>>
>> Okay, I duplicated all the tests to use Locale("EN") and to use Locale("EN", "CA"). The tests are
>> the almost identical, I had to swap a few expected failures around. (e.g. Locale("EN", "CA") should
>> fail if the info tag had "en_CA.utf8"). Apart from this, they're pretty much the same tests copy
>> pasted. =)
>>
>>> Reproducer test - reproducer is missing:(( I tought that you will include two or three (both
>>> failing and passing) with the Locales
>>> hack. I have posted repreoducer (without hack!) some time ago, it is not in. Feel free to ruse.
>>> But imho reproducer is still worthy.
>>>
>>>
>>
>> I thought the unit tests + the general info/title/vendor reproducer would be enough so I didn't try
>> to write one earlier. I gave writing one a shot but did not get very far. I'd like to finish off the
>> tests but I just don't have enough cycles left to finish them off. Sorry! Please feel free to take
>> over the rest of the patch.
>>
>> I've attached the latest patch here, hopefully you or someone else can pick it up. Thanks very much
>> for all the reviews!
>>
>> Regards,
>> Danesh
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: title-vendor-required-08.patch
Type: text/x-patch
Size: 99535 bytes
Desc: not available
Url : http://mail.openjdk.java.net/pipermail/distro-pkg-dev/attachments/20120808/95adc04a/title-vendor-required-08.patch
More information about the distro-pkg-dev
mailing list