blob: eaf2f8a70679f422a675ed5db42968e19287d6c5 [file] [log] [blame]
Jake Whartonbd740342019-12-13 10:14:52 -05001package backport;
2
3public final class StringBackportJava11Main {
4 public static void main(String[] args) {
5 testRepeat();
Jake Whartonf192bd12019-12-13 12:14:04 -05006 testIsBlank();
7 testStrip();
8 testStripLeading();
9 testStripTrailing();
Jake Whartonbd740342019-12-13 10:14:52 -050010 }
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 Gjesse764dccc2021-10-27 08:51:33 +020028
29 try {
30 "\u03B1\u03B2".repeat(Integer.MAX_VALUE);
Søren Gjessee0a6f452021-10-27 12:10:35 +020031 throw new AssertionError("Expected to throw OutOfMemoryError");
32 } catch (OutOfMemoryError e) {
33 // Expected.
Søren Gjesse764dccc2021-10-27 08:51:33 +020034 }
Jake Whartonbd740342019-12-13 10:14:52 -050035 }
36
Jake Whartonf192bd12019-12-13 12:14:04 -050037 /** 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 Whartonbd740342019-12-13 10:14:52 -0500133 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}