This PR corrects _test/jdk/java/util/Locale/LocaleEnhanceTest.java_, which has 
two test cases under `testBuilderSetLanguageTag()` which accidentally pass. One 
checks that Locale.setLanguageTag(String) throws ILE for duplicate extensions 
and the other for duplicate U-extension keys. The test cases are updated to 
actually test the provided code. When the test cases are fixed, they now fail.

Fixing the behavior to match the expectation of those test cases is consistent 
with the specification.

>From `Locale.forLanguageTag(String)`,

> 
>      * <p>If the specified language tag contains any ill-formed subtags,
>      * the first such subtag and all following subtags are ignored.  Compare
>      * to {@link Locale.Builder#setLanguageTag(String)} which throws an 
> exception
>      * in this case.

and the RFC specification

> Each singleton subtag MUST appear at most one time in each tag
>        (other than as a private use subtag).  That is, singleton subtags
>        MUST NOT be repeated.  For example, the tag "en-a-bbb-a-ccc" is
>        invalid because the subtag 'a' appears twice.

Since duplicate extensions (and Unicode keys/attributes) are invalid, throwing 
`IllformedLocaleException` in (the strict) `Locale.Builder` and ignoring in 
(the lenient) `Locale.forLanguageTag` for such tags would be appropriate. This 
PR updates the implementation as such.

-------------

Commit messages:
 - Add duplicate checking for Locale.Builder.setLanguageTag(String)
 - Add duplicate U extension attributes test case
 - Remove testing classes in favor or JUnit (which fixes unintentional passing)

Changes: https://git.openjdk.org/jdk/pull/27775/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=27775&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8369590
  Stats: 686 lines in 4 files changed: 75 ins; 169 del; 442 mod
  Patch: https://git.openjdk.org/jdk/pull/27775.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/27775/head:pull/27775

PR: https://git.openjdk.org/jdk/pull/27775

Reply via email to