Jake Wharton | bd74034 | 2019-12-13 10:14:52 -0500 | [diff] [blame] | 1 | package backport; |
| 2 | |
| 3 | public final class StringBackportJava11Main { |
| 4 | public static void main(String[] args) { |
| 5 | testRepeat(); |
Jake Wharton | f192bd1 | 2019-12-13 12:14:04 -0500 | [diff] [blame] | 6 | testIsBlank(); |
| 7 | testStrip(); |
| 8 | testStripLeading(); |
| 9 | testStripTrailing(); |
Jake Wharton | bd74034 | 2019-12-13 10:14:52 -0500 | [diff] [blame] | 10 | } |
| 11 | |
| 12 | private static void testRepeat() { |
| 13 | try { |
| 14 | throw new AssertionError("hey".repeat(-1)); |
| 15 | } catch (IllegalArgumentException e) { |
| 16 | assertEquals("count is negative: -1", e.getMessage()); |
| 17 | } |
| 18 | |
| 19 | assertEquals("", "".repeat(0)); |
| 20 | assertEquals("", "".repeat(1)); |
| 21 | assertEquals("", "".repeat(2)); |
| 22 | |
| 23 | assertEquals("", "hey".repeat(0)); |
| 24 | assertEquals("hey", "hey".repeat(1)); |
| 25 | assertEquals("heyhey", "hey".repeat(2)); |
| 26 | assertEquals("heyheyhey", "hey".repeat(3)); |
| 27 | assertEquals("heyheyheyhey", "hey".repeat(4)); |
Søren Gjesse | 764dccc | 2021-10-27 08:51:33 +0200 | [diff] [blame] | 28 | |
| 29 | try { |
| 30 | "\u03B1\u03B2".repeat(Integer.MAX_VALUE); |
Søren Gjesse | e0a6f45 | 2021-10-27 12:10:35 +0200 | [diff] [blame] | 31 | throw new AssertionError("Expected to throw OutOfMemoryError"); |
| 32 | } catch (OutOfMemoryError e) { |
| 33 | // Expected. |
Søren Gjesse | 764dccc | 2021-10-27 08:51:33 +0200 | [diff] [blame] | 34 | } |
Jake Wharton | bd74034 | 2019-12-13 10:14:52 -0500 | [diff] [blame] | 35 | } |
| 36 | |
Jake Wharton | f192bd1 | 2019-12-13 12:14:04 -0500 | [diff] [blame] | 37 | /** Per {@link Character#isWhitespace(int)} */ |
| 38 | private static final String WHITESPACE = "" |
| 39 | // Unicode "Zs" category: |
| 40 | + "\u0020" |
| 41 | + "\u1680" |
| 42 | //+ "\u00A0" Exception per Javadoc |
| 43 | + "\u1680" |
| 44 | + "\u2000" |
| 45 | + "\u2001" |
| 46 | + "\u2002" |
| 47 | + "\u2003" |
| 48 | + "\u2004" |
| 49 | + "\u2005" |
| 50 | + "\u2006" |
| 51 | //+ "\u2007" Exception per Javadoc |
| 52 | + "\u2008" |
| 53 | + "\u2009" |
| 54 | + "\u200A" |
| 55 | //+ "\u200F" Exception per Javadoc |
| 56 | //+ "\u205F" Not honored on Android 4.0.4 |
| 57 | + "\u3000" |
| 58 | // Unicode "Zl" category: |
| 59 | + "\u2028" |
| 60 | // Unicode "Zp" category: |
| 61 | + "\u2029" |
| 62 | // Others: |
| 63 | + "\t" |
| 64 | + "\n" |
| 65 | + "\u000B" |
| 66 | + "\f" |
| 67 | + "\r" |
| 68 | + "\u001C" |
| 69 | + "\u001D" |
| 70 | + "\u001E" |
| 71 | + "\u001F" |
| 72 | ; |
| 73 | |
| 74 | public static void testIsBlank() { |
| 75 | assertEquals(true, "".isBlank()); |
| 76 | assertEquals(true, WHITESPACE.isBlank()); |
| 77 | |
| 78 | // Android <=4.0.4 does not recognize this as whitespace. Just ensure local consistency. |
| 79 | assertEquals(Character.isWhitespace(0x205F), "\u205F".isBlank()); |
| 80 | |
| 81 | assertEquals(false, "a".isBlank()); |
| 82 | assertEquals(false, "å".isBlank()); |
| 83 | assertEquals(false, "a\u030A".isBlank()); |
| 84 | assertEquals(false, "\uD83D\uDE00".isBlank()); |
| 85 | assertEquals(false, (WHITESPACE + "a").isBlank()); |
| 86 | assertEquals(false, ("a" + WHITESPACE).isBlank()); |
| 87 | } |
| 88 | |
| 89 | public static void testStrip() { |
| 90 | assertEquals("", "".strip()); |
| 91 | assertEquals("", WHITESPACE.strip()); |
| 92 | assertEquals("a", "a".strip()); |
| 93 | assertEquals("a", (WHITESPACE + "a").strip()); |
| 94 | assertEquals("a", ("a" + WHITESPACE).strip()); |
| 95 | assertEquals("a", (WHITESPACE + "a" + WHITESPACE).strip()); |
| 96 | assertEquals("a" + WHITESPACE + "a", ("a" + WHITESPACE + "a").strip()); |
| 97 | assertEquals("a" + WHITESPACE + "a", (WHITESPACE + "a" + WHITESPACE + "a").strip()); |
| 98 | assertEquals("a" + WHITESPACE + "a", ("a" + WHITESPACE + "a" + WHITESPACE).strip()); |
| 99 | assertEquals("a" + WHITESPACE + "a", |
| 100 | (WHITESPACE + "a" + WHITESPACE + "a" + WHITESPACE).strip()); |
| 101 | } |
| 102 | |
| 103 | public static void testStripLeading() { |
| 104 | assertEquals("", "".stripLeading()); |
| 105 | assertEquals("", WHITESPACE.stripLeading()); |
| 106 | assertEquals("a", "a".stripLeading()); |
| 107 | assertEquals("a", (WHITESPACE + "a").stripLeading()); |
| 108 | assertEquals("a" + WHITESPACE, ("a" + WHITESPACE).stripLeading()); |
| 109 | assertEquals("a" + WHITESPACE, (WHITESPACE + "a" + WHITESPACE).stripLeading()); |
| 110 | assertEquals("a" + WHITESPACE + "a", ("a" + WHITESPACE + "a").stripLeading()); |
| 111 | assertEquals("a" + WHITESPACE + "a", (WHITESPACE + "a" + WHITESPACE + "a").stripLeading()); |
| 112 | assertEquals("a" + WHITESPACE + "a" + WHITESPACE, |
| 113 | ("a" + WHITESPACE + "a" + WHITESPACE).stripLeading()); |
| 114 | assertEquals("a" + WHITESPACE + "a" + WHITESPACE, |
| 115 | (WHITESPACE + "a" + WHITESPACE + "a" + WHITESPACE).stripLeading()); |
| 116 | } |
| 117 | |
| 118 | public static void testStripTrailing() { |
| 119 | assertEquals("", "".stripTrailing()); |
| 120 | assertEquals("", WHITESPACE.stripTrailing()); |
| 121 | assertEquals("a", "a".stripTrailing()); |
| 122 | assertEquals(WHITESPACE + "a", (WHITESPACE + "a").stripTrailing()); |
| 123 | assertEquals("a", ("a" + WHITESPACE).stripTrailing()); |
| 124 | assertEquals(WHITESPACE + "a", (WHITESPACE + "a" + WHITESPACE).stripTrailing()); |
| 125 | assertEquals("a" + WHITESPACE + "a", ("a" + WHITESPACE + "a").stripTrailing()); |
| 126 | assertEquals(WHITESPACE + "a" + WHITESPACE + "a", |
| 127 | (WHITESPACE + "a" + WHITESPACE + "a").stripTrailing()); |
| 128 | assertEquals("a" + WHITESPACE + "a", ("a" + WHITESPACE + "a" + WHITESPACE).stripTrailing()); |
| 129 | assertEquals(WHITESPACE + "a" + WHITESPACE + "a", |
| 130 | (WHITESPACE + "a" + WHITESPACE + "a" + WHITESPACE).stripTrailing()); |
| 131 | } |
| 132 | |
Jake Wharton | bd74034 | 2019-12-13 10:14:52 -0500 | [diff] [blame] | 133 | private static void assertEquals(Object expected, Object actual) { |
| 134 | if (expected != actual && (expected == null || !expected.equals(actual))) { |
| 135 | throw new AssertionError("Expected <" + expected + "> but was <" + actual + '>'); |
| 136 | } |
| 137 | } |
| 138 | } |