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