diff options
author | Gilles Debunne <debunne@google.com> | 2011-03-08 14:22:34 -0800 |
---|---|---|
committer | Gilles Debunne <debunne@google.com> | 2011-03-09 17:17:40 -0800 |
commit | 1e3ac18e7ad03e02819f3e1a89d6a80a2bb7645f (patch) | |
tree | 90212407ae4e340dd01024d93aa8de4a057adeea /core/tests | |
parent | e888b25fb54d2079a784da2b72a950aaafb844dc (diff) | |
download | frameworks_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.java | 119 |
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; + } + } } |