| /* |
| * Copyright 2007 Google Inc. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| * use this file except in compliance with the License. You may obtain a copy of |
| * the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| * License for the specific language governing permissions and limitations under |
| * the License. |
| */ |
| package com.google.gwt.i18n.client; |
| |
| import com.google.gwt.core.client.GWT; |
| import com.google.gwt.i18n.client.TestAnnotatedMessages.Nested; |
| import com.google.gwt.i18n.client.gen.Colors; |
| import com.google.gwt.i18n.client.gen.Shapes; |
| import com.google.gwt.i18n.client.gen.TestMessages; |
| import com.google.gwt.i18n.client.resolutiontest.Inners; |
| import com.google.gwt.i18n.client.resolutiontest.Inners.ExtendsInnerInner; |
| import com.google.gwt.i18n.client.resolutiontest.Inners.HasInner; |
| import com.google.gwt.i18n.client.resolutiontest.Inners.HasInner.IsInner; |
| import com.google.gwt.i18n.client.resolutiontest.Inners.InnerClass; |
| import com.google.gwt.i18n.client.resolutiontest.Inners.InnerClass.InnerInner; |
| import com.google.gwt.i18n.client.resolutiontest.Inners.InnerClass.InnerInnerMessages; |
| import com.google.gwt.i18n.client.resolutiontest.Inners.InnerClass.LocalizableInnerInner; |
| import com.google.gwt.i18n.client.resolutiontest.Inners.LocalizableSimpleInner; |
| import com.google.gwt.i18n.client.resolutiontest.Inners.OuterLoc; |
| import com.google.gwt.i18n.client.resolutiontest.Inners.SimpleInner; |
| import com.google.gwt.junit.client.GWTTestCase; |
| import com.google.gwt.safehtml.shared.SimpleHtmlSanitizer; |
| |
| import java.math.BigDecimal; |
| import java.math.BigInteger; |
| import java.util.ArrayList; |
| import java.util.Collection; |
| import java.util.Date; |
| import java.util.HashMap; |
| import java.util.Iterator; |
| import java.util.Map; |
| import java.util.MissingResourceException; |
| import java.util.Set; |
| |
| /** |
| * Tests Internationalization. Assumes locale is set to piglatin_UK |
| */ |
| public class I18NTest extends GWTTestCase { |
| |
| /** |
| * A test object to verify that when formatting a message with an arbitrary |
| * object passed as an argument, that object's toString method is called. |
| */ |
| public static class TestObjectToString { |
| @Override |
| public String toString() { |
| return "TestObjectToString"; |
| } |
| } |
| |
| private static final String HTML_TO_SANITIZE = |
| "<em>this</em> gets escaped: <script>evil</script>"; |
| private static final String SANITIZED_HTML = |
| "<em>this</em> gets escaped: <script>evil</script>"; |
| private static final String STRING_WITH_B_TAG = "<b>text</b>"; |
| private static final String STRING_WITH_B_TAG_ESCAPED = "<b>text</b>"; |
| |
| @Override |
| public String getModuleName() { |
| return "com.google.gwt.i18n.I18NTest"; |
| } |
| |
| @SuppressWarnings("unchecked") // intentional test of raw map |
| public void testAnnotatedConstants() { |
| TestAnnotatedConstants c = GWT.create(TestAnnotatedConstants.class); |
| assertEquals(14, c.fourteen()); |
| assertFalse(c.isFalse()); |
| assertTrue(c.isTrue()); |
| assertArrayEquals(new String[] {"String array with one string"}, |
| c.singleString()); |
| assertArrayEquals(new String[] {"One", "Two", "Three,Comma"}, |
| c.threeStrings()); |
| assertEquals("Properties value #s need quoting!", c.propertiesQuoting()); |
| Map<String, String> stringMap = c.stringMap(); |
| assertTrue(stringMap.containsKey("key1")); |
| assertTrue(stringMap.containsKey("key2")); |
| assertEquals("value1", stringMap.get("key1")); |
| assertEquals("value2", stringMap.get("key2")); |
| assertEquals(2, stringMap.size()); |
| stringMap = c.rawMap(); |
| assertTrue(stringMap.containsKey("key1")); |
| assertTrue(stringMap.containsKey("key2")); |
| assertEquals("value1", stringMap.get("key1")); |
| assertEquals("value2", stringMap.get("key2")); |
| assertEquals(2, stringMap.size()); |
| assertEquals("Test me", c.testMe()); |
| assertEquals(13.7f, c.thirteenPointSeven()); |
| assertEquals(3.14, c.threePointOneFour()); |
| assertEquals("Once more, with meaning", c.withMeaning()); |
| } |
| |
| public void testAnnotatedConstantsGenMD5() { |
| TestAnnotatedConstantsGenMD5 c = GWT.create(TestAnnotatedConstantsGenMD5.class); |
| assertEquals(14, c.fourteen()); |
| assertFalse(c.isFalse()); |
| assertTrue(c.isTrue()); |
| assertArrayEquals(new String[] {"String array with one string"}, |
| c.singleString()); |
| assertArrayEquals(new String[] {"One", "Two"}, c.twoStrings()); |
| Map<String, String> stringMap = c.stringMap(); |
| assertTrue(stringMap.containsKey("key1")); |
| assertTrue(stringMap.containsKey("key2")); |
| assertEquals("value1", stringMap.get("key1")); |
| assertEquals("value2", stringMap.get("key2")); |
| assertEquals(2, stringMap.size()); |
| assertEquals("Test me", c.testMe()); |
| assertEquals(13.7f, c.thirteenPointSeven()); |
| assertEquals(3.14, c.threePointOneFour()); |
| assertEquals("Once more, with meaning", c.withMeaning()); |
| } |
| |
| public void testAnnotatedMessages() { |
| TestAnnotatedMessages m = GWT.create(TestAnnotatedMessages.class); |
| assertEquals("Estay emay", m.basicText()); |
| assertEquals("Oncay oremay, ithway eaningmay", m.withMeaning()); |
| assertEquals("PL: One argument: one", m.oneArgument("one")); |
| assertEquals("PL: One argument (where am I?), which is optional", |
| m.optionalArgument("where am I?")); |
| assertEquals("Two arguments, second and first, inverted", |
| m.invertedArguments("first", "second")); // from default locale |
| assertEquals("PL: Don't tell me I can't {quote things in braces}", |
| m.quotedText()); |
| assertEquals("PL: This {0} would be an argument if not quoted", |
| m.quotedArg()); |
| assertEquals("PL: Total is US$11,305.01", m.currencyFormat(11305.01)); |
| assertEquals("PL: Default number format is 1,017.1", |
| m.defaultNumberFormat(1017.1)); |
| @SuppressWarnings("deprecation") |
| Date date = new Date(107, 11, 1, 12, 1, 2); |
| assertEquals("PL: It is 12:01 on 2007 December 1, Saturday", |
| m.getTimeDate(date)); |
| assertEquals("PL: 13 widgets", m.pluralWidgetsOther(13)); |
| assertEquals("Too many widgets to count (150) in pig-latin", |
| m.pluralWidgetsOther(150)); |
| assertEquals("PL: A widget", m.pluralWidgetsOther(1)); |
| |
| assertEquals("PL: A thingy", m.twoParamPlural("thingy", 1)); |
| assertEquals("PL: 42 thingies", m.twoParamPlural("thingies", 42)); |
| assertEquals("PL: Tons (249) of thingies", m.twoParamPlural("thingies", 249)); |
| } |
| |
| public void testAnnotatedMessagesAsSafeHtml() { |
| // Duplicate of non-SafeHtml tests |
| TestAnnotatedMessages m = GWT.create(TestAnnotatedMessages.class); |
| assertEquals("Estay emay", m.basicTextAsSafeHtml().asString()); |
| assertEquals("Oncay oremay, ithway eaningmay", m.withMeaningAsSafeHtml().asString()); |
| assertEquals("PL: One argument: one", m.oneArgumentAsSafeHtml("one").asString()); |
| assertEquals("PL: One argument (where am I?), which is optional", |
| m.optionalArgumentAsSafeHtml("where am I?").asString()); |
| assertEquals("Two arguments, second and first, inverted", |
| m.invertedArgumentsAsSafeHtml("first", "second").asString()); // from default locale |
| assertEquals("PL: Don't tell me I can't {quote things in braces}", |
| m.quotedTextAsSafeHtml().asString()); |
| assertEquals("PL: This {0} would be an argument if not quoted", |
| m.quotedArgAsSafeHtml().asString()); |
| assertEquals("PL: Total is US$11,305.01", |
| m.currencyFormatAsSafeHtml(11305.01).asString()); |
| assertEquals("PL: Default number format is 1,017.1", |
| m.defaultNumberFormatAsSafeHtml(1017.1).asString()); |
| @SuppressWarnings("deprecation") |
| Date date = new Date(107, 11, 1, 12, 1, 2); |
| assertEquals("PL: It is 12:01 on 2007 December 1, Saturday", |
| m.getTimeDateAsSafeHtml(date).asString()); |
| assertEquals("PL: 13 widgets", m.pluralWidgetsOtherAsSafeHtml(13).asString()); |
| assertEquals("Too many widgets to count (150) in pig-latin", |
| m.pluralWidgetsOtherAsSafeHtml(150).asString()); |
| |
| assertEquals("PL: A widget", m.pluralWidgetsOtherAsSafeHtml(1).asString()); |
| |
| assertEquals("PL: A thingy", |
| m.twoParamPluralAsSafeHtml("thingy", 1).asString()); |
| assertEquals("PL: 42 thingies", |
| m.twoParamPluralAsSafeHtml("thingies", 42).asString()); |
| assertEquals("PL: Tons (249) of thingies", |
| m.twoParamPluralAsSafeHtml("thingies", 249).asString()); |
| |
| // Additional SafeHtml-specific tests |
| assertEquals("PL: One argument: " + STRING_WITH_B_TAG_ESCAPED, |
| m.oneArgumentAsSafeHtml(STRING_WITH_B_TAG).asString()); |
| assertEquals("PL: One argument: " + SANITIZED_HTML, |
| m.oneArgumentAsSafeHtml(SimpleHtmlSanitizer.sanitizeHtml(HTML_TO_SANITIZE)).asString()); |
| assertEquals( |
| "Two arguments, " + STRING_WITH_B_TAG_ESCAPED + " and " + SANITIZED_HTML + ", inverted", |
| m.invertedArgumentsAsSafeHtml( |
| SimpleHtmlSanitizer.sanitizeHtml(HTML_TO_SANITIZE), |
| STRING_WITH_B_TAG).asString()); |
| |
| assertEquals("PL: A " + STRING_WITH_B_TAG_ESCAPED, |
| m.twoParamPluralAsSafeHtml(STRING_WITH_B_TAG, 1).asString()); |
| assertEquals("PL: 42 " + STRING_WITH_B_TAG_ESCAPED, |
| m.twoParamPluralAsSafeHtml(STRING_WITH_B_TAG, 42).asString()); |
| assertEquals("PL: Tons (249) of " + STRING_WITH_B_TAG_ESCAPED, |
| m.twoParamPluralAsSafeHtml(STRING_WITH_B_TAG, 249).asString()); |
| |
| assertEquals("PL: A " + SANITIZED_HTML, |
| m.twoParamPluralAsSafeHtml( |
| SimpleHtmlSanitizer.sanitizeHtml(HTML_TO_SANITIZE), 1).asString()); |
| assertEquals("PL: 42 " + SANITIZED_HTML, |
| m.twoParamPluralAsSafeHtml( |
| SimpleHtmlSanitizer.sanitizeHtml(HTML_TO_SANITIZE), 42).asString()); |
| assertEquals("PL: Tons (249) of " + SANITIZED_HTML, |
| m.twoParamPluralAsSafeHtml( |
| SimpleHtmlSanitizer.sanitizeHtml(HTML_TO_SANITIZE), 249).asString()); |
| } |
| |
| public void testAnnotationInheritance() { |
| TestAnnotationGrandchild m = GWT.create(TestAnnotationGrandchild.class); |
| assertEquals("foo", m.foo()); |
| assertEquals("bar_piglatin", m.bar()); |
| assertEquals("baz_piglatin", m.baz()); |
| } |
| |
| public void testAnnotationInheritanceAsSafeHtml() { |
| // Duplicate of non-SafeHtml tests |
| TestAnnotationGrandchild m = GWT.create(TestAnnotationGrandchild.class); |
| assertEquals("foo", m.fooAsSafeHtml().asString()); |
| assertEquals("bar_piglatin", m.barAsSafeHtml().asString()); |
| assertEquals("baz_piglatin", m.bazAsSafeHtml().asString()); |
| } |
| |
| public void testBindings() { |
| TestBinding b = GWT.create(TestBinding.class); |
| assertEquals("default", b.a()); |
| TestLeafBundle c = GWT.create(TestLeafBundle.class); |
| assertEquals("TestLeafBundle_piglatin_UK_WINDOWS", c.b()); |
| com.google.gwt.i18n.client.Wrapper2.TestBindingImpl d = GWT.create(com.google.gwt.i18n.client.Wrapper2.TestBindingImpl.class); |
| assertEquals("default", d.a()); |
| } |
| |
| public void testColors() { |
| Colors colors = GWT.create(Colors.class); |
| assertNotNull(colors); |
| // No piglatin version exists for grey |
| assertEquals("ĝréý", colors.grey()); |
| assertEquals("ackblay", colors.black()); |
| assertEquals("ueblay", colors.blue()); |
| } |
| |
| public void testColorsAndShapes() { |
| ColorsAndShapes s = GWT.create(ColorsAndShapes.class); |
| assertEquals("ueblay", s.blue()); |
| assertEquals("ĝréý", s.grey()); |
| } |
| |
| public void testConstantBooleans() { |
| TestConstants types = GWT.create(TestConstants.class); |
| assertEquals(false, types.booleanFalse()); |
| assertEquals(true, types.booleanTrue()); |
| } |
| |
| public void testConstantDoubles() { |
| TestConstants types = GWT.create(TestConstants.class); |
| double delta = 0.0000001; |
| assertEquals(3.14159, types.doublePi(), delta); |
| assertEquals(0.0, types.doubleZero(), delta); |
| assertEquals(1.0, types.doubleOne(), delta); |
| assertEquals(-1.0, types.doubleNegOne(), delta); |
| assertEquals(Double.MAX_VALUE, types.doublePosMax(), delta); |
| assertEquals(Double.MIN_VALUE, types.doublePosMin(), delta); |
| assertEquals(-Double.MAX_VALUE, types.doubleNegMax(), delta); |
| assertEquals(-Double.MIN_VALUE, types.doubleNegMin(), delta); |
| } |
| |
| public void testConstantFloats() { |
| TestConstants types = GWT.create(TestConstants.class); |
| double delta = 0.0000001; |
| assertEquals(3.14159f, types.floatPi(), delta); |
| assertEquals(0.0f, types.floatZero(), delta); |
| assertEquals(1.0f, types.floatOne(), delta); |
| assertEquals(-1.0f, types.floatNegOne(), delta); |
| assertEquals(Float.MAX_VALUE, types.floatPosMax(), delta); |
| assertEquals(Float.MIN_VALUE, types.floatPosMin(), delta); |
| assertEquals(-Float.MAX_VALUE, types.floatNegMax(), delta); |
| assertEquals(-Float.MIN_VALUE, types.floatNegMin(), delta); |
| } |
| |
| /** |
| * Exercises ConstantMap more than the other map tests. |
| */ |
| public void testConstantMapABCD() { |
| TestConstants types = GWT.create(TestConstants.class); |
| |
| Map<String, String> map = types.mapABCD(); |
| Map<String, String> expectedMap = getMapFromArrayUsingASimpleRule(new String[] { |
| "A", "B", "C", "D"}); |
| assertNull(map.get("bogus")); |
| compareMapsComprehensively(map, expectedMap); |
| |
| /* |
| * Test if the returned map can be modified in any way. Things are working |
| * as expected if exceptions are thrown in each case. |
| */ |
| String failureMessage = "Should have thrown UnsupportedOperationException"; |
| /* test map operations */ |
| try { |
| map.remove("keyA"); |
| fail(failureMessage + " on map.remove"); |
| } catch (UnsupportedOperationException e) { |
| } |
| try { |
| map.put("keyA", "allA"); |
| fail(failureMessage + "on map.put of existing key"); |
| } catch (UnsupportedOperationException e) { |
| } |
| try { |
| map.put("keyZ", "allZ"); |
| fail(failureMessage + "on map.put of new key"); |
| } catch (UnsupportedOperationException e) { |
| } |
| try { |
| map.clear(); |
| fail(failureMessage + " on map.clear"); |
| } catch (UnsupportedOperationException e) { |
| } |
| |
| /* test map.keySet() operations */ |
| try { |
| map.keySet().add("keyZ"); |
| fail(failureMessage + " on map.keySet().add"); |
| } catch (UnsupportedOperationException e) { |
| } |
| try { |
| map.keySet().remove("keyA"); |
| fail(failureMessage + " on map.keySet().remove"); |
| } catch (UnsupportedOperationException e) { |
| } |
| try { |
| map.keySet().clear(); |
| fail(failureMessage + " on map.keySet().clear"); |
| } catch (UnsupportedOperationException e) { |
| } |
| |
| /* test map.values() operations */ |
| try { |
| map.values().add("valueZ"); |
| fail(failureMessage + " on map.values().add"); |
| } catch (UnsupportedOperationException e) { |
| } |
| try { |
| map.values().remove("valueA"); |
| fail(failureMessage + " on map.values().clear()"); |
| } catch (UnsupportedOperationException e) { |
| } |
| try { |
| map.values().clear(); |
| fail(failureMessage + " on map.values().clear()"); |
| } catch (UnsupportedOperationException e) { |
| } |
| |
| /* test map.entrySet() operations */ |
| Map.Entry<String, String> firstEntry = map.entrySet().iterator().next(); |
| try { |
| map.entrySet().clear(); |
| fail(failureMessage + "on map.entrySet().clear"); |
| } catch (UnsupportedOperationException e) { |
| } |
| try { |
| map.entrySet().remove(firstEntry); |
| fail(failureMessage + " on map.entrySet().remove"); |
| } catch (UnsupportedOperationException e) { |
| } |
| try { |
| map.entrySet().add(firstEntry); |
| fail(failureMessage + "on map.entrySet().add"); |
| } catch (UnsupportedOperationException e) { |
| } |
| try { |
| firstEntry.setValue("allZ"); |
| fail(failureMessage + "on firstEntry.setValue"); |
| } catch (UnsupportedOperationException e) { |
| } |
| try { |
| map.clear(); |
| fail(failureMessage + " on map.clear"); |
| } catch (UnsupportedOperationException e) { |
| } |
| } |
| |
| /** |
| * Tests exercise the cache. |
| */ |
| public void testConstantMapBACD() { |
| TestConstants types = GWT.create(TestConstants.class); |
| Map<String, String> map = types.mapBACD(); |
| Map<String, String> expectedMap = getMapFromArrayUsingASimpleRule(new String[] { |
| "B", "A", "C", "D"}); |
| compareMapsComprehensively(map, expectedMap); |
| } |
| |
| /** |
| * Tests exercise the cache. |
| */ |
| public void testConstantMapBBB() { |
| TestConstants types = GWT.create(TestConstants.class); |
| Map<String, String> map = types.mapBBB(); |
| Map<String, String> expectedMap = getMapFromArrayUsingASimpleRule(new String[] {"B"}); |
| compareMapsComprehensively(map, expectedMap); |
| } |
| |
| /** |
| * Tests exercise the cache and check if Map works as the declared return |
| * type. |
| */ |
| @SuppressWarnings("unchecked") |
| public void testConstantMapDCBA() { |
| TestConstants types = GWT.create(TestConstants.class); |
| Map<String, String> map = types.mapDCBA(); |
| Map<String, String> expectedMap = getMapFromArrayUsingASimpleRule(new String[] { |
| "D", "C", "B", "A"}); |
| compareMapsComprehensively(map, expectedMap); |
| } |
| |
| /** |
| * Tests focus on correctness of entries, since ABCD exercises the map. |
| */ |
| public void testConstantMapEmpty() { |
| TestConstants types = GWT.create(TestConstants.class); |
| Map<String, String> map = types.mapEmpty(); |
| Map<String, String> expectedMap = new HashMap<String, String>(); |
| compareMapsComprehensively(map, expectedMap); |
| } |
| |
| /** |
| * Tests exercise the cache and check if Map works as the declared return |
| * type. |
| */ |
| public void testConstantMapXYZ() { |
| TestConstants types = GWT.create(TestConstants.class); |
| Map<String, String> map = types.mapXYZ(); |
| Map<String, String> expectedMap = new HashMap<String, String>(); |
| expectedMap.put("keyX", "valueZ"); |
| expectedMap.put("keyY", "valueZ"); |
| expectedMap.put("keyZ", "valueZ"); |
| compareMapsComprehensively(map, expectedMap); |
| } |
| |
| public void testConstantStringArrays() { |
| TestConstants types = GWT.create(TestConstants.class); |
| String[] s; |
| |
| s = types.stringArrayABCDEFG(); |
| assertArrayEquals(new String[] {"A", "B", "C", "D", "E", "F", "G"}, s); |
| |
| s = types.stringArraySizeOneEmptyString(); |
| assertArrayEquals(new String[] {""}, s); |
| |
| s = types.stringArraySizeOneX(); |
| assertArrayEquals(new String[] {"X"}, s); |
| |
| s = types.stringArraySizeTwoBothEmpty(); |
| assertArrayEquals(new String[] {"", ""}, s); |
| |
| s = types.stringArraySizeThreeAllEmpty(); |
| assertArrayEquals(new String[] {"", "", ""}, s); |
| |
| s = types.stringArraySizeTwoWithEscapedComma(); |
| assertArrayEquals(new String[] {"X", ", Y"}, s); |
| |
| s = types.stringArraySizeOneWithBackslashX(); |
| assertArrayEquals(new String[] {"\\X"}, s); |
| |
| s = types.stringArraySizeThreeWithDoubleBackslash(); |
| assertArrayEquals(new String[] {"X", "\\", "Y"}, s); |
| } |
| |
| public void testConstantStrings() { |
| TestConstants types = GWT.create(TestConstants.class); |
| assertEquals("string", types.getString()); |
| assertEquals("stringTrimsLeadingWhitespace", |
| types.stringTrimsLeadingWhitespace()); |
| assertEquals("stringDoesNotTrimTrailingThreeSpaces ", |
| types.stringDoesNotTrimTrailingThreeSpaces()); |
| assertEquals("", types.stringEmpty()); |
| String jaBlue = types.stringJapaneseBlue(); |
| assertEquals("あお", jaBlue); |
| String jaGreen = types.stringJapaneseGreen(); |
| assertEquals("みどり", jaGreen); |
| String jaRed = types.stringJapaneseRed(); |
| assertEquals("あか", jaRed); |
| } |
| |
| public void testConstantsWithLookup() { |
| TestConstantsWithLookup l = GWT.create(TestConstantsWithLookup.class); |
| Map<String, String> map = l.getMap("mapABCD"); |
| assertEquals("valueA", map.get("keyA")); |
| map = l.getMap("mapDCBA"); |
| assertEquals("valueD", map.get("keyD")); |
| assertEquals(l.mapABCD(), l.getMap("mapABCD")); |
| assertEquals(l.mapDCBA(), l.getMap("mapDCBA")); |
| assertEquals(l.mapBACD(), l.getMap("mapBACD")); |
| assertEquals(l.getString(), l.getString("getString")); |
| assertSame(l.stringArrayABCDEFG(), l.getStringArray("stringArrayABCDEFG")); |
| assertEquals(l.booleanFalse(), l.getBoolean("booleanFalse")); |
| assertEquals(l.floatPi(), l.getFloat("floatPi"), .001); |
| assertEquals(l.doublePi(), l.getDouble("doublePi"), .001); |
| try { |
| // even though getString has the gwt.key "string", it is not the lookup |
| // value |
| l.getMap("string"); |
| fail("Should have thrown MissingResourceException"); |
| } catch (MissingResourceException e) { |
| // success if the exception was caught |
| } |
| } |
| |
| public void testDictionary() { |
| createDummyDictionaries(); |
| Dictionary d = Dictionary.getDictionary("testDic"); |
| assertEquals("3 {2},{2},{2}, one {0}, two {1} {1}", |
| d.get("formattedMessage")); |
| assertEquals("4", d.get("d")); |
| Set<String> s = d.keySet(); |
| assertTrue(s.contains("a")); |
| assertTrue(s.contains("b")); |
| assertFalse(s.contains("c")); |
| Collection<String> s2 = d.values(); |
| assertTrue(s2.contains("A")); |
| assertTrue(s2.contains("B")); |
| Iterator<String> iter = s2.iterator(); |
| assertEquals("3 {2},{2},{2}, one {0}, two {1} {1}", iter.next()); |
| assertEquals(4, s2.size()); |
| Dictionary empty = Dictionary.getDictionary("emptyDic"); |
| assertEquals(0, empty.keySet().size()); |
| boolean threwError = false; |
| try { |
| Dictionary.getDictionary("malformedDic"); |
| } catch (MissingResourceException e) { |
| threwError = true; |
| } |
| assertTrue(threwError); |
| } |
| |
| public void testIntConstant() { |
| TestConstants types = GWT.create(TestConstants.class); |
| assertEquals(0, types.intZero()); |
| assertEquals(1, types.intOne()); |
| assertEquals(-1, types.intNegOne()); |
| assertEquals(Integer.MAX_VALUE, types.intMax()); |
| assertEquals(Integer.MIN_VALUE, types.intMin()); |
| } |
| |
| public void testLocalizableInner() { |
| // Check simple inner |
| LocalizableSimpleInner s = GWT.create(Inners.LocalizableSimpleInner.class); |
| assertEquals("getLocalizableInner", s.getLocalizableInner()); |
| |
| LocalizableInnerInner localizableInnerInner = GWT.create(Inners.InnerClass.LocalizableInnerInner.class); |
| assertEquals("localizableInnerInner", localizableInnerInner.string()); |
| |
| // Check success of finding embedded |
| OuterLoc lock = GWT.create(OuterLoc.class); |
| assertEquals("piglatin", lock.string()); |
| |
| assertEquals("InnerLoc", Inners.testInnerLoc()); |
| } |
| |
| public void testLocalizableInterfaceInner() { |
| Inners inner = new Inners(); |
| |
| // Simple Inner |
| SimpleInner simpleInner = GWT.create(Inners.SimpleInner.class); |
| assertEquals(0, simpleInner.intZero()); |
| assertEquals("Simple Inner", simpleInner.simpleInner()); |
| assertTrue(inner.testProtectedInner()); |
| |
| // Has Inner |
| HasInner hasInner = GWT.create(Inners.HasInner.class); |
| assertEquals("Has Inner", hasInner.hasInner()); |
| assertEquals(0, hasInner.floatZero(), .0001); |
| |
| // Is Inner |
| IsInner isInner = GWT.create(IsInner.class); |
| assertEquals(2, isInner.isInner()); |
| |
| // Inner Inner |
| InnerInner innerInner = GWT.create(InnerInner.class); |
| assertEquals(4.321, innerInner.innerInner(), .0001); |
| assertEquals("outer", innerInner.outer()); |
| |
| // Inner Inner Message |
| InnerInnerMessages innerInnerMessages = GWT.create(InnerInnerMessages.class); |
| assertEquals("I am a person", |
| innerInnerMessages.innerClassMessages("person")); |
| |
| // Extends Inner Inner |
| ExtendsInnerInner extendsInnerInner = GWT.create(ExtendsInnerInner.class); |
| assertEquals("Extends Inner Inner", extendsInnerInner.extendsInnerInner()); |
| |
| // Protected InnerClass |
| InnerClass innerClass = new Inners.InnerClass(); |
| Map<String, String> extendsAnotherInner = innerClass.testExtendsAnotherInner(); |
| assertEquals("4.321", extendsAnotherInner.get("innerInner")); |
| assertEquals("outer", extendsAnotherInner.get("outer")); |
| |
| // ExtendProtectedInner |
| String extendProtectedInner = innerClass.testExtendsProtectedInner(); |
| assertEquals("Extend Protected Inner", extendProtectedInner); |
| } |
| |
| public void testNestedAnnotations() { |
| Nested m = GWT.create(Nested.class); |
| // no translation exists in piglatin for nested dollar |
| assertEquals("nested dollar", m.nestedDollar()); |
| assertEquals("estednay underscoray", m.nestedUnderscore()); |
| } |
| |
| public void testNestedAnnotationsAsSafeHtml() { |
| // Duplicate of non-SafeHtml tests |
| TestAnnotatedMessages.Nested m = GWT.create(TestAnnotatedMessages.Nested.class); |
| // no translation exists in piglatin for nested dollar |
| assertEquals("nested dollar", m.nestedDollarAsSafeHtml().asString()); |
| assertEquals("estednay underscoray", m.nestedUnderscoreAsSafeHtml().asString()); |
| } |
| |
| /** |
| * Test that messages works with Number subclasses. |
| */ |
| public void testNumber() { |
| TestAnnotatedMessages m = GWT.create(TestAnnotatedMessages.class); |
| BigInteger intVal = new BigInteger("1000000000000000000"); |
| assertEquals("Total is US$1,000,000,000,000,000,000.00", |
| m.withNumberCurrency(intVal)); |
| BigDecimal decVal = new BigDecimal("1000000000000000000.01"); |
| assertEquals("Total is US$1,000,000,000,000,000,000.01", |
| m.withNumberCurrency(decVal)); |
| assertEquals("Distance is 1.0E18", m.withNumberExponent(intVal)); |
| assertEquals("Distance is 100.0E6", m.withNumberExponent(1e8f)); |
| } |
| |
| public void testShapesFamily() { |
| Shapes shapes = GWT.create(Shapes.class); |
| // test overload |
| assertEquals("aya irclecay", shapes.circle()); |
| ColorsAndShapesAndConcepts s = GWT.create(ColorsAndShapesAndConcepts.class); |
| assertEquals("aya irclecay", s.circle()); |
| // test converge |
| assertEquals("any primary color", s.shapeColor()); |
| assertEquals("trees", s.green()); |
| assertEquals("Îñţérñåţîöñåļîžåţîöñ", s.internationalization()); |
| } |
| |
| public void testSpecialPlurals() { |
| TestAnnotatedMessages m = GWT.create(TestAnnotatedMessages.class); |
| assertEquals("No widgets", m.specialPlurals(0)); |
| assertEquals("A widget", m.specialPlurals(1)); |
| assertEquals("2 widgets", m.specialPlurals(2)); |
| } |
| |
| public void testTestMessages() { |
| TestMessages s = GWT.create(TestMessages.class); |
| assertEquals("no args", s.args0()); |
| assertEquals("a,b,c,d,e,f,g,h,i,j", s.args10("a", "b", "c", "d", "e", "f", |
| "g", "h", "i", "j")); |
| String shouldHave = "x,y, \"a\",\"b\", \"x\", \"y\", \'a\', b, {0}, \'y\'"; |
| assertEquals(shouldHave, s.argsWithQuotes("x", "y")); |
| assertEquals("repeatedArgs: a, b, a, b, a, b, a, b", |
| s.testLotsOfUsageOfArgs("a", "b")); |
| assertEquals("\"~\" ~~ \"~~~~ \"\"", s.testWithXs()); |
| assertEquals("お好你好好", s.unicode("好", "好")); |
| assertEquals("", s.empty()); |
| assertEquals("{quoted}", s.quotedBraces()); |
| } |
| |
| public void testTestMessagesAsSafeHtml() { |
| // Duplicate of non-SafeHtml tests |
| TestMessages m = (TestMessages) GWT.create(TestMessages.class); |
| assertEquals("no args", m.args0AsSafeHtml().asString()); |
| assertEquals("a,b,c,d,e,f,g,h,i,j", m.args10AsSafeHtml("a", "b", "c", "d", "e", "f", |
| "g", "h", "i", "j").asString()); |
| String shouldHave = "x,y, \"a\",\"b\", \"x\", \"y\", \'a\', b, {0}, \'y\'"; |
| assertEquals(shouldHave, m.argsWithQuotesAsSafeHtml("x", "y").asString()); |
| assertEquals("repeatedArgs: a, b, a, b, a, b, a, b", |
| m.testLotsOfUsageOfArgsAsSafeHtml("a", "b").asString()); |
| assertEquals("\"~\" ~~ \"~~~~ \"\"", m.testWithXsAsSafeHtml().asString()); |
| assertEquals("お好你好好", m.unicodeAsSafeHtml("好", "好").asString()); |
| assertEquals("", m.emptyAsSafeHtml().asString()); |
| assertEquals("{quoted}", m.quotedBracesAsSafeHtml().asString()); |
| } |
| |
| public void testTypedMessages() { |
| TestTypedMessages typed = GWT.create(TestTypedMessages.class); |
| String expected = "int(0) float(1.5), long(0), boolean(true), Object([], char(a), byte(127), short(-32768);"; |
| assertEquals(expected, typed.testAllTypes(0, (float) 1.5, 0, true, |
| new ArrayList<String>(), 'a', Byte.MAX_VALUE, Short.MIN_VALUE)); |
| String lotsOfInts = typed.testLotsOfInts(1, 2, 3, 4); |
| assertEquals("1, 2,3,4 ", lotsOfInts); |
| String oneFloat = typed.simpleMessageTest((float) 2.25); |
| assertEquals("2.25", oneFloat); |
| String singleQuotes = typed.testSingleQuotes("arg"); |
| assertEquals("'A', 'arg', ','", singleQuotes); |
| String testSomeObjectTypes = typed.testSomeObjectTypes( |
| new TestObjectToString(), new StringBuffer("hello"), new Integer("34"), |
| null); |
| assertEquals("obj(TestObjectToString), StringBuffer(hello), " |
| + "Integer(34), " + "null(null);", testSomeObjectTypes); |
| } |
| |
| public void testTypedMessagesAsSafeHtml() { |
| // Duplicate of non-SafeHtml tests |
| TestTypedMessages m = (TestTypedMessages) GWT.create(TestTypedMessages.class); |
| String expected = "int(0) float(1.5), long(0), boolean(true), Object([]," |
| + " char(a), byte(127), short(-32768);"; |
| assertEquals(expected, m.testAllTypesAsSafeHtml(0, (float) 1.5, 0, true, |
| new ArrayList<String>(), 'a', Byte.MAX_VALUE, |
| Short.MIN_VALUE).asString()); |
| String lotsOfInts = m.testLotsOfIntsAsSafeHtml(1, 2, 3, 4).asString(); |
| assertEquals("1, 2,3,4 ", lotsOfInts); |
| String oneFloat = m.simpleMessageTestAsSafeHtml((float) 2.25).asString(); |
| assertEquals("2.25", oneFloat); |
| String singleQuotes = m.testSingleQuotesAsSafeHtml("arg").asString(); |
| assertEquals("'A', 'arg', ','", singleQuotes); |
| String testSomeObjectTypes = m.testSomeObjectTypesAsSafeHtml( |
| new TestObjectToString(), new StringBuffer("hello"), new Integer("34"), |
| null).asString(); |
| assertEquals("obj(TestObjectToString), StringBuffer(hello), " |
| + "Integer(34), null(null);", |
| testSomeObjectTypes); |
| |
| // Additional SafeHtml-specific tests |
| Object someObject = new Object() { |
| @Override |
| public String toString() { |
| return STRING_WITH_B_TAG; |
| } |
| }; |
| testSomeObjectTypes = m.testSomeObjectTypesAsSafeHtml( |
| new TestObjectToString(), new StringBuffer(STRING_WITH_B_TAG), |
| new Integer("34"), someObject).asString(); |
| assertEquals("obj(TestObjectToString), StringBuffer(" |
| + STRING_WITH_B_TAG_ESCAPED + "), Integer(34), null(" |
| + STRING_WITH_B_TAG_ESCAPED + ");", testSomeObjectTypes); |
| } |
| |
| private void assertArrayEquals(String[] shouldBe, String[] test) { |
| assertEquals(shouldBe.length, test.length); |
| for (int i = 0; i < test.length; i++) { |
| assertEquals(shouldBe[i], test[i]); |
| } |
| } |
| |
| private <T> boolean compare(Collection<T> collection1, |
| Collection<T> collection2) { |
| if (collection1 == null) { |
| return (collection2 == null); |
| } |
| if (collection2 == null) { |
| return false; |
| } |
| if (collection1.size() != collection2.size()) { |
| return false; |
| } |
| for (T element1 : collection1) { |
| boolean found = false; |
| for (T element2 : collection2) { |
| if (element1.equals(element2)) { |
| found = true; |
| break; |
| } |
| } |
| if (!found) { |
| return false; |
| } |
| } |
| return true; |
| } |
| |
| // compare the map, entrySet, keySet, and values |
| private void compareMapsComprehensively(Map<String, String> map, |
| Map<String, String> expectedMap) { |
| // checking both directions to verify that the equals implementation is |
| // correct both ways |
| assertEquals(expectedMap, map); |
| assertEquals(map, expectedMap); |
| assertEquals(expectedMap.entrySet(), map.entrySet()); |
| assertEquals(map.entrySet(), expectedMap.entrySet()); |
| assertEquals(expectedMap.keySet(), map.keySet()); |
| assertEquals(map.keySet(), expectedMap.keySet()); |
| assertTrue(compare(expectedMap.values(), map.values())); |
| assertTrue(compare(map.values(), expectedMap.values())); |
| } |
| |
| private native void createDummyDictionaries() /*-{ |
| $wnd.testDic = new Object(); |
| $wnd.testDic.formattedMessage = "3 {2},{2},{2}, one {0}, two {1} {1}"; |
| $wnd.testDic.a="A"; |
| $wnd.testDic.b="B"; |
| $wnd.testDic.d=4; |
| $wnd.emptyDic = new Object(); |
| $wnd.malformedDic = 4; |
| }-*/; |
| |
| private Map<String, String> getMapFromArrayUsingASimpleRule(String array[]) { |
| Map<String, String> map = new HashMap<String, String>(); |
| for (String str : array) { |
| map.put("key" + str, "value" + str); |
| } |
| return map; |
| } |
| } |