| package backport; | |
| public final class StringBackportJava11Main { | |
| public static void main(String[] args) { | |
| testRepeat(); | |
| testIsBlank(); | |
| testStrip(); | |
| testStripLeading(); | |
| testStripTrailing(); | |
| } | |
| private static void testRepeat() { | |
| try { | |
| throw new AssertionError("hey".repeat(-1)); | |
| } catch (IllegalArgumentException e) { | |
| assertEquals("count is negative: -1", e.getMessage()); | |
| } | |
| assertEquals("", "".repeat(0)); | |
| assertEquals("", "".repeat(1)); | |
| assertEquals("", "".repeat(2)); | |
| assertEquals("", "hey".repeat(0)); | |
| assertEquals("hey", "hey".repeat(1)); | |
| assertEquals("heyhey", "hey".repeat(2)); | |
| assertEquals("heyheyhey", "hey".repeat(3)); | |
| assertEquals("heyheyheyhey", "hey".repeat(4)); | |
| try { | |
| "\u03B1\u03B2".repeat(Integer.MAX_VALUE); | |
| throw new AssertionError("Expected to throw OutOfMemoryError"); | |
| } catch (OutOfMemoryError e) { | |
| // Expected. | |
| } | |
| } | |
| /** Per {@link Character#isWhitespace(int)} */ | |
| private static final String WHITESPACE = "" | |
| // Unicode "Zs" category: | |
| + "\u0020" | |
| + "\u1680" | |
| //+ "\u00A0" Exception per Javadoc | |
| + "\u1680" | |
| + "\u2000" | |
| + "\u2001" | |
| + "\u2002" | |
| + "\u2003" | |
| + "\u2004" | |
| + "\u2005" | |
| + "\u2006" | |
| //+ "\u2007" Exception per Javadoc | |
| + "\u2008" | |
| + "\u2009" | |
| + "\u200A" | |
| //+ "\u200F" Exception per Javadoc | |
| //+ "\u205F" Not honored on Android 4.0.4 | |
| + "\u3000" | |
| // Unicode "Zl" category: | |
| + "\u2028" | |
| // Unicode "Zp" category: | |
| + "\u2029" | |
| // Others: | |
| + "\t" | |
| + "\n" | |
| + "\u000B" | |
| + "\f" | |
| + "\r" | |
| + "\u001C" | |
| + "\u001D" | |
| + "\u001E" | |
| + "\u001F" | |
| ; | |
| public static void testIsBlank() { | |
| assertEquals(true, "".isBlank()); | |
| assertEquals(true, WHITESPACE.isBlank()); | |
| // Android <=4.0.4 does not recognize this as whitespace. Just ensure local consistency. | |
| assertEquals(Character.isWhitespace(0x205F), "\u205F".isBlank()); | |
| assertEquals(false, "a".isBlank()); | |
| assertEquals(false, "å".isBlank()); | |
| assertEquals(false, "a\u030A".isBlank()); | |
| assertEquals(false, "\uD83D\uDE00".isBlank()); | |
| assertEquals(false, (WHITESPACE + "a").isBlank()); | |
| assertEquals(false, ("a" + WHITESPACE).isBlank()); | |
| } | |
| public static void testStrip() { | |
| assertEquals("", "".strip()); | |
| assertEquals("", WHITESPACE.strip()); | |
| assertEquals("a", "a".strip()); | |
| assertEquals("a", (WHITESPACE + "a").strip()); | |
| assertEquals("a", ("a" + WHITESPACE).strip()); | |
| assertEquals("a", (WHITESPACE + "a" + WHITESPACE).strip()); | |
| assertEquals("a" + WHITESPACE + "a", ("a" + WHITESPACE + "a").strip()); | |
| assertEquals("a" + WHITESPACE + "a", (WHITESPACE + "a" + WHITESPACE + "a").strip()); | |
| assertEquals("a" + WHITESPACE + "a", ("a" + WHITESPACE + "a" + WHITESPACE).strip()); | |
| assertEquals("a" + WHITESPACE + "a", | |
| (WHITESPACE + "a" + WHITESPACE + "a" + WHITESPACE).strip()); | |
| } | |
| public static void testStripLeading() { | |
| assertEquals("", "".stripLeading()); | |
| assertEquals("", WHITESPACE.stripLeading()); | |
| assertEquals("a", "a".stripLeading()); | |
| assertEquals("a", (WHITESPACE + "a").stripLeading()); | |
| assertEquals("a" + WHITESPACE, ("a" + WHITESPACE).stripLeading()); | |
| assertEquals("a" + WHITESPACE, (WHITESPACE + "a" + WHITESPACE).stripLeading()); | |
| assertEquals("a" + WHITESPACE + "a", ("a" + WHITESPACE + "a").stripLeading()); | |
| assertEquals("a" + WHITESPACE + "a", (WHITESPACE + "a" + WHITESPACE + "a").stripLeading()); | |
| assertEquals("a" + WHITESPACE + "a" + WHITESPACE, | |
| ("a" + WHITESPACE + "a" + WHITESPACE).stripLeading()); | |
| assertEquals("a" + WHITESPACE + "a" + WHITESPACE, | |
| (WHITESPACE + "a" + WHITESPACE + "a" + WHITESPACE).stripLeading()); | |
| } | |
| public static void testStripTrailing() { | |
| assertEquals("", "".stripTrailing()); | |
| assertEquals("", WHITESPACE.stripTrailing()); | |
| assertEquals("a", "a".stripTrailing()); | |
| assertEquals(WHITESPACE + "a", (WHITESPACE + "a").stripTrailing()); | |
| assertEquals("a", ("a" + WHITESPACE).stripTrailing()); | |
| assertEquals(WHITESPACE + "a", (WHITESPACE + "a" + WHITESPACE).stripTrailing()); | |
| assertEquals("a" + WHITESPACE + "a", ("a" + WHITESPACE + "a").stripTrailing()); | |
| assertEquals(WHITESPACE + "a" + WHITESPACE + "a", | |
| (WHITESPACE + "a" + WHITESPACE + "a").stripTrailing()); | |
| assertEquals("a" + WHITESPACE + "a", ("a" + WHITESPACE + "a" + WHITESPACE).stripTrailing()); | |
| assertEquals(WHITESPACE + "a" + WHITESPACE + "a", | |
| (WHITESPACE + "a" + WHITESPACE + "a" + WHITESPACE).stripTrailing()); | |
| } | |
| private static void assertEquals(Object expected, Object actual) { | |
| if (expected != actual && (expected == null || !expected.equals(actual))) { | |
| throw new AssertionError("Expected <" + expected + "> but was <" + actual + '>'); | |
| } | |
| } | |
| } |