From 8965b6e8eea9443b2e8e02ac2fe882a709c892ad Mon Sep 17 00:00:00 2001 From: Tor Norbye Date: Wed, 4 Feb 2015 13:42:55 -0800 Subject: Update Eclipse plugin to handle new LocaleQualifier API Change-Id: I1d5eaec7e6f61a21b07cf790166d9b6ea8f041db --- .../com.android.ide.eclipse.tests/.classpath | 2 +- .../layout/configuration/ConfigurationTest.java | 23 ++- .../layout/configuration/FlagManagerTest.java | 163 +++++++++++---------- .../editors/layout/configuration/LocaleTest.java | 97 ++++++++---- 4 files changed, 169 insertions(+), 116 deletions(-) (limited to 'eclipse/plugins/com.android.ide.eclipse.tests') diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/.classpath b/eclipse/plugins/com.android.ide.eclipse.tests/.classpath index af8e888..f760174 100644 --- a/eclipse/plugins/com.android.ide.eclipse.tests/.classpath +++ b/eclipse/plugins/com.android.ide.eclipse.tests/.classpath @@ -17,7 +17,7 @@ - + diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/layout/configuration/ConfigurationTest.java b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/layout/configuration/ConfigurationTest.java index a9e39fb..5b07d7b 100644 --- a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/layout/configuration/ConfigurationTest.java +++ b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/layout/configuration/ConfigurationTest.java @@ -15,11 +15,10 @@ */ package com.android.ide.eclipse.adt.internal.editors.layout.configuration; -import static com.android.ide.common.resources.configuration.LanguageQualifier.FAKE_LANG_VALUE; -import static com.android.ide.common.resources.configuration.RegionQualifier.FAKE_REGION_VALUE; +import static com.android.ide.common.resources.configuration.LocaleQualifier.FAKE_VALUE; import com.android.ide.common.resources.configuration.FolderConfiguration; -import com.android.ide.common.resources.configuration.LanguageQualifier; +import com.android.ide.common.resources.configuration.LocaleQualifier; import com.android.resources.Density; import com.android.sdklib.devices.Device; import com.android.sdklib.devices.DeviceManager; @@ -62,18 +61,18 @@ public class ConfigurationTest extends TestCase { // Check syncing FolderConfiguration folderConfig = configuration.getFullConfig(); - assertEquals(FAKE_LANG_VALUE, folderConfig.getLanguageQualifier().getValue()); - assertEquals(FAKE_REGION_VALUE, folderConfig.getRegionQualifier().getValue()); + assertEquals(FAKE_VALUE, folderConfig.getLocaleQualifier().getLanguage()); + assertEquals(FAKE_VALUE, folderConfig.getLocaleQualifier().getRegion()); assertEquals(Locale.ANY, configuration.getLocale()); - Locale language = Locale.create(new LanguageQualifier("nb")); + Locale language = Locale.create(new LocaleQualifier("nb")); configuration.setLocale(language, true /* skipSync */); - assertEquals(FAKE_LANG_VALUE, folderConfig.getLanguageQualifier().getValue()); - assertEquals(FAKE_REGION_VALUE, folderConfig.getRegionQualifier().getValue()); + assertEquals(FAKE_VALUE, folderConfig.getLocaleQualifier().getLanguage()); + assertEquals(FAKE_VALUE, folderConfig.getLocaleQualifier().getRegion()); configuration.setLocale(language, false /* skipSync */); - assertEquals(FAKE_REGION_VALUE, folderConfig.getRegionQualifier().getValue()); - assertEquals("nb", folderConfig.getLanguageQualifier().getValue()); + assertEquals(FAKE_VALUE, folderConfig.getLocaleQualifier().getRegion()); + assertEquals("nb", folderConfig.getLocaleQualifier().getLanguage()); assertEquals("2.7in QVGA::nb-__:+Theme::notnight::", configuration.toPersistentString()); @@ -121,7 +120,7 @@ public class ConfigurationTest extends TestCase { configuration.setDevice(devices.get(0), false); configuration.setActivity("foo.bar.FooActivity"); configuration.setTheme("@android:style/Theme.Holo.Light"); - Locale locale = Locale.create(new LanguageQualifier("nb")); + Locale locale = Locale.create(new LocaleQualifier("nb")); configuration.setLocale(locale, false /* skipSync */); Configuration copy = Configuration.copy(configuration); @@ -135,7 +134,7 @@ public class ConfigurationTest extends TestCase { configuration.setTheme("@android:style/Theme.Holo"); configuration.setDevice(devices.get(1), true); - assertTrue(copy.getFullConfig().getLanguageQualifier().equals(locale.language)); + assertTrue(copy.getFullConfig().getLocaleQualifier().equals(locale.qualifier)); assertEquals(locale, copy.getLocale()); assertEquals("foo.bar.FooActivity", copy.getActivity()); assertEquals("@android:style/Theme.Holo.Light", copy.getTheme()); diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/layout/configuration/FlagManagerTest.java b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/layout/configuration/FlagManagerTest.java index c22609f..4286aaa 100644 --- a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/layout/configuration/FlagManagerTest.java +++ b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/layout/configuration/FlagManagerTest.java @@ -16,7 +16,12 @@ package com.android.ide.eclipse.adt.internal.editors.layout.configuration; +import com.android.SdkConstants; import com.android.ide.common.resources.LocaleManager; +import com.google.common.base.Function; +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.Multimap; +import com.google.common.collect.Sets; import org.eclipse.swt.graphics.Image; @@ -72,103 +77,109 @@ public class FlagManagerTest extends TestCase { assertSame(ca, manager.getFlagForFolderName("values-en")); } - public void testAvailableIcons() { - // Icons we have in WindowBuilder + public void testAvailableImages() { + // Images we have from WindowBuilder (which are really the famfamfam + // icons; + // see http://www.famfamfam.com/lab/icons/flags) String[] icons = new String[] { "ad", "ae", "af", "ag", "ai", "al", "am", "ao", "ar", "as", "at", "au", "aw", "ax", "az", "ba", "bb", "bd", "be", "bf", "bg", "bh", "bi", "bj", "bm", "bn", "bo", "br", - "bs", "bt", "bv", "bw", "by", "bz", "ca", "cc", "cd", "cf", "cg", "ch", "ci", "ck", - "cl", "cm", "cn", "co", "cr", "cu", "cv", "cx", "cy", "cz", "de", "dj", "dk", "dm", - "do", "dz", "ec", "ee", "eg", "eh", "er", "es", "et", "fi", "fj", "fk", "fm", "fo", - "fr", "ga", "gb", "gd", "ge", "gf", "gh", "gi", "gl", "gm", "gn", "gp", "gq", "gr", - "gs", "gt", "gu", "gw", "gy", "hk", "hm", "hn", "hr", "ht", "hu", "id", "ie", "il", - "in", "io", "iq", "ir", "is", "it", "jm", "jo", "jp", "ke", "kg", "kh", "ki", "km", - "kn", "kp", "kr", "kw", "ky", "kz", "la", "lb", "lc", "li", "lk", "lr", "ls", "lt", - "lu", "lv", "ly", "ma", "mc", "md", "me", "mg", "mh", "mk", "ml", "mm", "mn", "mo", - "mp", "mq", "mr", "ms", "mt", "mu", "mv", "mw", "mx", "my", "mz", "na", "nc", "ne", - "nf", "ng", "ni", "nl", "no", "np", "nr", "nu", "nz", "om", "pa", "pe", "pf", "pg", - "ph", "pk", "pl", "pm", "pn", "pr", "ps", "pt", "pw", "py", "qa", "re", "ro", "rs", - "ru", "rw", "sa", "sb", "sc", "sd", "se", "sg", "sh", "si", "sj", "sk", "sl", "sm", - "sn", "so", "sr", "st", "sv", "sy", "sz", "tc", "td", "tf", "tg", "th", "tj", "tk", - "tl", "tm", "tn", "to", "tr", "tt", "tv", "tw", "tz", "ua", "ug", "um", "us", "uy", - "uz", "va", "vc", "ve", "vg", "vi", "vn", "vu", "wf", "ws", "ye", "yt", "za", "zm", - "zw", + "bs", "bt", "bv", "bw", "by", "bz", "ca", "catalonia", "cc", "cd", "cf", "cg", + "ch", "ci", "ck", "cl", "cm", "cn", "co", "cr", "cu", "cv", "cx", "cy", "cz", "de", + "dj", "dk", "dm", "do", "dz", "ec", "ee", "eg", "eh", "england", "er", "es", "et", + "fi", "fj", "fk", "fm", "fo", "fr", "ga", "gb", "gd", "ge", "gf", "gg", "gh", "gi", + "gl", "gm", "gn", "gp", "gq", "gr", "gs", "gt", "gu", "gw", "gy", "hk", "hm", "hn", + "hr", "ht", "hu", "id", "ie", "il", "im", "in", "io", "iq", "ir", "is", "it", "jm", + "jo", "jp", "ke", "kg", "kh", "ki", "km", "kn", "kp", "kr", "kw", "ky", "kz", "la", + "lb", "lc", "li", "lk", "lr", "ls", "lt", "lu", "lv", "ly", "ma", "mc", "md", "me", + "mg", "mh", "mk", "ml", "mm", "mn", "mo", "mp", "mq", "mr", "ms", "mt", "mu", "mv", + "mw", "mx", "my", "mz", "na", "nc", "ne", "nf", "ng", "ni", "nl", "no", "np", "nr", + "nu", "nz", "om", "pa", "pe", "pf", "pg", "ph", "pk", "pl", "pm", "pn", "pr", "ps", + "pt", "pw", "py", "qa", "re", "ro", "rs", "ru", "rw", "sa", "sb", "sc", "scotland", + "sd", "se", "sg", "sh", "si", "sj", "sk", "sl", "sm", "sn", "so", "sr", "ss", "st", + "sv", "sy", "sz", "tc", "td", "tf", "tg", "th", "tj", "tk", "tl", "tm", "tn", "to", + "tr", "tt", "tv", "tw", "tz", "ua", "ug", "um", "us", "uy", "uz", "va", "vc", "ve", + "vg", "vi", "vn", "vu", "wales", "wf", "ws", "ye", "yt", "za", "zm", "zw" }; - Set sIcons = new HashSet(100); - Map regionNames = LocaleManager.getRegionNamesMap(); - Map languageToCountry = LocaleManager.getLanguageToCountryMap(); - Map languageNames = LocaleManager.getLanguageNamesMap(); - List unused = new ArrayList(); + + Set sImages = new HashSet(100); for (String code : icons) { + if (code.length() > 2) { + continue; + } code = code.toUpperCase(Locale.US); - sIcons.add(code); + sImages.add(code); - String country = regionNames.get(code); - if (country == null) { + if (!LocaleManager.isValidRegionCode(code)) { System.out.println("No region name found for region code " + code); } + } - if (!languageToCountry.values().contains(code)) { - unused.add(code.toLowerCase() + ".png"); + Set unused = Sets.newHashSet(LocaleManager.getRegionCodes(false)); + Set reachable = Sets.newHashSet(); + Multimap regionToLanguages = ArrayListMultimap.create(); + for (String language : LocaleManager.getLanguageCodes(false)) { + for (String region : LocaleManager.getRelevantRegions(language)) { + reachable.add(region); + regionToLanguages.put(region, language); } } - if (!unused.isEmpty()) { - System.out.println("The following icons are not referenced by any of the " + - "language to country bindings: " + unused); + unused.removeAll(reachable); + + for (String region : reachable) { + if (!sImages.contains(region)) { + StringBuilder sb = new StringBuilder(); + + sb.append("No icon found for region ").append(region).append(" ") + .append(LocaleManager.getRegionName(region)); + sb.append(", used for languages "); + + for (String language : regionToLanguages.get(region)) { + sb.append(language).append("(").append(LocaleManager.getLanguageName(language)) + .append(") "); + } + System.out.println(sb.toString()); + } } - // Make sure all our language bindings are languages we have maps for - for (Map.Entry entry : languageToCountry.entrySet()) { - String language = entry.getKey(); - String region = entry.getValue(); + // Known regions that we don't have language to region mappings for + unused.remove("AQ"); + unused.remove("VA"); + unused.remove("GS"); + unused.remove("TF"); + unused.remove("BV"); + unused.remove("HM"); - if (!sIcons.contains(region)) { - System.out.println("No icon found for region " + region + " " - + LocaleManager.getRegionName(region) + " (used for language " - + language + "(" + languageNames.get(language) + "))"); + if (!unused.isEmpty()) { + StringBuilder sb = new StringBuilder(); + sb.append("The following icons are not referenced by any of the " + + "language to country bindings:"); + for (String code : unused) { + sb.append(code.toLowerCase(Locale.US)).append(SdkConstants.DOT_PNG).append(" ("); + sb.append(LocaleManager.getRegionName(code)).append(") "); } + System.out.println(sb.toString()); } } - /* Utility useful for identifying strings which must be using \\u in the string names - * to ensure that they are handled properly during the build (outside of Eclipse, - * where this source file is marked as using UTF-8. - public void testPrintable() { - Set languageCodes = LocaleManager.getLanguageCodes(); - for (String code : languageCodes) { - String name = LocaleManager.getLanguageName(code); - assertNotNull(name); - checkEncoding(name); - } + public void testMissingFlag() { + Image icon = FlagManager.get().getFlag("AQ"); + assertNotNull(icon); + assertSame(FlagManager.get().getEmptyIcon(), icon); - Set regionCodes = LocaleManager.getRegionCodes(); - for (String code : regionCodes) { - String name = LocaleManager.getRegionName(code); - assertNotNull(name); - checkEncoding(name); - } + icon = FlagManager.get().getFlag("AQ"); + assertNotNull(icon); + assertSame(FlagManager.get().getEmptyIcon(), icon); + + icon = FlagManager.get().getFlag("WO"); // Not used in ISO 3166-1 + assertNotNull(icon); + assertSame(FlagManager.get().getEmptyIcon(), icon); } - private static void checkEncoding(String s) { - for (int i = 0, n = s.length(); i < n; i++) { - char c = s.charAt(i); - if (c >= 128) { - System.out.println("Need unicode encoding for '" + s + "'"); - StringBuilder sb = new StringBuilder(); - for (int j = 0, m = s.length(); j < m; j++) { - char d = s.charAt(j); - if (d < 128) { - sb.append(d); - } else { - sb.append('\\'); - sb.append('u'); - sb.append(String.format("%04x", (int)d)); - } - } - System.out.println(" Replacement=" + sb); - return; - } - } + public void testKnownFlag() { + Image icon = FlagManager.get().getFlag("US"); + assertNotNull(icon); + assertNotSame(FlagManager.get().getEmptyIcon(), icon); } - */ } + diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/layout/configuration/LocaleTest.java b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/layout/configuration/LocaleTest.java index 3dcf33a..904ade3 100644 --- a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/layout/configuration/LocaleTest.java +++ b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/layout/configuration/LocaleTest.java @@ -13,44 +13,87 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package com.android.ide.eclipse.adt.internal.editors.layout.configuration; -import com.android.ide.common.resources.configuration.LanguageQualifier; -import com.android.ide.common.resources.configuration.RegionQualifier; +import com.android.ide.common.resources.configuration.FolderConfiguration; +import com.android.ide.common.resources.configuration.LocaleQualifier; import junit.framework.TestCase; @SuppressWarnings("javadoc") public class LocaleTest extends TestCase { + public void test1() { + Locale locale = Locale.create("en-rUS"); + assertEquals("en", locale.qualifier.getLanguage()); + assertEquals("US", locale.qualifier.getRegion()); + assertTrue(locale.hasLanguage()); + assertTrue(locale.hasRegion()); + } + + public void test2() { + Locale locale = Locale.create("zh"); + assertEquals("zh", locale.qualifier.getLanguage()); + assertNull(locale.qualifier.getRegion()); + assertTrue(locale.hasLanguage()); + assertFalse(locale.hasRegion()); + } + + public void testEquals() { + Locale locale = Locale.create("zh"); + assertEquals("zh", locale.qualifier.getLanguage()); + assertNull(locale.qualifier.getRegion()); + assertTrue(locale.hasLanguage()); + assertFalse(locale.hasRegion()); + } + public void test() { - LanguageQualifier language1 = new LanguageQualifier("nb"); - LanguageQualifier language2 = new LanguageQualifier("no"); - RegionQualifier region1 = new RegionQualifier("NO"); - RegionQualifier region2 = new RegionQualifier("SE"); + LocaleQualifier qualifier1 = LocaleQualifier.getQualifier("nb"); + LocaleQualifier qualifier2 = LocaleQualifier.getQualifier("no"); + LocaleQualifier qualifier3 = LocaleQualifier.getQualifier("nb-rNO"); + LocaleQualifier qualifier4 = LocaleQualifier.getQualifier("nb-rSE"); + LocaleQualifier qualifier5 = LocaleQualifier.getQualifier("no-rSE"); + assertNotNull(qualifier1); + assertNotNull(qualifier2); + assertNotNull(qualifier3); + assertNotNull(qualifier4); + assertNotNull(qualifier5); assertEquals(Locale.ANY, Locale.ANY); assertFalse(Locale.ANY.hasLanguage()); assertFalse(Locale.ANY.hasRegion()); - assertFalse(Locale.create(new LanguageQualifier(LanguageQualifier.FAKE_LANG_VALUE), - new RegionQualifier(RegionQualifier.FAKE_REGION_VALUE)).hasLanguage()); - assertFalse(Locale.create(new LanguageQualifier(LanguageQualifier.FAKE_LANG_VALUE), - new RegionQualifier(RegionQualifier.FAKE_REGION_VALUE)).hasRegion()); - - assertEquals(Locale.create(language1), Locale.create(language1)); - assertTrue(Locale.create(language1).hasLanguage()); - assertFalse(Locale.create(language1).hasRegion()); - assertTrue(Locale.create(language1, region1).hasLanguage()); - assertTrue(Locale.create(language1, region1).hasRegion()); - - assertEquals(Locale.create(language1, region1), Locale.create(language1, region1)); - assertEquals(Locale.create(language1), Locale.create(language1)); - assertTrue(Locale.create(language1).equals(Locale.create(language1))); - assertTrue(Locale.create(language1, region1).equals(Locale.create(language1, region1))); - assertFalse(Locale.create(language1, region1).equals(Locale.create(language1, region2))); - assertFalse(Locale.create(language1).equals(Locale.create(language1, region1))); - assertFalse(Locale.create(language1).equals(Locale.create(language2))); - assertFalse(Locale.create(language1, region1).equals(Locale.create(language2, region1))); - assertEquals("Locale{nb, __}", Locale.create(language1).toString()); - assertEquals("Locale{nb, NO}", Locale.create(language1, region1).toString()); + // noinspection ConstantConditions + assertFalse(Locale.create(new LocaleQualifier(LocaleQualifier.FAKE_VALUE)).hasLanguage()); + // noinspection ConstantConditions + assertFalse(Locale.create(new LocaleQualifier(LocaleQualifier.FAKE_VALUE)).hasRegion()); + + assertEquals(Locale.create(qualifier1), Locale.create(qualifier1)); + assertTrue(Locale.create(qualifier1).hasLanguage()); + assertFalse(Locale.create(qualifier1).hasRegion()); + assertTrue(Locale.create(qualifier3).hasLanguage()); + assertTrue(Locale.create(qualifier3).hasRegion()); + + assertEquals(Locale.create(qualifier3), Locale.create(qualifier3)); + assertEquals(Locale.create(qualifier1), Locale.create(qualifier1)); + assertTrue(Locale.create(qualifier1).equals(Locale.create(qualifier1))); + assertTrue(Locale.create(qualifier3).equals(Locale.create(qualifier3))); + assertFalse(Locale.create(qualifier3).equals(Locale.create(qualifier4))); + assertFalse(Locale.create(qualifier1).equals(Locale.create(qualifier3))); + assertFalse(Locale.create(qualifier1).equals(Locale.create(qualifier2))); + assertFalse(Locale.create(qualifier3).equals(Locale.create(qualifier5))); + assertEquals("nb", Locale.create(qualifier1).toString()); + assertEquals("nb-NO", Locale.create(qualifier3).toString()); + + assertEquals(Locale.create(qualifier1), Locale.create("b+nb")); + assertEquals(Locale.create(qualifier3), Locale.create("b+nb+NO")); + } + + public void testFolderConfig() { + FolderConfiguration config = new FolderConfiguration(); + assertEquals(Locale.ANY, Locale.create(config)); + config.setLocaleQualifier(LocaleQualifier.getQualifier("en")); + assertEquals(Locale.create("en"), Locale.create(config)); + config.setLocaleQualifier(LocaleQualifier.getQualifier("en-rUS")); + assertEquals(Locale.create("en-rUS"), Locale.create(config)); } } -- cgit v1.1