summaryrefslogtreecommitdiffstats
path: root/core/tests
diff options
context:
space:
mode:
authorGilles Debunne <debunne@google.com>2011-03-08 14:22:34 -0800
committerGilles Debunne <debunne@google.com>2011-03-09 17:17:40 -0800
commit1e3ac18e7ad03e02819f3e1a89d6a80a2bb7645f (patch)
tree90212407ae4e340dd01024d93aa8de4a057adeea /core/tests
parente888b25fb54d2079a784da2b72a950aaafb844dc (diff)
downloadframeworks_base-1e3ac18e7ad03e02819f3e1a89d6a80a2bb7645f.zip
frameworks_base-1e3ac18e7ad03e02819f3e1a89d6a80a2bb7645f.tar.gz
frameworks_base-1e3ac18e7ad03e02819f3e1a89d6a80a2bb7645f.tar.bz2
Empty spans are not considered in text layout/rendering process.
Bug http://code.google.com/p/android/issues/detail?id=14786 Empty spans are affecting the text before and after them. See the comment in TextUtils.removeEmptySpans for details. Change-Id: I40376c32fd56a17efde6219f9b2593e4b4ab1ba1
Diffstat (limited to 'core/tests')
-rw-r--r--core/tests/coretests/src/android/text/TextUtilsTest.java119
1 files changed, 106 insertions, 13 deletions
diff --git a/core/tests/coretests/src/android/text/TextUtilsTest.java b/core/tests/coretests/src/android/text/TextUtilsTest.java
index e111662..e8e56de 100644
--- a/core/tests/coretests/src/android/text/TextUtilsTest.java
+++ b/core/tests/coretests/src/android/text/TextUtilsTest.java
@@ -16,28 +16,20 @@
package android.text;
-import android.graphics.Paint;
+import com.google.android.collect.Lists;
+
+import android.test.MoreAsserts;
import android.test.suitebuilder.annotation.LargeTest;
import android.test.suitebuilder.annotation.SmallTest;
-import android.text.Spannable;
-import android.text.SpannableString;
-import android.text.Spanned;
-import android.text.SpannedString;
-import android.text.TextPaint;
-import android.text.TextUtils;
import android.text.style.StyleSpan;
import android.text.util.Rfc822Token;
import android.text.util.Rfc822Tokenizer;
-import android.test.MoreAsserts;
-import com.google.android.collect.Lists;
-import com.google.android.collect.Maps;
+import java.util.ArrayList;
+import java.util.List;
import junit.framework.TestCase;
-import java.util.List;
-import java.util.Map;
-
/**
* TextUtilsTest tests {@link TextUtils}.
*/
@@ -354,6 +346,7 @@ public class TextUtilsTest extends TestCase {
return mString.charAt(off);
}
+ @Override
public String toString() {
return mString.toString();
}
@@ -362,4 +355,104 @@ public class TextUtilsTest extends TestCase {
return new Wrapper(mString.subSequence(start, end));
}
}
+
+ @LargeTest
+ public void testRemoveEmptySpans() {
+ MockSpanned spanned = new MockSpanned();
+
+ spanned.test();
+ spanned.addSpan().test();
+ spanned.addSpan().test();
+ spanned.addSpan().test();
+ spanned.addEmptySpan().test();
+ spanned.addSpan().test();
+ spanned.addEmptySpan().test();
+ spanned.addEmptySpan().test();
+ spanned.addSpan().test();
+
+ spanned.clear();
+ spanned.addEmptySpan().test();
+ spanned.addEmptySpan().test();
+ spanned.addEmptySpan().test();
+ spanned.addSpan().test();
+ spanned.addEmptySpan().test();
+ spanned.addSpan().test();
+
+ spanned.clear();
+ spanned.addSpan().test();
+ spanned.addEmptySpan().test();
+ spanned.addSpan().test();
+ spanned.addEmptySpan().test();
+ spanned.addSpan().test();
+ spanned.addSpan().test();
+ }
+
+ protected static class MockSpanned implements Spanned {
+
+ private List<Object> allSpans = new ArrayList<Object>();
+ private List<Object> nonEmptySpans = new ArrayList<Object>();
+
+ public void clear() {
+ allSpans.clear();
+ nonEmptySpans.clear();
+ }
+
+ public MockSpanned addSpan() {
+ Object o = new Object();
+ allSpans.add(o);
+ nonEmptySpans.add(o);
+ return this;
+ }
+
+ public MockSpanned addEmptySpan() {
+ Object o = new Object();
+ allSpans.add(o);
+ return this;
+ }
+
+ public void test() {
+ Object[] nonEmpty = TextUtils.removeEmptySpans(allSpans.toArray(), this, Object.class);
+ assertEquals("Mismatched array size", nonEmptySpans.size(), nonEmpty.length);
+ for (int i=0; i<nonEmpty.length; i++) {
+ assertEquals("Span differ", nonEmptySpans.get(i), nonEmpty[i]);
+ }
+ }
+
+ public char charAt(int arg0) {
+ return 0;
+ }
+
+ public int length() {
+ return 0;
+ }
+
+ public CharSequence subSequence(int arg0, int arg1) {
+ return null;
+ }
+
+ @Override
+ public <T> T[] getSpans(int start, int end, Class<T> type) {
+ return null;
+ }
+
+ @Override
+ public int getSpanStart(Object tag) {
+ return 0;
+ }
+
+ @Override
+ public int getSpanEnd(Object tag) {
+ return nonEmptySpans.contains(tag) ? 1 : 0;
+ }
+
+ @Override
+ public int getSpanFlags(Object tag) {
+ return 0;
+ }
+
+ @Override
+ public int nextSpanTransition(int start, int limit, Class type) {
+ return 0;
+ }
+ }
}