Add basic ellipsis CTS test
Mark it as sharedTest.
Signed-off-by: utzcoz <utzcoz@outlook.com>
diff --git a/integration_tests/ctesque/src/sharedTest/java/android/text/TextUtilsTest.java b/integration_tests/ctesque/src/sharedTest/java/android/text/TextUtilsTest.java
new file mode 100644
index 0000000..2c5c07b
--- /dev/null
+++ b/integration_tests/ctesque/src/sharedTest/java/android/text/TextUtilsTest.java
@@ -0,0 +1,94 @@
+package android.text;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.junit.Assert.fail;
+
+import android.graphics.Paint;
+import android.text.TextUtils.TruncateAt;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Test file for {@link TextUtils}.
+ *
+ * <p>Copied from <a
+ * href="https://cs.android.com/android/platform/superproject/main/+/main:cts/tests/tests/text/src/android/text/cts/TextUtilsTest.java">...</a>.
+ */
+@RunWith(AndroidJUnit4.class)
+public class TextUtilsTest {
+ private String mEllipsis;
+
+ @Before
+ public void setup() {
+ mEllipsis = getEllipsis();
+ }
+
+ /**
+ * Get the ellipsis from system.
+ *
+ * @return the string of ellipsis.
+ */
+ private static String getEllipsis() {
+ String text = "xxxxx";
+ TextPaint p = new TextPaint();
+ float width = p.measureText(text.substring(1));
+ String re = TextUtils.ellipsize(text, p, width, TruncateAt.START).toString();
+ return re.substring(0, re.indexOf("x"));
+ }
+
+ @Test
+ public void testEllipsize() {
+ TextPaint p = new TextPaint();
+
+ // turn off kerning. with kerning enabled, different methods of measuring the same text
+ // produce different results.
+ p.setFlags(p.getFlags() & ~Paint.DEV_KERN_TEXT_FLAG);
+
+ CharSequence text = "long string to truncate";
+
+ float textWidth = p.measureText(mEllipsis) + p.measureText("uncate");
+ assertThat(TextUtils.ellipsize(text, p, textWidth, TruncateAt.START).toString())
+ .isEqualTo(mEllipsis + "uncate");
+
+ textWidth = p.measureText("long str") + p.measureText(mEllipsis);
+ assertThat(TextUtils.ellipsize(text, p, textWidth, TruncateAt.END).toString())
+ .isEqualTo("long str" + mEllipsis);
+
+ textWidth = p.measureText("long") + p.measureText(mEllipsis) + p.measureText("ate");
+ assertThat(TextUtils.ellipsize(text, p, textWidth, TruncateAt.MIDDLE).toString())
+ .isEqualTo("long" + mEllipsis + "ate");
+
+ // issue 1688347, ellipsize() is not defined for TruncateAt.MARQUEE.
+ // In the code it looks like this does the same as MIDDLE.
+ // In other methods, MARQUEE is equivalent to END, except for the first line.
+ assertThat(TextUtils.ellipsize(text, p, textWidth, TruncateAt.MARQUEE).toString())
+ .isEqualTo("long" + mEllipsis + "ate");
+
+ textWidth = p.measureText(mEllipsis);
+ assertThat(TextUtils.ellipsize(text, p, textWidth, TruncateAt.END).toString()).isEqualTo("");
+ assertThat(TextUtils.ellipsize(text, p, textWidth - 1, TruncateAt.END).toString())
+ .isEqualTo("");
+ assertThat(TextUtils.ellipsize(text, p, -1f, TruncateAt.END).toString()).isEqualTo("");
+ assertThat(TextUtils.ellipsize(text, p, Float.MAX_VALUE, TruncateAt.END).toString())
+ .isEqualTo(text);
+
+ assertThat(TextUtils.ellipsize(text, p, textWidth, TruncateAt.START).toString()).isEqualTo("");
+ assertThat(TextUtils.ellipsize(text, p, textWidth, TruncateAt.MIDDLE).toString()).isEqualTo("");
+
+ try {
+ TextUtils.ellipsize(text, null, textWidth, TruncateAt.MIDDLE);
+ fail("Should throw NullPointerException");
+ } catch (NullPointerException e) {
+ // expected
+ }
+
+ try {
+ TextUtils.ellipsize(null, p, textWidth, TruncateAt.MIDDLE);
+ fail("Should throw NullPointerException");
+ } catch (NullPointerException e) {
+ // expected
+ }
+ }
+}