RFR(S): 8172695: (scanner) java/util/Scanner/ScanTest.java fails

Stuart Marks stuart.marks at oracle.com
Mon Mar 18 23:43:34 UTC 2019

Hi Christoph,

After looking at this for a little bit I realized that it's not necessary to 
have a system particular default locale in order to get the test case to fail. 
It's possible create a locale that causes test case to fail, like so:

     Locale.setDefault(new Locale("en", "DE"))
     Scanner sc = new Scanner("\u0f23.\u0f27");
         ^ throws InputMismatchException

(This is because using "DE" as the locale's country causes texpects , instead of 
. as the decimal separator.)

The test already saves the current default locale and attempts to find a known 
good locale for running the tests. The difficulty seems to be finding a "known 
good" locale. The current check for the language of English doesn't work if the 
default is en_DE.

Instead, I'd suggest we use the root locale Locale.ROOT as the known good locale 
for running the tests. We could then do something like this:

     Locale reservedLocale = Locale.getDefault();
     try {
         // run all the tests
     } finally {
         // restore the default locale

and dispense with the logic of searching the existing locales for one that we 
think is suitable.

(Actually, since the test is being run in /othervm mode, it's not clear to me 
that restoring the previous default locale is necessary. But that's kind of a 
separate discussion. I'm ok with leaving the save/restore in place.)


On 3/18/19 10:57 AM, Brian Burkhalter wrote:
> Hi Christoph,
> Not a locale expert here so you probably need to hear from someone else, but this looks like a reasonable approach to me. One minor comment is to perhaps use format() at lines 67-68 instead of println().
> Thanks,
> Brian
>> On Mar 18, 2019, at 7:51 AM, Langer, Christoph <christoph.langer at sap.com> wrote:
>> please review a fix for 8172695, where java/util/Scanner/ScanTest.java fails. It reproducibly fails on one of our Mac servers, where the locale is set to en_DE.
>> The test in its current form checks if the test VM is run with a supported default Locale by just checking the language to be one of “en”, “zh”, “ko”, “ja”. But it turns out, that also the country part seems to be important. I suggest to change the test case to test whether the VM’s default locale is one of a restricted set of locales and if it isn’t, it shall try to run with “ENGLISH”.
>> I tested the set of US, UK, CHINA, KOREA, JAPAN and GERMANY to work on my machine. Before pushing, I’d run it through the submit repo.
>> bug: https://bugs.openjdk.java.net/browse/JDK-8172695 <https://bugs.openjdk.java.net/browse/JDK-8172695>
>> webrev: http://cr.openjdk.java.net/~clanger/webrevs/8172695.0/ <http://cr.openjdk.java.net/~clanger/webrevs/8172695.0/>

More information about the core-libs-dev mailing list