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 Bringertimport com.google.common.annotations.GwtIncompatible; 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.NullPointerTester; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestCase; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unit test for {@link Strings}. 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Kevin Bourrillion 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true) 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class StringsTest extends TestCase { 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNullToEmpty() { 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", Strings.nullToEmpty(null)); 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", Strings.nullToEmpty("")); 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("a", Strings.nullToEmpty("a")); 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEmptyToNull() { 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(Strings.emptyToNull(null)); 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(Strings.emptyToNull("")); 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("a", Strings.emptyToNull("a")); 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIsNullOrEmpty() { 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Strings.isNullOrEmpty(null)); 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Strings.isNullOrEmpty("")); 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Strings.isNullOrEmpty("a")); 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPadStart_noPadding() { 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame("", Strings.padStart("", 0, '-')); 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame("x", Strings.padStart("x", 0, '-')); 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame("x", Strings.padStart("x", 1, '-')); 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame("xx", Strings.padStart("xx", 0, '-')); 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame("xx", Strings.padStart("xx", 2, '-')); 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPadStart_somePadding() { 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("-", Strings.padStart("", 1, '-')); 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("--", Strings.padStart("", 2, '-')); 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("-x", Strings.padStart("x", 2, '-')); 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("--x", Strings.padStart("x", 3, '-')); 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("-xx", Strings.padStart("xx", 3, '-')); 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPadStart_negativeMinLength() { 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame("x", Strings.padStart("x", -1, '-')); 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // TODO: could remove if we got NPT working in GWT somehow 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPadStart_null() { 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Strings.padStart(null, 5, '0'); 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPadEnd_noPadding() { 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame("", Strings.padEnd("", 0, '-')); 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame("x", Strings.padEnd("x", 0, '-')); 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame("x", Strings.padEnd("x", 1, '-')); 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame("xx", Strings.padEnd("xx", 0, '-')); 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame("xx", Strings.padEnd("xx", 2, '-')); 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPadEnd_somePadding() { 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("-", Strings.padEnd("", 1, '-')); 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("--", Strings.padEnd("", 2, '-')); 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("x-", Strings.padEnd("x", 2, '-')); 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("x--", Strings.padEnd("x", 3, '-')); 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("xx-", Strings.padEnd("xx", 3, '-')); 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPadEnd_negativeMinLength() { 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame("x", Strings.padEnd("x", -1, '-')); 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // TODO: could remove if we got NPT working in GWT somehow 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPadEnd_null() { 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Strings.padEnd(null, 5, '0'); 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRepeat() { 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String input = "20"; 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", Strings.repeat(input, 0)); 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("20", Strings.repeat(input, 1)); 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("2020", Strings.repeat(input, 2)); 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("202020", Strings.repeat(input, 3)); 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", Strings.repeat("", 4)); 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = 0; i < 100; ++i) { 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2 * i, Strings.repeat(input, i).length()); 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Strings.repeat("x", -1); 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Massive string 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Strings.repeat("12345678", (1 << 30) + 3); 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (ArrayIndexOutOfBoundsException expected) { 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // TODO: could remove if we got NPT working in GWT somehow 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRepeat_null() { 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Strings.repeat(null, 5); 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCommonPrefix() { 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", Strings.commonPrefix("", "")); 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", Strings.commonPrefix("abc", "")); 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", Strings.commonPrefix("", "abc")); 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", Strings.commonPrefix("abcde", "xyz")); 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", Strings.commonPrefix("xyz", "abcde")); 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", Strings.commonPrefix("xyz", "abcxyz")); 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("a", Strings.commonPrefix("abc", "aaaaa")); 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("aa", Strings.commonPrefix("aa", "aaaaa")); 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("abc", 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Strings.commonPrefix(new StringBuffer("abcdef"), "abcxyz")); 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Identical valid surrogate pairs. 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("abc\uD8AB\uDCAB", 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Strings.commonPrefix("abc\uD8AB\uDCABdef", "abc\uD8AB\uDCABxyz")); 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Differing valid surrogate pairs. 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("abc", 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Strings.commonPrefix("abc\uD8AB\uDCABdef", "abc\uD8AB\uDCACxyz")); 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // One invalid pair. 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("abc", 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Strings.commonPrefix("abc\uD8AB\uDCABdef", "abc\uD8AB\uD8ABxyz")); 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Two identical invalid pairs. 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("abc\uD8AB\uD8AC", 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Strings.commonPrefix("abc\uD8AB\uD8ACdef", "abc\uD8AB\uD8ACxyz")); 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Two differing invalid pairs. 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("abc\uD8AB", 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Strings.commonPrefix("abc\uD8AB\uD8ABdef", "abc\uD8AB\uD8ACxyz")); 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // One orphan high surrogate. 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", Strings.commonPrefix("\uD8AB\uDCAB", "\uD8AB")); 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Two orphan high surrogates. 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("\uD8AB", Strings.commonPrefix("\uD8AB", "\uD8AB")); 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCommonSuffix() { 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", Strings.commonSuffix("", "")); 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", Strings.commonSuffix("abc", "")); 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", Strings.commonSuffix("", "abc")); 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", Strings.commonSuffix("abcde", "xyz")); 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", Strings.commonSuffix("xyz", "abcde")); 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", Strings.commonSuffix("xyz", "xyzabc")); 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("c", Strings.commonSuffix("abc", "ccccc")); 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("aa", Strings.commonSuffix("aa", "aaaaa")); 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("abc", 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Strings.commonSuffix(new StringBuffer("xyzabc"), "xxxabc")); 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Identical valid surrogate pairs. 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("\uD8AB\uDCABdef", 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Strings.commonSuffix("abc\uD8AB\uDCABdef", "xyz\uD8AB\uDCABdef")); 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Differing valid surrogate pairs. 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("def", 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Strings.commonSuffix("abc\uD8AB\uDCABdef", "abc\uD8AC\uDCABdef")); 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // One invalid pair. 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("def", 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Strings.commonSuffix("abc\uD8AB\uDCABdef", "xyz\uDCAB\uDCABdef")); 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Two identical invalid pairs. 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("\uD8AB\uD8ABdef", 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Strings.commonSuffix("abc\uD8AB\uD8ABdef", "xyz\uD8AB\uD8ABdef")); 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Two differing invalid pairs. 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("\uDCABdef", 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Strings.commonSuffix("abc\uDCAB\uDCABdef", "abc\uDCAC\uDCABdef")); 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // One orphan low surrogate. 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", Strings.commonSuffix("x\uD8AB\uDCAB", "\uDCAB")); 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Two orphan low surrogates. 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("\uDCAB", Strings.commonSuffix("\uDCAB", "\uDCAB")); 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testValidSurrogatePairAt() { 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Strings.validSurrogatePairAt("\uD8AB\uDCAB", 0)); 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Strings.validSurrogatePairAt("abc\uD8AB\uDCAB", 3)); 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Strings.validSurrogatePairAt("abc\uD8AB\uDCABxyz", 3)); 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Strings.validSurrogatePairAt("\uD8AB\uD8AB", 0)); 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Strings.validSurrogatePairAt("\uDCAB\uDCAB", 0)); 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Strings.validSurrogatePairAt("\uD8AB\uDCAB", -1)); 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Strings.validSurrogatePairAt("\uD8AB\uDCAB", 1)); 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Strings.validSurrogatePairAt("\uD8AB\uDCAB", -2)); 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Strings.validSurrogatePairAt("\uD8AB\uDCAB", 2)); 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Strings.validSurrogatePairAt("x\uDCAB", 0)); 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Strings.validSurrogatePairAt("\uD8ABx", 0)); 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("NullPointerTester") 2247dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testNullPointers() { 2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert NullPointerTester tester = new NullPointerTester(); 2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.testAllPublicStaticMethods(Strings.class); 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 229