8152143: jlink --include-locales should gracefully detect certain user error
Reviewed-by: mchung
This commit is contained in:
parent
48eb2e9ded
commit
315df6c52c
@ -155,9 +155,13 @@ public final class IncludeLocalesPlugin implements TransformerPlugin, ResourcePr
|
||||
|
||||
@Override
|
||||
public void configure(Map<String, String> config) {
|
||||
priorityList = Arrays.stream(config.get(NAME).split(","))
|
||||
.map(Locale.LanguageRange::new)
|
||||
.collect(Collectors.toList());
|
||||
try {
|
||||
priorityList = Arrays.stream(config.get(NAME).split(","))
|
||||
.map(Locale.LanguageRange::new)
|
||||
.collect(Collectors.toList());
|
||||
} catch (IllegalArgumentException iae) {
|
||||
throw new PluginException(iae.getLocalizedMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -168,7 +172,7 @@ public final class IncludeLocalesPlugin implements TransformerPlugin, ResourcePr
|
||||
// jdk.localedata module validation
|
||||
Set<String> packages = module.getAllPackages();
|
||||
if (!packages.containsAll(LOCALEDATA_PACKAGES)) {
|
||||
throw new PluginException("Missing locale data packages in jdk.localedata:\n\t" +
|
||||
throw new PluginException(PluginsResourceBundle.getMessage(NAME + ".missingpackages") +
|
||||
LOCALEDATA_PACKAGES.stream()
|
||||
.filter(pn -> !packages.contains(pn))
|
||||
.collect(Collectors.joining(",\n\t")));
|
||||
@ -186,6 +190,10 @@ public final class IncludeLocalesPlugin implements TransformerPlugin, ResourcePr
|
||||
|
||||
filtered = filterLocales(available);
|
||||
|
||||
if (filtered.isEmpty()) {
|
||||
throw new PluginException(PluginsResourceBundle.getMessage(NAME + ".nomatchinglocales"));
|
||||
}
|
||||
|
||||
try {
|
||||
String value = META_FILES + filtered.stream()
|
||||
.map(s -> includeLocaleFilePatterns(s))
|
||||
|
@ -68,9 +68,18 @@ zip.argument=[comma separated list of resource paths]
|
||||
|
||||
zip.description=ZIP Compression
|
||||
|
||||
include-locales.argument=<langtag>[,<langtag>]*
|
||||
include-locales.argument=\
|
||||
<langtag>[,<langtag>]*
|
||||
|
||||
include-locales.description=BCP 47 language tags separated by a comma, allowing locale matching\ndefined in RFC 4647. eg: en,ja,*-IN
|
||||
include-locales.description=\
|
||||
BCP 47 language tags separated by a comma, allowing locale matching\n\
|
||||
defined in RFC 4647. eg: en,ja,*-IN
|
||||
|
||||
include-locales.missingpackages=\
|
||||
Missing locale data packages in jdk.localedata:\n\t
|
||||
|
||||
include-locales.nomatchinglocales=\
|
||||
No matching locales found. Check the specified pattern.
|
||||
|
||||
main.status.ok=Functional.
|
||||
|
||||
|
@ -21,26 +21,18 @@
|
||||
* questions.
|
||||
*/
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
import java.lang.reflect.Layer;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import jdk.tools.jlink.plugin.Plugin;
|
||||
import jdk.tools.jlink.plugin.PluginException;
|
||||
import jdk.tools.jlink.internal.PluginRepository;
|
||||
import jdk.tools.jlink.internal.TaskHelper;
|
||||
import jdk.tools.jlink.internal.plugins.PluginsResourceBundle;
|
||||
import tests.Helper;
|
||||
import tests.JImageGenerator;
|
||||
import tests.JImageValidator;
|
||||
import tests.Result;
|
||||
|
||||
/*
|
||||
* @test
|
||||
@ -50,6 +42,7 @@ import tests.JImageValidator;
|
||||
* @modules java.base/jdk.internal.jimage
|
||||
* jdk.jdeps/com.sun.tools.classfile
|
||||
* jdk.jlink/jdk.tools.jlink.internal
|
||||
* jdk.jlink/jdk.tools.jlink.internal.plugins
|
||||
* jdk.jlink/jdk.tools.jmod
|
||||
* jdk.jlink/jdk.tools.jimage
|
||||
* jdk.compiler
|
||||
@ -65,6 +58,7 @@ public class IncludeLocalesPluginTest {
|
||||
private final static int EXPECTED_LOCATIONS = 1;
|
||||
private final static int UNEXPECTED_PATHS = 2;
|
||||
private final static int AVAILABLE_LOCALES = 3;
|
||||
private final static int ERROR_MESSAGE = 4;
|
||||
|
||||
private final static Object[][] testData = {
|
||||
// without --include-locales option: should include all locales
|
||||
@ -144,6 +138,7 @@ public class IncludeLocalesPluginTest {
|
||||
"yav_CM yo yo_BJ yo_NG zgh zgh_MA zh zh_CN zh_CN_#Hans zh_HK " +
|
||||
"zh_HK_#Hans zh_HK_#Hant zh_MO_#Hans zh_MO_#Hant zh_SG zh_SG_#Hans " +
|
||||
"zh_TW zh_TW_#Hant zh__#Hans zh__#Hant zu zu_ZA",
|
||||
"",
|
||||
},
|
||||
|
||||
// All English/Japanese locales
|
||||
@ -173,6 +168,7 @@ public class IncludeLocalesPluginTest {
|
||||
"en_PW en_RW en_SB en_SC en_SD en_SG en_SH en_SL en_SS en_SX en_SZ " +
|
||||
"en_TC en_TK en_TO en_TT en_TV en_TZ en_UG en_UM en_US en_US_POSIX " +
|
||||
"en_VC en_VG en_VI en_VU en_WS en_ZA en_ZM en_ZW ja ja_JP ja_JP_JP_#u-ca-japanese",
|
||||
"",
|
||||
},
|
||||
|
||||
// All locales in India
|
||||
@ -201,6 +197,7 @@ public class IncludeLocalesPluginTest {
|
||||
"/jdk.localedata/sun/text/resources/cldr/ext/FormatData_zh.class"),
|
||||
" as_IN bn_IN bo_IN brx_IN en en_IN en_US en_US_POSIX gu_IN hi_IN kn_IN " +
|
||||
"kok_IN ks_IN_#Arab ml_IN mr_IN ne_IN or_IN pa_IN_#Guru ta_IN te_IN ur_IN",
|
||||
"",
|
||||
},
|
||||
|
||||
// Thai
|
||||
@ -220,6 +217,7 @@ public class IncludeLocalesPluginTest {
|
||||
"/jdk.localedata/sun/text/resources/cldr/ext/FormatData_ja.class",
|
||||
"/jdk.localedata/sun/text/resources/cldr/ext/FormatData_zh.class"),
|
||||
" en en_US en_US_POSIX th th_TH th_TH_TH_#u-nu-thai",
|
||||
"",
|
||||
},
|
||||
|
||||
// Hong Kong
|
||||
@ -242,6 +240,7 @@ public class IncludeLocalesPluginTest {
|
||||
"/jdk.localedata/sun/text/resources/cldr/ext/FormatData_ja.class",
|
||||
"/jdk.localedata/sun/text/resources/cldr/ext/FormatData_th.class"),
|
||||
" en en_US en_US_POSIX zh_HK zh_HK_#Hans zh_HK_#Hant",
|
||||
"",
|
||||
},
|
||||
|
||||
// Norwegian
|
||||
@ -265,6 +264,7 @@ public class IncludeLocalesPluginTest {
|
||||
"/jdk.localedata/sun/text/resources/cldr/ext/FormatData_ja.class",
|
||||
"/jdk.localedata/sun/text/resources/cldr/ext/FormatData_th.class"),
|
||||
" en en_US en_US_POSIX nb nb_NO nb_SJ nn nn_NO no no_NO no_NO_NY",
|
||||
"",
|
||||
},
|
||||
|
||||
// Hebrew/Indonesian/Yiddish
|
||||
@ -290,6 +290,25 @@ public class IncludeLocalesPluginTest {
|
||||
"/jdk.localedata/sun/text/resources/cldr/ext/FormatData_ja.class",
|
||||
"/jdk.localedata/sun/text/resources/cldr/ext/FormatData_th.class"),
|
||||
" en en_US en_US_POSIX in in_ID iw iw_IL ji ji_001",
|
||||
"",
|
||||
},
|
||||
|
||||
// Error case: No matching locales
|
||||
{"--include-locales=xyz",
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
new PluginException(
|
||||
PluginsResourceBundle.getMessage("include-locales.nomatchinglocales"))
|
||||
.toString(),
|
||||
},
|
||||
|
||||
// Error case: Invalid argument
|
||||
{"--include-locales=zh_HK",
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
"range=zh_hk",
|
||||
},
|
||||
};
|
||||
|
||||
@ -304,20 +323,28 @@ public class IncludeLocalesPluginTest {
|
||||
|
||||
for (Object[] data : testData) {
|
||||
// create image for each test data
|
||||
Path image = JImageGenerator.getJLinkTask()
|
||||
Result result = JImageGenerator.getJLinkTask()
|
||||
.modulePath(helper.defaultModulePath())
|
||||
.output(helper.createNewImageDir(moduleName))
|
||||
.addMods("jdk.localedata")
|
||||
.option((String)data[INCLUDE_LOCALES_OPTION])
|
||||
.call().assertSuccess();
|
||||
.call();
|
||||
|
||||
// test locale data entries
|
||||
testLocaleDataEntries(image,
|
||||
(List<String>)data[EXPECTED_LOCATIONS],
|
||||
(List<String>)data[UNEXPECTED_PATHS]);
|
||||
String errorMsg = (String)data[ERROR_MESSAGE];
|
||||
if (errorMsg.isEmpty()) {
|
||||
Path image = result.assertSuccess();
|
||||
|
||||
// test available locales
|
||||
testAvailableLocales(image, (String)data[AVAILABLE_LOCALES]);
|
||||
// test locale data entries
|
||||
testLocaleDataEntries(image,
|
||||
(List<String>)data[EXPECTED_LOCATIONS],
|
||||
(List<String>)data[UNEXPECTED_PATHS]);
|
||||
|
||||
// test available locales
|
||||
testAvailableLocales(image, (String)data[AVAILABLE_LOCALES]);
|
||||
} else {
|
||||
result.assertFailure(new TaskHelper(TaskHelper.JLINK_BUNDLE)
|
||||
.getMessage("error.prefix") + " " +errorMsg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user