AsciiTest.java revision 0888a09821a98ac0680fad765217302858e70fa4
11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2010 The Guava Authors 31d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 41d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License"); 51d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * you may not use this file except in compliance with the License. 61d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * You may obtain a copy of the License at 71d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 81d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0 91d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unless required by applicable law or agreed to in writing, software 111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS, 121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * See the License for the specific language governing permissions and 141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * limitations under the License. 151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpackage com.google.common.base; 181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestCase; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unit test for {@link Ascii}. 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Craig Berry 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class AsciiTest extends TestCase { 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * The Unicode points {@code 00c1} and {@code 00e1} are the upper- and 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * lowercase forms of A-with-acute-accent, {@code Á} and {@code á}. 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final String IGNORED = 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "`10-=~!@#$%^&*()_+[]\\{}|;':\",./<>?'\u00c1\u00e1\n"; 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final String LOWER = "abcdefghijklmnopqrstuvwxyz"; 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final String UPPER = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testToLowerCase() { 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(LOWER, Ascii.toLowerCase(UPPER)); 420888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertSame(LOWER, Ascii.toLowerCase(LOWER)); 430888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(IGNORED, Ascii.toLowerCase(IGNORED)); 440888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("foobar", Ascii.toLowerCase("fOobaR")); 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testToUpperCase() { 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(UPPER, Ascii.toUpperCase(LOWER)); 490888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertSame(UPPER, Ascii.toUpperCase(UPPER)); 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(IGNORED, Ascii.toUpperCase(IGNORED)); 510888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("FOOBAR", Ascii.toUpperCase("FoOBAr")); 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCharsIgnored() { 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (char c : IGNORED.toCharArray()) { 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String str = String.valueOf(c); 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(str, c == Ascii.toLowerCase(c)); 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(str, c == Ascii.toUpperCase(c)); 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(str, Ascii.isLowerCase(c)); 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(str, Ascii.isUpperCase(c)); 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCharsLower() { 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (char c : LOWER.toCharArray()) { 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String str = String.valueOf(c); 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(str, c == Ascii.toLowerCase(c)); 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(str, c == Ascii.toUpperCase(c)); 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(str, Ascii.isLowerCase(c)); 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(str, Ascii.isUpperCase(c)); 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCharsUpper() { 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (char c : UPPER.toCharArray()) { 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String str = String.valueOf(c); 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(str, c == Ascii.toLowerCase(c)); 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(str, c == Ascii.toUpperCase(c)); 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(str, Ascii.isLowerCase(c)); 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(str, Ascii.isUpperCase(c)); 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 830888a09821a98ac0680fad765217302858e70fa4Paul Duffin 840888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testTruncate() { 850888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("foobar", Ascii.truncate("foobar", 10, "...")); 860888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("fo...", Ascii.truncate("foobar", 5, "...")); 870888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("foobar", Ascii.truncate("foobar", 6, "...")); 880888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("...", Ascii.truncate("foobar", 3, "...")); 890888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("foobar", Ascii.truncate("foobar", 10, "…")); 900888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("foo…", Ascii.truncate("foobar", 4, "…")); 910888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("fo--", Ascii.truncate("foobar", 4, "--")); 920888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("foobar", Ascii.truncate("foobar", 6, "…")); 930888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("foob…", Ascii.truncate("foobar", 5, "…")); 940888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("foo", Ascii.truncate("foobar", 3, "")); 950888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("", Ascii.truncate("", 5, "")); 960888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("", Ascii.truncate("", 5, "...")); 970888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("", Ascii.truncate("", 0, "")); 980888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 990888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1000888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testTruncateIllegalArguments() { 1010888a09821a98ac0680fad765217302858e70fa4Paul Duffin String truncated = null; 1020888a09821a98ac0680fad765217302858e70fa4Paul Duffin try { 1030888a09821a98ac0680fad765217302858e70fa4Paul Duffin truncated = Ascii.truncate("foobar", 2, "..."); 1040888a09821a98ac0680fad765217302858e70fa4Paul Duffin fail(); 1050888a09821a98ac0680fad765217302858e70fa4Paul Duffin } catch (IllegalArgumentException expected) {} 1060888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1070888a09821a98ac0680fad765217302858e70fa4Paul Duffin try { 1080888a09821a98ac0680fad765217302858e70fa4Paul Duffin truncated = Ascii.truncate("foobar", 8, "1234567890"); 1090888a09821a98ac0680fad765217302858e70fa4Paul Duffin fail(); 1100888a09821a98ac0680fad765217302858e70fa4Paul Duffin } catch (IllegalArgumentException expected) {} 1110888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1120888a09821a98ac0680fad765217302858e70fa4Paul Duffin try { 1130888a09821a98ac0680fad765217302858e70fa4Paul Duffin truncated = Ascii.truncate("foobar", -1, "..."); 1140888a09821a98ac0680fad765217302858e70fa4Paul Duffin fail(); 1150888a09821a98ac0680fad765217302858e70fa4Paul Duffin } catch (IllegalArgumentException expected) {} 1160888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1170888a09821a98ac0680fad765217302858e70fa4Paul Duffin try { 1180888a09821a98ac0680fad765217302858e70fa4Paul Duffin truncated = Ascii.truncate("foobar", -1, ""); 1190888a09821a98ac0680fad765217302858e70fa4Paul Duffin fail(); 1200888a09821a98ac0680fad765217302858e70fa4Paul Duffin } catch (IllegalArgumentException expected) {} 1210888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1220888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1230888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testEqualsIgnoreCase() { 1240888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertTrue(Ascii.equalsIgnoreCase("", "")); 1250888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertFalse(Ascii.equalsIgnoreCase("", "x")); 1260888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertFalse(Ascii.equalsIgnoreCase("x", "")); 1270888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertTrue(Ascii.equalsIgnoreCase(LOWER, UPPER)); 1280888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertTrue(Ascii.equalsIgnoreCase(UPPER, LOWER)); 1290888a09821a98ac0680fad765217302858e70fa4Paul Duffin // Create new strings here to avoid early-out logic. 1300888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertTrue(Ascii.equalsIgnoreCase(new String(IGNORED), new String(IGNORED))); 1310888a09821a98ac0680fad765217302858e70fa4Paul Duffin // Compare to: "\u00c1".equalsIgnoreCase("\u00e1") == true 1320888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertFalse(Ascii.equalsIgnoreCase("\u00c1", "\u00e1")); 1330888a09821a98ac0680fad765217302858e70fa4Paul Duffin // Test chars just outside the alphabetic range ('A'-1 vs 'a'-1, 'Z'+1 vs 'z'+1) 1340888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertFalse(Ascii.equalsIgnoreCase("@", "`")); 1350888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertFalse(Ascii.equalsIgnoreCase("[", "{")); 1360888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1370888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1380888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testEqualsIgnoreCaseUnicodeEquivalence() { 1390888a09821a98ac0680fad765217302858e70fa4Paul Duffin // Note that it's possible in future that the JDK's idea to toUpperCase() or equalsIgnoreCase() 1400888a09821a98ac0680fad765217302858e70fa4Paul Duffin // may change and break assumptions in this test [*]. This is not a bug in the implementation of 1410888a09821a98ac0680fad765217302858e70fa4Paul Duffin // Ascii.equalsIgnoreCase(), but it is a signal that its documentation may need updating as 1420888a09821a98ac0680fad765217302858e70fa4Paul Duffin // regards edge cases. 1430888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1440888a09821a98ac0680fad765217302858e70fa4Paul Duffin // The Unicode point {@code 00df} is the lowercase form of sharp-S (ß), whose uppercase is "SS". 1450888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("pa\u00dfword".toUpperCase(), "PASSWORD"); // [*] 1460888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertFalse("pa\u00dfword".equalsIgnoreCase("PASSWORD")); // [*] 1470888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertFalse(Ascii.equalsIgnoreCase("pa\u00dfword", "PASSWORD")); 1480888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 150