aboutsummaryrefslogtreecommitdiffstats
path: root/tests/reproducers/simple/LocalesTest/testcases/LocalesTestTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/reproducers/simple/LocalesTest/testcases/LocalesTestTest.java')
-rw-r--r--tests/reproducers/simple/LocalesTest/testcases/LocalesTestTest.java281
1 files changed, 281 insertions, 0 deletions
diff --git a/tests/reproducers/simple/LocalesTest/testcases/LocalesTestTest.java b/tests/reproducers/simple/LocalesTest/testcases/LocalesTestTest.java
new file mode 100644
index 0000000..c5f7b54
--- /dev/null
+++ b/tests/reproducers/simple/LocalesTest/testcases/LocalesTestTest.java
@@ -0,0 +1,281 @@
+/* LocalisedInformationElementTest.java
+Copyright (C) 2012 Red Hat, Inc.
+
+This file is part of IcedTea.
+
+IcedTea is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License as published by
+the Free Software Foundation, version 2.
+
+IcedTea is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with IcedTea; see the file COPYING. If not, write to
+the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version.
+ */
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.PropertyResourceBundle;
+import java.util.ResourceBundle;
+import java.util.Set;
+import net.sourceforge.jnlp.ProcessResult;
+import net.sourceforge.jnlp.ServerAccess;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class LocalesTestTest {
+
+ private static ServerAccess server = new ServerAccess();
+ String[] keys = {
+ "BOUsage",
+ "BOUsage2",
+ "BOArg",
+ "BOParam",
+ "BOProperty",
+ "BOUpdate",
+ "BOLicense",
+ "BOVerbose",
+ "BOAbout",
+ "BONosecurity",
+ "BONoupdate",
+ "BOHeadless",
+ "BOStrict",
+ "BOViewer",
+ "BXnofork",
+ "BXclearcache",
+ "BOHelp"};
+
+ /**
+ * this will prepare new set of variables with wanted locale, which can be
+ * then passed to subprocess
+ *
+ * @param locale - locale to be set to LANG variable, eg cs_CZ.UTF-8
+ */
+ public static String[] getChangeLocalesForSubproces(String locale) {
+ ServerAccess.logOutputReprint("Setting locales");
+ Map<String, String> p = System.getenv();
+ Set<Entry<String, String>> r = p.entrySet();
+ List<Entry<String, String>> rr = new ArrayList(r);
+ Collections.sort(rr, new Comparator<Entry<String, String>>() {
+
+ @Override
+ public int compare(Entry<String, String> o1, Entry<String, String> o2) {
+ return o1.getKey().compareTo(o2.getKey());
+ }
+ });
+ String[] l = new String[rr.size()];
+ int i = 0;
+ for (Iterator<Entry<String, String>> it = rr.iterator(); it.hasNext(); i++) {
+ Entry<String, String> entry = it.next();
+ String v = entry.getValue();
+ String s = entry.getKey() + "=" + v;
+ //System.out.println(s);
+ if (entry.getKey().equals("LANG")) {
+ ServerAccess.logOutputReprint("was " + v);
+ v = locale;
+ ServerAccess.logOutputReprint("set " + v);
+ }
+ s = entry.getKey() + "=" + v;
+ l[i] = s;
+ }
+ return l;
+ }
+
+ public ResourceBundle getPropertiesCz() throws IOException {
+ return getProperties("_cs_CZ");
+
+ }
+
+ public ResourceBundle getPropertiesEn() throws IOException {
+ return getProperties("");
+
+ }
+
+ public ResourceBundle getProperties(String s) throws IOException {
+ return new PropertyResourceBundle(this.getClass().getClassLoader().getResourceAsStream("net/sourceforge/jnlp/resources/Messages" + s + ".properties"));
+
+ }
+ //just launching javaws -about to see if messages are corectly localised
+ List<String> javaws = Arrays.asList(new String[]{server.getJavawsLocation(), "-help", ServerAccess.HEADLES_OPTION});
+
+ @Test
+ public void testLocalesEnUsUtf() throws Exception {
+ String[] l = getChangeLocalesForSubproces("en_US.UTF-8");
+ ProcessResult pr = ServerAccess.executeProcess(javaws, null, null, l);
+ assertEnglish(pr.stdout);
+ assertNotCzh(pr.stdout);
+ }
+
+ @Test
+ public void testLocalesCsCz() throws Exception {
+ String[] l = getChangeLocalesForSubproces("cs_CZ");
+ ProcessResult pr = ServerAccess.executeProcess(javaws, null, null, l);
+ assertNotEnglish(pr.stdout);
+ assertNotCzh(pr.stdout);
+ iteratePropertiesForAproxCz(pr.stdout);
+ }
+
+ @Test
+ public void testLocalesCsCzUtf() throws Exception {
+ String[] l = getChangeLocalesForSubproces("cs_CZ.UTF-8");
+ ProcessResult pr = ServerAccess.executeProcess(javaws, null, null, l);
+ assertNotEnglish(pr.stdout);
+ assertCz(pr.stdout);
+ iteratePropertiesForAproxCz(pr.stdout);
+ }
+
+ @Test
+ public void testLocalesInvalid() throws Exception {
+ String[] l = getChangeLocalesForSubproces("ax_BU");
+ ProcessResult pr = ServerAccess.executeProcess(javaws, null, null, l);
+ assertEnglish(pr.stdout);
+ assertNotCzh(pr.stdout);
+ }
+
+ private void assertEnglish(String s) throws IOException {
+ ResourceBundle props = getPropertiesEn();
+ iteratePropertiesFor(props, s, true, "english");
+ }
+
+ private void assertNotEnglish(String s) throws IOException {
+ ResourceBundle props = getPropertiesEn();
+ iteratePropertiesFor(props, s, false, "english");
+ }
+
+ private void assertCz(String s) throws IOException {
+ ResourceBundle props = getPropertiesCz();
+ iteratePropertiesFor(props, s, true, "czech");
+ }
+
+ private void assertNotCzh(String s) throws IOException {
+ ResourceBundle props = getPropertiesCz();
+ iteratePropertiesFor(props, s, false, "czech");
+ }
+
+ /**
+ * This method is iterating all keys defined in this class, geting their value in given
+ * properties, and then checking if given output have/have not (depends on value of assertTrue)
+ * this string contained.
+ *
+ * @param props
+ * @param outputToExamine
+ * @param assertTrue
+ * @param languageId
+ */
+ private void iteratePropertiesFor(ResourceBundle props, String outputToExamine, boolean assertTrue, String languageId) {
+ int keysFound = 0;
+ for (int i = 0; i < keys.length; i++) {
+ String string = keys[i];
+ String value = props.getString(string);
+ if (value == null) {
+ continue;
+ }
+ keysFound++;
+ if (assertTrue) {
+ Assert.assertTrue("Output must contains " + languageId + " text, failed on " + string, outputToExamine.contains(value));
+ } else {
+ Assert.assertFalse("Output must NOT contains " + languageId + " text, failed on " + string, outputToExamine.contains(value));
+
+ }
+ }
+ Assert.assertTrue("At least one key must be found, was not", keysFound > 0);
+ }
+
+ /**
+ * This method is iterating all keys defined in this class, geting their value in given
+ * properties, transforming this to asci-ionly regex and then checking if
+ * given output match/matchnot (depends on value of assertTrue) this string,
+ *
+ * @param outputToBeChecked
+ * @throws IOException
+ */
+ private void iteratePropertiesForAproxCz(String outputToBeChecked) throws IOException {
+ ResourceBundle props = getPropertiesCz();
+ int keysFound = 0;
+ for (int i = 0; i < keys.length; i++) {
+ String string = keys[i];
+ String value = props.getString(string);
+ if (value == null) {
+ continue;
+ }
+ value = regexIt(value);
+ keysFound++;
+ {
+ Assert.assertTrue("Output must match cz text, failed on " + string, outputToBeChecked.matches(value));
+ }
+ }
+ Assert.assertTrue("At least one key must be found, was not", keysFound > 0);
+ }
+ String[] czEvil = {
+ "á",
+ "č",
+ "ď",
+ "ě",
+ "é",
+ "í",
+ "ň",
+ "ó",
+ "ř",
+ "š",
+ "ť",
+ "ú",
+ "ů",
+ "ý",
+ "ž",
+ "[",
+ "]",
+ "(",
+ ")"};
+
+ /**
+ * This method transforms given string to asci-only regex, replacing groups of
+ * czech characters (defined by czEvil variable) by .+
+ *
+ * @param value
+ * @return
+ */
+ private String regexIt(String value) {
+ return regexIt(value, czEvil);
+ }
+
+ private static String regexIt(String value, String[] map) {
+ for (int i = 0; i < map.length; i++) {
+ String string = map[i];
+ value = value.replace(string, ".");
+ value = value.replace(string.toUpperCase(), ".");
+ }
+
+ value = value.replaceAll("\\.+", ".+");
+ value = "(?s).*" + value + ".*";
+ return value;
+ }
+}