diff options
author | Danesh Dadachanji <[email protected]> | 2012-08-08 11:48:06 -0400 |
---|---|---|
committer | Danesh Dadachanji <[email protected]> | 2012-08-08 11:48:06 -0400 |
commit | 491377046ce85cbd7fc34811f778278e1864fe5c (patch) | |
tree | 7d155d87093a2ce4201b598ec73940f4387d4412 /tests/netx/unit/net/sourceforge | |
parent | cbf4c1118d8f44453fefb8f2223b3a6fe743fa3f (diff) |
Fix PR955: regression: SweetHome3D fails to run
Diffstat (limited to 'tests/netx/unit/net/sourceforge')
-rw-r--r-- | tests/netx/unit/net/sourceforge/jnlp/JNLPFileTest.java | 106 | ||||
-rw-r--r-- | tests/netx/unit/net/sourceforge/jnlp/ParserTest.java | 1358 |
2 files changed, 1464 insertions, 0 deletions
diff --git a/tests/netx/unit/net/sourceforge/jnlp/JNLPFileTest.java b/tests/netx/unit/net/sourceforge/jnlp/JNLPFileTest.java new file mode 100644 index 0000000..3c27efc --- /dev/null +++ b/tests/netx/unit/net/sourceforge/jnlp/JNLPFileTest.java @@ -0,0 +1,106 @@ +/* JNLPFileTest.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. + */ + +package net.sourceforge.jnlp; + +import java.util.Locale; + +import net.sourceforge.jnlp.JNLPFile.Match; +import net.sourceforge.jnlp.mock.MockJNLPFile; + +import org.junit.Assert; +import org.junit.Test; + +public class JNLPFileTest { + Locale jvmLocale = new Locale("en", "CA", "utf8"); + MockJNLPFile file = new MockJNLPFile(jvmLocale); + + @Test + public void testCompareAll() { + Locale[] correctAvailable = { new Locale("en", "CA", "utf8") }; + Assert.assertTrue("Entire locale should match but did not.", + file.localeMatches(jvmLocale, correctAvailable, Match.LANG_COUNTRY_VARIANT)); + + Locale[] mismatchedAvailable = { new Locale("en", "CA", "utf16") }; + Assert.assertFalse("Should not match variant but did.", + file.localeMatches(jvmLocale, mismatchedAvailable, Match.LANG_COUNTRY_VARIANT)); + } + + @Test + public void testLangAndCountry() { + Locale[] correctAvailable = { new Locale("en", "CA") }; + Assert.assertTrue("Should match language and country, ignoring variant but did not.", + file.localeMatches(jvmLocale, correctAvailable, Match.LANG_COUNTRY)); + + Locale[] mismatchedAvailable = { new Locale("en", "EN") }; + Assert.assertFalse("Should not match country but did.", + file.localeMatches(jvmLocale, mismatchedAvailable, Match.LANG_COUNTRY)); + + Locale[] extraMismatched = { new Locale("en", "CA", "utf16") }; + Assert.assertFalse("Should not match because of extra variant but did.", + file.localeMatches(jvmLocale, extraMismatched, Match.LANG_COUNTRY)); + } + + @Test + public void testLangOnly() { + Locale[] correctAvailable = { new Locale("en") }; + Assert.assertTrue("Should match only language but did not.", + file.localeMatches(jvmLocale, correctAvailable, Match.LANG)); + + Locale[] mismatchedAvailable = { new Locale("fr", "CA", "utf8") }; + Assert.assertFalse("Should not match language but did.", + file.localeMatches(jvmLocale, mismatchedAvailable, Match.LANG)); + + Locale[] extraMismatched = { new Locale("en", "EN") }; + Assert.assertFalse("Should not match because of extra country but did.", + file.localeMatches(jvmLocale, extraMismatched, Match.LANG)); + } + + @Test + public void testNoLocalAvailable() { + Assert.assertTrue("Null locales should match but did not.", + file.localeMatches(jvmLocale, null, Match.GENERALIZED)); + + Locale[] emptyAvailable = {}; + Assert.assertTrue("Empty locales list should match but did not.", + file.localeMatches(jvmLocale, emptyAvailable, Match.GENERALIZED)); + + Locale[] mismatchAvailable = { new Locale("fr", "FR", "utf16") }; + Assert.assertFalse("Locales list should not match generalized case but did.", + file.localeMatches(jvmLocale, mismatchAvailable, Match.GENERALIZED)); + } +} diff --git a/tests/netx/unit/net/sourceforge/jnlp/ParserTest.java b/tests/netx/unit/net/sourceforge/jnlp/ParserTest.java new file mode 100644 index 0000000..47b3010 --- /dev/null +++ b/tests/netx/unit/net/sourceforge/jnlp/ParserTest.java @@ -0,0 +1,1358 @@ +/* ParserTest.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. + */ + +package net.sourceforge.jnlp; + +import java.io.ByteArrayInputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import net.sourceforge.jnlp.mock.MockJNLPFile; + +import org.junit.Assert; +import org.junit.Test; + +/** Test various corner cases of the parser */ +public class ParserTest { + + private static final String LANG = "en"; + private static final String COUNTRY = "CA"; + private static final String VARIANT = "utf8"; + private static final Locale LANG_LOCALE = new Locale(LANG); + private static final Locale LANG_COUNTRY_LOCALE = new Locale(LANG, COUNTRY); + private static final Locale ALL_LOCALE = new Locale(LANG, COUNTRY, VARIANT); + + @Test(expected = MissingInformationException.class) + public void testMissingInfoFullLocale() throws ParseException { + String data = "<jnlp></jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + + MockJNLPFile file = new MockJNLPFile(ALL_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + parser.getInfo(root); + } + + @Test(expected = MissingTitleException.class) + public void testEmptyLocalizedInfoFullLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information locale='" + LANG + "_" + COUNTRY + "." + VARIANT + "'>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + + MockJNLPFile file = new MockJNLPFile(ALL_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = new ArrayList<InformationDesc>(); + infoDescs.addAll(parser.getInfo(root)); + + Assert.assertTrue("Exactly one info desc should be found", infoDescs.size() == 1); + + file.setInfo(infoDescs); + parser.checkForInformation(); + } + + @Test + public void testOneFullyLocalizedInfoFullLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information locale='" + LANG + "_" + COUNTRY + "." + VARIANT + "'>\n" + + " <title>English_CA_utf8_T</title>\n" + + " <vendor>English_CA_utf8_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + + MockJNLPFile file = new MockJNLPFile(ALL_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = parser.getInfo(root); + + Assert.assertTrue("Exactly one info desc should be found", infoDescs.size() == 1); + + file.setInfo(infoDescs); + + Assert.assertEquals("Title should be `English_CA_utf8_T' but wasn't", + "English_CA_utf8_T", file.getTitle()); + Assert.assertEquals("Vendor should be `English_CA_utf8_V' but wasn't", + "English_CA_utf8_V", file.getVendor()); + } + + @Test + public void testOneLangCountryLocalizedInfoFullLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <title>Generalized_T</title>\n" + + " <vendor>Generalized_V</vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "_" + COUNTRY + "'>\n" + + " <title>English_CA_T</title>\n" + + " <vendor>English_CA_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + MockJNLPFile file = new MockJNLPFile(ALL_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = parser.getInfo(root); + Assert.assertTrue("Exactly two info descs should be found", infoDescs.size() == 2); + + file.setInfo(infoDescs); + Assert.assertEquals("Title should be `English_CA_T' but wasn't", + "English_CA_T", file.getTitle()); + Assert.assertEquals("Vendor should be `English_CA_V' but wasn't", + "English_CA_V", file.getVendor()); + } + + @Test + public void testOneLangLocalizedInfoFullLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <title>Generalized_T</title>\n" + + " <vendor>Generalized_V</vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "'>\n" + + " <title>English_T</title>\n" + + " <vendor>English_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + MockJNLPFile file = new MockJNLPFile(ALL_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = parser.getInfo(root); + Assert.assertTrue("Exactly two info descs should be found", infoDescs.size() == 2); + + file.setInfo(infoDescs); + Assert.assertEquals("Title should be `English_T' but wasn't", + "English_T", file.getTitle()); + Assert.assertEquals("Vendor should be `English_V' but wasn't", + "English_V", file.getVendor()); + } + + @Test + public void testGeneralizedInfoFullLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <title>Generalized_T</title>\n" + + " <vendor>Generalized_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + MockJNLPFile file = new MockJNLPFile(ALL_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = parser.getInfo(root); + Assert.assertTrue("Exactly one info desc should be found", infoDescs.size() == 1); + + file.setInfo(infoDescs); + Assert.assertEquals("Title should be `Generalized_T' but wasn't", + "Generalized_T", file.getTitle()); + Assert.assertEquals("Vendor should be `Generalized_V' but wasn't", + "Generalized_V", file.getVendor()); + } + + @Test + public void testTwoDifferentLocalizedInfoFullLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <title>Generalized_T</title>\n" + + " <vendor>Generalized_V</vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "'>\n" + + " <title>English_T</title>\n" + + " <vendor>English_V</vendor>\n" + + " </information>\n" + + " <information locale='fr'>\n" + + " <title>French_T</title>\n" + + " <vendor>French_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + MockJNLPFile file = new MockJNLPFile(ALL_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = parser.getInfo(root); + Assert.assertTrue("Exactly three info descs should be found", infoDescs.size() == 3); + + file.setInfo(infoDescs); + Assert.assertEquals("Title should be `English_T' but wasn't", + "English_T", file.getTitle()); + Assert.assertEquals("Vendor should be `English_V' but wasn't", + "English_V", file.getVendor()); + } + + @Test + public void testTwoLocalizedWithSameLangInfoFullLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <title>Generalized_T</title>\n" + + " <vendor>Generalized_V</vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "'>\n" + + " <title>English_T</title>\n" + + " <vendor>English_V</vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "_" + COUNTRY + "'>\n" + + " <title>English_CA_T</title>\n" + + " <vendor>English_CA_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + MockJNLPFile file = new MockJNLPFile(ALL_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = parser.getInfo(root); + Assert.assertTrue("Exactly three info descs should be found", infoDescs.size() == 3); + + file.setInfo(infoDescs); + Assert.assertEquals("Title should be `English_CA_T' but wasn't", + "English_CA_T", file.getTitle()); + Assert.assertEquals("Vendor should be `English_CA_V' but wasn't", + "English_CA_V", file.getVendor()); + } + + @Test + public void testTwoSameLangOneMissingTitleFullLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <title>Generalized_T</title>\n" + + " <vendor>Generalized_V</vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "'>\n" + + " <title>English_T</title>\n" + + " <vendor>English_V</vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "_" + COUNTRY + "'>\n" + + " <vendor>English_CA_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + MockJNLPFile file = new MockJNLPFile(ALL_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = parser.getInfo(root); + Assert.assertTrue("Exactly three info descs should be found", infoDescs.size() == 3); + + file.setInfo(infoDescs); + Assert.assertEquals("Title should be `English_T' but wasn't", + "English_T", file.getTitle()); + Assert.assertEquals("Vendor should be `English_CA_V' but wasn't", + "English_CA_V", file.getVendor()); + } + + @Test + public void testTwoSameLangWithGeneralizedTitleFullLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <title>Generalized_T</title>\n" + + " <vendor>Generalized_V</vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "'>\n" + + " <vendor>English_V</vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "_" + COUNTRY + "'>\n" + + " <vendor>English_CA_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + MockJNLPFile file = new MockJNLPFile(ALL_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = parser.getInfo(root); + Assert.assertTrue("Exactly three info descs should be found", infoDescs.size() == 3); + + file.setInfo(infoDescs); + Assert.assertEquals("Title should be `Generalized_T' but wasn't", + "Generalized_T", file.getTitle()); + Assert.assertEquals("Vendor should be `English_CA_V' but wasn't", + "English_CA_V", file.getVendor()); + } + + @Test(expected = MissingTitleException.class) + public void testMissingTitleFullLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <vendor>Generalized_V</vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "'>\n" + + " <vendor>English_V</vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "_" + COUNTRY + "'>\n" + + " <vendor>English_CA_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + MockJNLPFile file = new MockJNLPFile(ALL_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = new ArrayList<InformationDesc>(); + infoDescs.addAll(parser.getInfo(root)); + + Assert.assertTrue("Exactly three info descs should be found", infoDescs.size() == 3); + + file.setInfo(infoDescs); + parser.checkForInformation(); + } + + @Test(expected = MissingVendorException.class) + public void testMissingVendorFullLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <title>Generalized_T</title>\n" + + " </information>\n" + + " <information locale='" + LANG + "'>\n" + + " <title>English_T</title>\n" + + " </information>\n" + + " <information locale='" + LANG + "_" + COUNTRY + "'>\n" + + " <title>English_CA_T</title>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + MockJNLPFile file = new MockJNLPFile(ALL_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = new ArrayList<InformationDesc>(); + infoDescs.addAll(parser.getInfo(root)); + + Assert.assertTrue("Exactly three info descs should be found", infoDescs.size() == 3); + + file.setInfo(infoDescs); + parser.checkForInformation(); + } + + @Test(expected = MissingTitleException.class) + public void testMissingLocalizedTitleFullLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <vendor>Generalized_V</vendor>\n" + + " </information>\n" + + " <information locale='fr'>\n" + + " <vendor>English_CA_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + MockJNLPFile file = new MockJNLPFile(ALL_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = new ArrayList<InformationDesc>(); + infoDescs.addAll(parser.getInfo(root)); + + Assert.assertTrue("Exactly two info descs should be found", infoDescs.size() == 2); + + file.setInfo(infoDescs); + parser.checkForInformation(); + } + + @Test(expected = MissingVendorException.class) + public void testMissingLocalizedVendorFullLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <title>Generalized_T</title>\n" + + " </information>\n" + + " <information locale='fr'>\n" + + " <title>English_CA_T</title>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + MockJNLPFile file = new MockJNLPFile(ALL_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = new ArrayList<InformationDesc>(); + infoDescs.addAll(parser.getInfo(root)); + + Assert.assertTrue("Exactly two info descs should be found",infoDescs.size() == 2); + + file.setInfo(infoDescs); + parser.checkForInformation(); + } + + @Test(expected = MissingTitleException.class) + public void testEmptyLocalizedTitleFullLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information locale='" + LANG + "_" + COUNTRY + "." + VARIANT + "'>\n" + + " <title></title>\n" + + " <vendor>English_CA_utf8_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + + MockJNLPFile file = new MockJNLPFile(ALL_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = new ArrayList<InformationDesc>(); + infoDescs.addAll(parser.getInfo(root)); + + Assert.assertTrue("Exactly one info desc should be found", infoDescs.size() == 1); + + file.setInfo(infoDescs); + parser.checkForInformation(); + } + + @Test(expected = MissingVendorException.class) + public void testEmptyLocalizedVendorFullLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information locale='" + LANG + "_" + COUNTRY + "." + VARIANT + "'>\n" + + " <title>English_CA_utf8_T</title>\n" + + " <vendor></vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + + MockJNLPFile file = new MockJNLPFile(ALL_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = new ArrayList<InformationDesc>(); + infoDescs.addAll(parser.getInfo(root)); + + Assert.assertTrue("Exactly one info desc should be found", infoDescs.size() == 1); + + file.setInfo(infoDescs); + parser.checkForInformation(); + } + + @Test + public void testFallbackEmptyLocalizedTitleVendorFullLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <title>Generalized_T</title>\n" + + " <vendor>Generalized_V</vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "'>\n" + + " <title>English_T</title>\n" + + " <vendor></vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "_" + COUNTRY + "'>\n" + + " <title></title>\n" + + " <vendor></vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "_" + COUNTRY + "." + VARIANT + "'>\n" + + " <title></title>\n" + + " <vendor></vendor>\n" + + " </information>\n" + + " <information locale='fr_" + COUNTRY + "." + VARIANT + "'>\n" + + " <title>French_CA_utf8_T</title>\n" + + " <vendor>French_CA_utf8_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + + MockJNLPFile file = new MockJNLPFile(ALL_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = parser.getInfo(root); + + Assert.assertTrue("Exactly five info descs should be found", infoDescs.size() == 5); + + file.setInfo(infoDescs); + + Assert.assertEquals("Title should be `English_T' but wasn't", + "English_T", file.getTitle()); + Assert.assertEquals("Vendor should be `Generalized_V' but wasn't", + "Generalized_V", file.getVendor()); + + parser.checkForInformation(); + } + + @Test(expected = MissingInformationException.class) + public void testMissingInfoLangCountryLocale() throws ParseException { + String data = "<jnlp></jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + + MockJNLPFile file = new MockJNLPFile(LANG_COUNTRY_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + parser.getInfo(root); + } + + @Test(expected = MissingTitleException.class) + public void testEmptyLocalizedInfoLangCountryLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information locale='" + LANG + "_" + COUNTRY + "'>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + + MockJNLPFile file = new MockJNLPFile(LANG_COUNTRY_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = new ArrayList<InformationDesc>(); + infoDescs.addAll(parser.getInfo(root)); + + Assert.assertTrue("Exactly one info desc should be found", infoDescs.size() == 1); + + file.setInfo(infoDescs); + parser.checkForInformation(); + } + + @Test(expected = MissingTitleException.class) + public void testOneFullyLocalizedInfoLangCountryLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information locale='" + LANG + "_" + COUNTRY + "." + VARIANT + "'>\n" + + " <title>English_CA_utf8_T</title>\n" + + " <vendor>English_CA_utf8_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + + MockJNLPFile file = new MockJNLPFile(LANG_COUNTRY_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = parser.getInfo(root); + + Assert.assertTrue("Exactly one info desc should be found", infoDescs.size() == 1); + + file.setInfo(infoDescs); + parser.checkForInformation(); + } + + @Test + public void testOneLangCountryLocalizedInfoLangCountryLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <title>Generalized_T</title>\n" + + " <vendor>Generalized_V</vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "_" + COUNTRY + "'>\n" + + " <title>English_CA_T</title>\n" + + " <vendor>English_CA_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + MockJNLPFile file = new MockJNLPFile(LANG_COUNTRY_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = parser.getInfo(root); + Assert.assertTrue("Exactly two info descs should be found", infoDescs.size() == 2); + + file.setInfo(infoDescs); + Assert.assertEquals("Title should be `English_CA_T' but wasn't", + "English_CA_T", file.getTitle()); + Assert.assertEquals("Vendor should be `English_CA_V' but wasn't", + "English_CA_V", file.getVendor()); + } + + @Test + public void testOneLangLocalizedInfoLangCountryLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <title>Generalized_T</title>\n" + + " <vendor>Generalized_V</vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "'>\n" + + " <title>English_T</title>\n" + + " <vendor>English_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + MockJNLPFile file = new MockJNLPFile(LANG_COUNTRY_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = parser.getInfo(root); + Assert.assertTrue("Exactly two info descs should be found", infoDescs.size() == 2); + + file.setInfo(infoDescs); + Assert.assertEquals("Title should be `English_T' but wasn't", + "English_T", file.getTitle()); + Assert.assertEquals("Vendor should be `English_V' but wasn't", + "English_V", file.getVendor()); + } + + @Test + public void testGeneralizedInfoLangCountryLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <title>Generalized_T</title>\n" + + " <vendor>Generalized_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + MockJNLPFile file = new MockJNLPFile(LANG_COUNTRY_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = parser.getInfo(root); + Assert.assertTrue("Exactly one info desc should be found", infoDescs.size() == 1); + + file.setInfo(infoDescs); + Assert.assertEquals("Title should be `Generalized_T' but wasn't", + "Generalized_T", file.getTitle()); + Assert.assertEquals("Vendor should be `Generalized_V' but wasn't", + "Generalized_V", file.getVendor()); + } + + @Test + public void testTwoDifferentLocalizedInfoLangCountryLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <title>Generalized_T</title>\n" + + " <vendor>Generalized_V</vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "'>\n" + + " <title>English_T</title>\n" + + " <vendor>English_V</vendor>\n" + + " </information>\n" + + " <information locale='fr'>\n" + + " <title>French_T</title>\n" + + " <vendor>French_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + MockJNLPFile file = new MockJNLPFile(LANG_COUNTRY_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = parser.getInfo(root); + Assert.assertTrue("Exactly three info descs should be found", infoDescs.size() == 3); + + file.setInfo(infoDescs); + Assert.assertEquals("Title should be `English_T' but wasn't", + "English_T", file.getTitle()); + Assert.assertEquals("Vendor should be `English_V' but wasn't", + "English_V", file.getVendor()); + } + + @Test + public void testTwoLocalizedWithSameLangInfoLangCountryLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <title>Generalized_T</title>\n" + + " <vendor>Generalized_V</vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "'>\n" + + " <title>English_T</title>\n" + + " <vendor>English_V</vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "_" + COUNTRY + "'>\n" + + " <title>English_CA_T</title>\n" + + " <vendor>English_CA_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + MockJNLPFile file = new MockJNLPFile(LANG_COUNTRY_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = parser.getInfo(root); + Assert.assertTrue("Exactly three info descs should be found", infoDescs.size() == 3); + + file.setInfo(infoDescs); + Assert.assertEquals("Title should be `English_CA_T' but wasn't", + "English_CA_T", file.getTitle()); + Assert.assertEquals("Vendor should be `English_CA_V' but wasn't", + "English_CA_V", file.getVendor()); + } + + @Test + public void testTwoSameLangOneMissingTitleLangCountryLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <title>Generalized_T</title>\n" + + " <vendor>Generalized_V</vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "'>\n" + + " <title>English_T</title>\n" + + " <vendor>English_V</vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "_" + COUNTRY + "'>\n" + + " <vendor>English_CA_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + MockJNLPFile file = new MockJNLPFile(LANG_COUNTRY_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = parser.getInfo(root); + Assert.assertTrue("Exactly three info descs should be found", infoDescs.size() == 3); + + file.setInfo(infoDescs); + Assert.assertEquals("Title should be `English_T' but wasn't", + "English_T", file.getTitle()); + Assert.assertEquals("Vendor should be `English_CA_V' but wasn't", + "English_CA_V", file.getVendor()); + } + + @Test + public void testTwoSameLangWithGeneralizedTitleLangCountryLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <title>Generalized_T</title>\n" + + " <vendor>Generalized_V</vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "'>\n" + + " <vendor>English_V</vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "_" + COUNTRY + "'>\n" + + " <vendor>English_CA_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + MockJNLPFile file = new MockJNLPFile(LANG_COUNTRY_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = parser.getInfo(root); + Assert.assertTrue("Exactly three info descs should be found", infoDescs.size() == 3); + + file.setInfo(infoDescs); + Assert.assertEquals("Title should be `Generalized_T' but wasn't", + "Generalized_T", file.getTitle()); + Assert.assertEquals("Vendor should be `English_CA_V' but wasn't", + "English_CA_V", file.getVendor()); + } + + @Test(expected = MissingTitleException.class) + public void testMissingTitleLangCountryLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <vendor>Generalized_V</vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "'>\n" + + " <vendor>English_V</vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "_" + COUNTRY + "'>\n" + + " <vendor>English_CA_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + MockJNLPFile file = new MockJNLPFile(LANG_COUNTRY_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = new ArrayList<InformationDesc>(); + infoDescs.addAll(parser.getInfo(root)); + + Assert.assertTrue("Exactly three info descs should be found", infoDescs.size() == 3); + + file.setInfo(infoDescs); + parser.checkForInformation(); + } + + @Test(expected = MissingVendorException.class) + public void testMissingVendorLangCountryLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <title>Generalized_T</title>\n" + + " </information>\n" + + " <information locale='" + LANG + "'>\n" + + " <title>English_T</title>\n" + + " </information>\n" + + " <information locale='" + LANG + "_" + COUNTRY + "'>\n" + + " <title>English_CA_T</title>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + MockJNLPFile file = new MockJNLPFile(LANG_COUNTRY_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = new ArrayList<InformationDesc>(); + infoDescs.addAll(parser.getInfo(root)); + + Assert.assertTrue("Exactly three info descs should be found", infoDescs.size() == 3); + + file.setInfo(infoDescs); + parser.checkForInformation(); + } + + @Test(expected = MissingTitleException.class) + public void testMissingLocalizedTitleLangCountryLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <vendor>Generalized_V</vendor>\n" + + " </information>\n" + + " <information locale='fr'>\n" + + " <vendor>English_CA_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + MockJNLPFile file = new MockJNLPFile(LANG_COUNTRY_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = new ArrayList<InformationDesc>(); + infoDescs.addAll(parser.getInfo(root)); + + Assert.assertTrue("Exactly two info descs should be found", infoDescs.size() == 2); + + file.setInfo(infoDescs); + parser.checkForInformation(); + } + + @Test(expected = MissingVendorException.class) + public void testMissingLocalizedVendorLangCountryLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <title>Generalized_T</title>\n" + + " </information>\n" + + " <information locale='fr'>\n" + + " <title>English_CA_T</title>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + MockJNLPFile file = new MockJNLPFile(LANG_COUNTRY_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = new ArrayList<InformationDesc>(); + infoDescs.addAll(parser.getInfo(root)); + + Assert.assertTrue("Exactly two info descs should be found",infoDescs.size() == 2); + + file.setInfo(infoDescs); + parser.checkForInformation(); + } + + @Test(expected = MissingTitleException.class) + public void testEmptyLocalizedTitleLangCountryLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information locale='" + LANG + "_" + COUNTRY + "'>\n" + + " <title></title>\n" + + " <vendor>English_CA_utf8_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + + MockJNLPFile file = new MockJNLPFile(LANG_COUNTRY_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = new ArrayList<InformationDesc>(); + infoDescs.addAll(parser.getInfo(root)); + + Assert.assertTrue("Exactly one info desc should be found", infoDescs.size() == 1); + + file.setInfo(infoDescs); + parser.checkForInformation(); + } + + @Test(expected = MissingVendorException.class) + public void testEmptyLocalizedVendorLangCountryLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information locale='" + LANG + "_" + COUNTRY + "'>\n" + + " <title>English_CA_utf8_T</title>\n" + + " <vendor></vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + + MockJNLPFile file = new MockJNLPFile(LANG_COUNTRY_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = new ArrayList<InformationDesc>(); + infoDescs.addAll(parser.getInfo(root)); + + Assert.assertTrue("Exactly one info desc should be found", infoDescs.size() == 1); + + file.setInfo(infoDescs); + parser.checkForInformation(); + } + + @Test + public void testFallbackEmptyLocalizedTitleVendorLangCountryLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <title>Generalized_T</title>\n" + + " <vendor>Generalized_V</vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "'>\n" + + " <title>English_T</title>\n" + + " <vendor></vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "_" + COUNTRY + "'>\n" + + " <title></title>\n" + + " <vendor></vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "_" + COUNTRY + "." + VARIANT + "'>\n" + + " <title></title>\n" + + " <vendor></vendor>\n" + + " </information>\n" + + " <information locale='fr_" + COUNTRY + "." + VARIANT + "'>\n" + + " <title>French_CA_utf8_T</title>\n" + + " <vendor>French_CA_utf8_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + + MockJNLPFile file = new MockJNLPFile(LANG_COUNTRY_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = parser.getInfo(root); + + Assert.assertTrue("Exactly five info descs should be found", infoDescs.size() == 5); + + file.setInfo(infoDescs); + + Assert.assertEquals("Title should be `English_T' but wasn't", + "English_T", file.getTitle()); + Assert.assertEquals("Vendor should be `Generalized_V' but wasn't", + "Generalized_V", file.getVendor()); + + parser.checkForInformation(); + } + + @Test(expected = MissingInformationException.class) + public void testMissingInfoLangLocale() throws ParseException { + String data = "<jnlp></jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + + MockJNLPFile file = new MockJNLPFile(LANG_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + parser.getInfo(root); + } + + @Test(expected = MissingTitleException.class) + public void testEmptyLocalizedInfoLangLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information locale='" + LANG + "'>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + + MockJNLPFile file = new MockJNLPFile(LANG_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = new ArrayList<InformationDesc>(); + infoDescs.addAll(parser.getInfo(root)); + + Assert.assertTrue("Exactly one info desc should be found", infoDescs.size() == 1); + + file.setInfo(infoDescs); + parser.checkForInformation(); + } + + @Test(expected = MissingTitleException.class) + public void testOneFullyLocalizedInfoLangLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information locale='" + LANG + "_" + COUNTRY + "." + VARIANT + "'>\n" + + " <title>English_CA_utf8_T</title>\n" + + " <vendor>English_CA_utf8_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + + MockJNLPFile file = new MockJNLPFile(LANG_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = parser.getInfo(root); + + Assert.assertTrue("Exactly one info desc should be found", infoDescs.size() == 1); + + file.setInfo(infoDescs); + parser.checkForInformation(); + } + + @Test(expected = MissingTitleException.class) + public void testOneLangCountryLocalizedInfoLangLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information locale='" + LANG + "_" + COUNTRY + "'>\n" + + " <title>English_CA_T</title>\n" + + " <vendor>English_CA_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + MockJNLPFile file = new MockJNLPFile(LANG_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = parser.getInfo(root); + Assert.assertTrue("Exactly one info desc should be found", infoDescs.size() == 1); + + file.setInfo(infoDescs); + parser.checkForInformation(); + } + + @Test + public void testOneLangLocalizedInfoLangLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <title>Generalized_T</title>\n" + + " <vendor>Generalized_V</vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "'>\n" + + " <title>English_T</title>\n" + + " <vendor>English_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + MockJNLPFile file = new MockJNLPFile(LANG_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = parser.getInfo(root); + Assert.assertTrue("Exactly two info descs should be found", infoDescs.size() == 2); + + file.setInfo(infoDescs); + Assert.assertEquals("Title should be `English_T' but wasn't", + "English_T", file.getTitle()); + Assert.assertEquals("Vendor should be `English_V' but wasn't", + "English_V", file.getVendor()); + } + + @Test + public void testGeneralizedInfoLangLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <title>Generalized_T</title>\n" + + " <vendor>Generalized_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + MockJNLPFile file = new MockJNLPFile(LANG_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = parser.getInfo(root); + Assert.assertTrue("Exactly one info desc should be found", infoDescs.size() == 1); + + file.setInfo(infoDescs); + Assert.assertEquals("Title should be `Generalized_T' but wasn't", + "Generalized_T", file.getTitle()); + Assert.assertEquals("Vendor should be `Generalized_V' but wasn't", + "Generalized_V", file.getVendor()); + } + + @Test + public void testTwoDifferentLocalizedInfoLangLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <title>Generalized_T</title>\n" + + " <vendor>Generalized_V</vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "'>\n" + + " <title>English_T</title>\n" + + " <vendor>English_V</vendor>\n" + + " </information>\n" + + " <information locale='fr'>\n" + + " <title>French_T</title>\n" + + " <vendor>French_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + MockJNLPFile file = new MockJNLPFile(LANG_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = parser.getInfo(root); + Assert.assertTrue("Exactly three info descs should be found", infoDescs.size() == 3); + + file.setInfo(infoDescs); + Assert.assertEquals("Title should be `English_T' but wasn't", + "English_T", file.getTitle()); + Assert.assertEquals("Vendor should be `English_V' but wasn't", + "English_V", file.getVendor()); + } + + @Test + public void testTwoLocalizedWithSameLangInfoLangLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <title>Generalized_T</title>\n" + + " <vendor>Generalized_V</vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "'>\n" + + " <title>English_T</title>\n" + + " <vendor>English_V</vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "_" + COUNTRY + "'>\n" + + " <title>English_CA_T</title>\n" + + " <vendor>English_CA_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + MockJNLPFile file = new MockJNLPFile(LANG_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = parser.getInfo(root); + Assert.assertTrue("Exactly three info descs should be found", infoDescs.size() == 3); + + file.setInfo(infoDescs); + Assert.assertEquals("Title should be `English_T' but wasn't", + "English_T", file.getTitle()); + Assert.assertEquals("Vendor should be `English_V' but wasn't", + "English_V", file.getVendor()); + } + + @Test + public void testTwoSameLangOneMissingTitleLangLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <title>Generalized_T</title>\n" + + " <vendor>Generalized_V</vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "'>\n" + + " <title>English_T</title>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + MockJNLPFile file = new MockJNLPFile(LANG_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = parser.getInfo(root); + Assert.assertTrue("Exactly two info descs should be found", infoDescs.size() == 2); + + file.setInfo(infoDescs); + Assert.assertEquals("Title should be `English_T' but wasn't", + "English_T", file.getTitle()); + Assert.assertEquals("Vendor should be `Generalized_V' but wasn't", + "Generalized_V", file.getVendor()); + } + + @Test(expected = MissingTitleException.class) + public void testMissingTitleLangLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <vendor>Generalized_V</vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "'>\n" + + " <vendor>English_V</vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "_" + COUNTRY + "'>\n" + + " <vendor>English_CA_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + MockJNLPFile file = new MockJNLPFile(LANG_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = new ArrayList<InformationDesc>(); + infoDescs.addAll(parser.getInfo(root)); + + Assert.assertTrue("Exactly three info descs should be found", infoDescs.size() == 3); + + file.setInfo(infoDescs); + parser.checkForInformation(); + } + + @Test(expected = MissingVendorException.class) + public void testMissingVendorLangLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <title>Generalized_T</title>\n" + + " </information>\n" + + " <information locale='" + LANG + "'>\n" + + " <title>English_T</title>\n" + + " </information>\n" + + " <information locale='" + LANG + "_" + COUNTRY + "'>\n" + + " <title>English_CA_T</title>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + MockJNLPFile file = new MockJNLPFile(LANG_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = new ArrayList<InformationDesc>(); + infoDescs.addAll(parser.getInfo(root)); + + Assert.assertTrue("Exactly three info descs should be found", infoDescs.size() == 3); + + file.setInfo(infoDescs); + parser.checkForInformation(); + } + + @Test(expected = MissingTitleException.class) + public void testMissingLocalizedTitleLangLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <vendor>Generalized_V</vendor>\n" + + " </information>\n" + + " <information locale='fr'>\n" + + " <vendor>English_CA_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + MockJNLPFile file = new MockJNLPFile(LANG_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = new ArrayList<InformationDesc>(); + infoDescs.addAll(parser.getInfo(root)); + + Assert.assertTrue("Exactly two info descs should be found", infoDescs.size() == 2); + + file.setInfo(infoDescs); + parser.checkForInformation(); + } + + @Test(expected = MissingVendorException.class) + public void testMissingLocalizedVendorLangLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <title>Generalized_T</title>\n" + + " </information>\n" + + " <information locale='fr'>\n" + + " <title>English_CA_T</title>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + MockJNLPFile file = new MockJNLPFile(LANG_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = new ArrayList<InformationDesc>(); + infoDescs.addAll(parser.getInfo(root)); + + Assert.assertTrue("Exactly two info descs should be found",infoDescs.size() == 2); + + file.setInfo(infoDescs); + parser.checkForInformation(); + } + + @Test(expected = MissingTitleException.class) + public void testEmptyLocalizedTitleLangLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information locale='" + LANG + "'>\n" + + " <title></title>\n" + + " <vendor>English_CA_utf8_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + + MockJNLPFile file = new MockJNLPFile(LANG_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = new ArrayList<InformationDesc>(); + infoDescs.addAll(parser.getInfo(root)); + + Assert.assertTrue("Exactly one info desc should be found", infoDescs.size() == 1); + + file.setInfo(infoDescs); + parser.checkForInformation(); + } + + @Test(expected = MissingVendorException.class) + public void testEmptyLocalizedVendorLangLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information locale='" + LANG + "'>\n" + + " <title>English_CA_utf8_T</title>\n" + + " <vendor></vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + + MockJNLPFile file = new MockJNLPFile(LANG_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = new ArrayList<InformationDesc>(); + infoDescs.addAll(parser.getInfo(root)); + + Assert.assertTrue("Exactly one info desc should be found", infoDescs.size() == 1); + + file.setInfo(infoDescs); + parser.checkForInformation(); + } + + @Test + public void testFallbackEmptyLocalizedTitleVendorLangLocale() throws ParseException { + String data = "<jnlp>\n" + + " <information>\n" + + " <title>Generalized_T</title>\n" + + " <vendor>Generalized_V</vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "'>\n" + + " <title>English_T</title>\n" + + " <vendor></vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "_" + COUNTRY + "'>\n" + + " <title></title>\n" + + " <vendor></vendor>\n" + + " </information>\n" + + " <information locale='" + LANG + "_" + COUNTRY + "." + VARIANT + "'>\n" + + " <title></title>\n" + + " <vendor></vendor>\n" + + " </information>\n" + + " <information locale='fr_" + COUNTRY + "." + VARIANT + "'>\n" + + " <title>French_CA_utf8_T</title>\n" + + " <vendor>French_CA_utf8_V</vendor>\n" + + " </information>\n" + + "</jnlp>\n"; + + Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes())); + Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName()); + + MockJNLPFile file = new MockJNLPFile(LANG_LOCALE); + Parser parser = new Parser(file, null, root, false, false); + List<InformationDesc> infoDescs = parser.getInfo(root); + + Assert.assertTrue("Exactly five info descs should be found", infoDescs.size() == 5); + + file.setInfo(infoDescs); + + Assert.assertEquals("Title should be `English_T' but wasn't", + "English_T", file.getTitle()); + Assert.assertEquals("Vendor should be `Generalized_V' but wasn't", + "Generalized_V", file.getVendor()); + + parser.checkForInformation(); + } +} |