aboutsummaryrefslogtreecommitdiff
path: root/v1/src/main/java/com/xtremelabs/robolectric/shadows/ShadowSpannableString.java
diff options
context:
space:
mode:
Diffstat (limited to 'v1/src/main/java/com/xtremelabs/robolectric/shadows/ShadowSpannableString.java')
-rw-r--r--v1/src/main/java/com/xtremelabs/robolectric/shadows/ShadowSpannableString.java86
1 files changed, 86 insertions, 0 deletions
diff --git a/v1/src/main/java/com/xtremelabs/robolectric/shadows/ShadowSpannableString.java b/v1/src/main/java/com/xtremelabs/robolectric/shadows/ShadowSpannableString.java
new file mode 100644
index 000000000..5f1bafb24
--- /dev/null
+++ b/v1/src/main/java/com/xtremelabs/robolectric/shadows/ShadowSpannableString.java
@@ -0,0 +1,86 @@
+package com.xtremelabs.robolectric.shadows;
+
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import android.text.SpannableString;
+
+import com.xtremelabs.robolectric.internal.Implementation;
+import com.xtremelabs.robolectric.internal.Implements;
+
+@Implements(SpannableString.class)
+public class ShadowSpannableString {
+
+ private CharSequence text = "";
+ private HashMap<Object, SpanHolder> spans = new HashMap<Object, SpanHolder>();
+
+ public void __constructor__(CharSequence source) {
+ text = source;
+ }
+
+ @Implementation
+ public String toString() {
+ return text.toString();
+ }
+
+ @Implementation
+ public void setSpan(Object what, int start, int end, int flags) {
+ spans.put(what, new SpanHolder(start, end, flags) );
+ }
+
+ @Implementation
+ public void removeSpan(Object what) {
+ spans.remove(what);
+ }
+
+ @Implementation
+ public <T> T[] getSpans(int queryStart, int queryEnd, Class<T> kind) {
+ ArrayList<T> retVal = new ArrayList<T>();
+
+ for (Object s : spans.keySet()) {
+ if (kind.isInstance(s)) {
+ SpanHolder h = spans.get(s);
+ if ( (h.start <= queryStart && h.end >= queryStart) ||
+ (h.start <= queryEnd && h.end >= queryEnd) ||
+ (h.start >= queryStart && h.end <= queryEnd) ) {
+ retVal.add((T) s);
+ }
+ }
+ }
+ T[] array = (T[]) Array.newInstance(kind, retVal.size());
+ return retVal.toArray(array);
+ }
+
+ @Implementation
+ public int getSpanStart(Object what) {
+ SpanHolder spanHolder = spans.get(what);
+ if (spanHolder != null) {
+ return spanHolder.start;
+ } else {
+ return -1;
+ }
+ }
+
+ @Implementation
+ public int getSpanEnd(Object what) {
+ SpanHolder spanHolder = spans.get(what);
+ if (spanHolder != null) {
+ return spanHolder.end;
+ } else {
+ return -1;
+ }
+ }
+
+ private class SpanHolder {
+ public int start;
+ public int end;
+ public int flags;
+
+ public SpanHolder(int start, int end, int flags) {
+ this.start = start;
+ this.end = end;
+ this.flags = flags;
+ }
+ }
+}