summaryrefslogtreecommitdiffstats
path: root/core/tests
diff options
context:
space:
mode:
authorYohei Yukawa <yukawa@google.com>2014-07-08 15:29:51 +0900
committerYohei Yukawa <yukawa@google.com>2014-07-10 20:23:26 +0900
commit0b01e7fc58cdde00d8350285a3386c4209b72d78 (patch)
tree4ebf89c73145f668a5cc05929e88f685f4c45137 /core/tests
parent8ecc8e19fa9a34be3c3d247df7df3e505214c738 (diff)
downloadframeworks_base-0b01e7fc58cdde00d8350285a3386c4209b72d78.zip
frameworks_base-0b01e7fc58cdde00d8350285a3386c4209b72d78.tar.gz
frameworks_base-0b01e7fc58cdde00d8350285a3386c4209b72d78.tar.bz2
Polish new IME API for L: CursorAnchorInfo
This CL allows application authors and input method authors to communicate with each other more precisely on the visibility of insertion marker and composing characters. Now we can describe the situation where the coordinates of them are available but they are overlapped by other UI elements. This change is based on feedbacks from internal customers of this preview API. Change-Id: I82eba0e844a6f8b99ba11a68fad272399034cc24 BUG: 16118303
Diffstat (limited to 'core/tests')
-rw-r--r--core/tests/inputmethodtests/src/android/os/CursorAnchorInfoTest.java157
-rw-r--r--core/tests/inputmethodtests/src/android/os/SparseRectFArrayTest.java147
2 files changed, 216 insertions, 88 deletions
diff --git a/core/tests/inputmethodtests/src/android/os/CursorAnchorInfoTest.java b/core/tests/inputmethodtests/src/android/os/CursorAnchorInfoTest.java
index 3d677c6..cc4a7c4 100644
--- a/core/tests/inputmethodtests/src/android/os/CursorAnchorInfoTest.java
+++ b/core/tests/inputmethodtests/src/android/os/CursorAnchorInfoTest.java
@@ -26,17 +26,21 @@ import android.view.inputmethod.CursorAnchorInfo.Builder;
import java.util.Objects;
+import static android.view.inputmethod.CursorAnchorInfo.CHARACTER_RECT_TYPE_FULLY_VISIBLE;
+import static android.view.inputmethod.CursorAnchorInfo.CHARACTER_RECT_TYPE_INVISIBLE;
+import static android.view.inputmethod.CursorAnchorInfo.CHARACTER_RECT_TYPE_NOT_FEASIBLE;
+import static android.view.inputmethod.CursorAnchorInfo.CHARACTER_RECT_TYPE_PARTIALLY_VISIBLE;
+import static android.view.inputmethod.CursorAnchorInfo.CHARACTER_RECT_TYPE_UNSPECIFIED;
+
public class CursorAnchorInfoTest extends InstrumentationTestCase {
- // null represents a character that is invisible, for example because it's overlapped by some
- // other UI elements.
private static final RectF[] MANY_RECTS = new RectF[] {
- null,
+ new RectF(101.0f, 201.0f, 301.0f, 401.0f),
new RectF(102.0f, 202.0f, 302.0f, 402.0f),
new RectF(103.0f, 203.0f, 303.0f, 403.0f),
new RectF(104.0f, 204.0f, 304.0f, 404.0f),
new RectF(105.0f, 205.0f, 305.0f, 405.0f),
new RectF(106.0f, 206.0f, 306.0f, 406.0f),
- null,
+ new RectF(107.0f, 207.0f, 307.0f, 407.0f),
new RectF(108.0f, 208.0f, 308.0f, 408.0f),
new RectF(109.0f, 209.0f, 309.0f, 409.0f),
new RectF(110.0f, 210.0f, 310.0f, 410.0f),
@@ -47,8 +51,29 @@ public class CursorAnchorInfoTest extends InstrumentationTestCase {
new RectF(115.0f, 215.0f, 315.0f, 415.0f),
new RectF(116.0f, 216.0f, 316.0f, 416.0f),
new RectF(117.0f, 217.0f, 317.0f, 417.0f),
- null,
- null,
+ new RectF(118.0f, 218.0f, 318.0f, 418.0f),
+ new RectF(119.0f, 219.0f, 319.0f, 419.0f),
+ };
+ private static final int[] MANY_FLAGS_ARRAY = new int[] {
+ CHARACTER_RECT_TYPE_FULLY_VISIBLE,
+ CHARACTER_RECT_TYPE_INVISIBLE,
+ CHARACTER_RECT_TYPE_PARTIALLY_VISIBLE,
+ CHARACTER_RECT_TYPE_FULLY_VISIBLE,
+ CHARACTER_RECT_TYPE_FULLY_VISIBLE,
+ CHARACTER_RECT_TYPE_FULLY_VISIBLE,
+ CHARACTER_RECT_TYPE_NOT_FEASIBLE,
+ CHARACTER_RECT_TYPE_FULLY_VISIBLE,
+ CHARACTER_RECT_TYPE_FULLY_VISIBLE,
+ CHARACTER_RECT_TYPE_FULLY_VISIBLE,
+ CHARACTER_RECT_TYPE_FULLY_VISIBLE,
+ CHARACTER_RECT_TYPE_FULLY_VISIBLE,
+ CHARACTER_RECT_TYPE_FULLY_VISIBLE,
+ CHARACTER_RECT_TYPE_FULLY_VISIBLE,
+ CHARACTER_RECT_TYPE_FULLY_VISIBLE,
+ CHARACTER_RECT_TYPE_FULLY_VISIBLE,
+ CHARACTER_RECT_TYPE_FULLY_VISIBLE,
+ CHARACTER_RECT_TYPE_NOT_FEASIBLE,
+ CHARACTER_RECT_TYPE_NOT_FEASIBLE,
};
@SmallTest
@@ -57,6 +82,7 @@ public class CursorAnchorInfoTest extends InstrumentationTestCase {
final int SELECTION_END = 40;
final int COMPOSING_TEXT_START = 32;
final String COMPOSING_TEXT = "test";
+ final boolean INSERTION_MARKER_CLIPPED = true;
final float INSERTION_MARKER_HORIZONTAL = 10.5f;
final float INSERTION_MARKER_TOP = 100.1f;
final float INSERTION_MARKER_BASELINE = 110.4f;
@@ -68,13 +94,13 @@ public class CursorAnchorInfoTest extends InstrumentationTestCase {
builder.setSelectionRange(SELECTION_START, SELECTION_END)
.setComposingText(COMPOSING_TEXT_START, COMPOSING_TEXT)
.setInsertionMarkerLocation(INSERTION_MARKER_HORIZONTAL, INSERTION_MARKER_TOP,
- INSERTION_MARKER_BASELINE, INSERTION_MARKER_BOTOM)
+ INSERTION_MARKER_BASELINE, INSERTION_MARKER_BOTOM,
+ INSERTION_MARKER_CLIPPED)
.setMatrix(TRANSFORM_MATRIX);
for (int i = 0; i < MANY_RECTS.length; i++) {
final RectF rect = MANY_RECTS[i];
- if (rect != null) {
- builder.addCharacterRect(i, rect.left, rect.top, rect.right, rect.bottom);
- }
+ final int flags = MANY_FLAGS_ARRAY[i];
+ builder.addCharacterRect(i, rect.left, rect.top, rect.right, rect.bottom, flags);
}
final CursorAnchorInfo info = builder.build();
@@ -82,6 +108,7 @@ public class CursorAnchorInfoTest extends InstrumentationTestCase {
assertEquals(SELECTION_END, info.getSelectionEnd());
assertEquals(COMPOSING_TEXT_START, info.getComposingTextStart());
assertTrue(TextUtils.equals(COMPOSING_TEXT, info.getComposingText()));
+ assertTrue(info.isInsertionMarkerClipped());
assertEquals(INSERTION_MARKER_HORIZONTAL, info.getInsertionMarkerHorizontal());
assertEquals(INSERTION_MARKER_TOP, info.getInsertionMarkerTop());
assertEquals(INSERTION_MARKER_BASELINE, info.getInsertionMarkerBaseline());
@@ -93,6 +120,14 @@ public class CursorAnchorInfoTest extends InstrumentationTestCase {
}
assertNull(info.getCharacterRect(-1));
assertNull(info.getCharacterRect(MANY_RECTS.length + 1));
+ for (int i = 0; i < MANY_FLAGS_ARRAY.length; i++) {
+ final int expectedFlags = MANY_FLAGS_ARRAY[i];
+ assertEquals(expectedFlags, info.getCharacterRectFlags(i));
+ }
+ assertEquals(CHARACTER_RECT_TYPE_UNSPECIFIED,
+ info.getCharacterRectFlags(-1));
+ assertEquals(CHARACTER_RECT_TYPE_UNSPECIFIED,
+ info.getCharacterRectFlags(MANY_RECTS.length + 1));
// Make sure that the builder can reproduce the same object.
final CursorAnchorInfo info2 = builder.build();
@@ -100,6 +135,7 @@ public class CursorAnchorInfoTest extends InstrumentationTestCase {
assertEquals(SELECTION_END, info2.getSelectionEnd());
assertEquals(COMPOSING_TEXT_START, info2.getComposingTextStart());
assertTrue(TextUtils.equals(COMPOSING_TEXT, info2.getComposingText()));
+ assertTrue(info2.isInsertionMarkerClipped());
assertEquals(INSERTION_MARKER_HORIZONTAL, info2.getInsertionMarkerHorizontal());
assertEquals(INSERTION_MARKER_TOP, info2.getInsertionMarkerTop());
assertEquals(INSERTION_MARKER_BASELINE, info2.getInsertionMarkerBaseline());
@@ -111,6 +147,13 @@ public class CursorAnchorInfoTest extends InstrumentationTestCase {
}
assertNull(info2.getCharacterRect(-1));
assertNull(info2.getCharacterRect(MANY_RECTS.length + 1));
+ for (int i = 0; i < MANY_FLAGS_ARRAY.length; i++) {
+ final int expectedFlags = MANY_FLAGS_ARRAY[i];
+ assertEquals(expectedFlags, info2.getCharacterRectFlags(i));
+ }
+ assertEquals(CHARACTER_RECT_TYPE_UNSPECIFIED, info2.getCharacterRectFlags(-1));
+ assertEquals(CHARACTER_RECT_TYPE_UNSPECIFIED,
+ info2.getCharacterRectFlags(MANY_RECTS.length + 1));
assertEquals(info, info2);
assertEquals(info.hashCode(), info2.hashCode());
@@ -120,6 +163,7 @@ public class CursorAnchorInfoTest extends InstrumentationTestCase {
assertEquals(SELECTION_END, info3.getSelectionEnd());
assertEquals(COMPOSING_TEXT_START, info3.getComposingTextStart());
assertTrue(TextUtils.equals(COMPOSING_TEXT, info3.getComposingText()));
+ assertTrue(info3.isInsertionMarkerClipped());
assertEquals(INSERTION_MARKER_HORIZONTAL, info3.getInsertionMarkerHorizontal());
assertEquals(INSERTION_MARKER_TOP, info3.getInsertionMarkerTop());
assertEquals(INSERTION_MARKER_BASELINE, info3.getInsertionMarkerBaseline());
@@ -131,6 +175,13 @@ public class CursorAnchorInfoTest extends InstrumentationTestCase {
}
assertNull(info3.getCharacterRect(-1));
assertNull(info3.getCharacterRect(MANY_RECTS.length + 1));
+ for (int i = 0; i < MANY_FLAGS_ARRAY.length; i++) {
+ final int expectedFlags = MANY_FLAGS_ARRAY[i];
+ assertEquals(expectedFlags, info3.getCharacterRectFlags(i));
+ }
+ assertEquals(CHARACTER_RECT_TYPE_UNSPECIFIED, info3.getCharacterRectFlags(-1));
+ assertEquals(CHARACTER_RECT_TYPE_UNSPECIFIED,
+ info3.getCharacterRectFlags(MANY_RECTS.length + 1));
assertEquals(info.hashCode(), info3.hashCode());
builder.reset();
@@ -139,6 +190,7 @@ public class CursorAnchorInfoTest extends InstrumentationTestCase {
assertEquals(-1, uninitializedInfo.getSelectionEnd());
assertEquals(-1, uninitializedInfo.getComposingTextStart());
assertNull(uninitializedInfo.getComposingText());
+ assertFalse(uninitializedInfo.isInsertionMarkerClipped());
assertEquals(Float.NaN, uninitializedInfo.getInsertionMarkerHorizontal());
assertEquals(Float.NaN, uninitializedInfo.getInsertionMarkerTop());
assertEquals(Float.NaN, uninitializedInfo.getInsertionMarkerBaseline());
@@ -166,6 +218,7 @@ public class CursorAnchorInfoTest extends InstrumentationTestCase {
final int SELECTION_END1 = 7;
final String COMPOSING_TEXT1 = "0123456789";
final int COMPOSING_TEXT_START1 = 0;
+ final boolean INSERTION_MARKER_CLIPPED1 = true;
final float INSERTION_MARKER_HORIZONTAL1 = 10.5f;
final float INSERTION_MARKER_TOP1 = 100.1f;
final float INSERTION_MARKER_BASELINE1 = 110.4f;
@@ -174,6 +227,7 @@ public class CursorAnchorInfoTest extends InstrumentationTestCase {
final int SELECTION_END2 = 8;
final String COMPOSING_TEXT2 = "9876543210";
final int COMPOSING_TEXT_START2 = 3;
+ final boolean INSERTION_MARKER_CLIPPED2 = false;
final float INSERTION_MARKER_HORIZONTAL2 = 14.5f;
final float INSERTION_MARKER_TOP2 = 200.1f;
final float INSERTION_MARKER_BASELINE2 = 210.4f;
@@ -210,9 +264,11 @@ public class CursorAnchorInfoTest extends InstrumentationTestCase {
// For insertion marker locations, {@link Float#NaN} is treated as if it was a number.
assertEquals(
new Builder().setMatrix(MATRIX1).setInsertionMarkerLocation(
- Float.NaN, Float.NaN, Float.NaN, Float.NaN).build(),
+ Float.NaN, Float.NaN, Float.NaN, Float.NaN,
+ INSERTION_MARKER_CLIPPED1).build(),
new Builder().setMatrix(MATRIX1).setInsertionMarkerLocation(
- Float.NaN, Float.NaN, Float.NaN, Float.NaN).build());
+ Float.NaN, Float.NaN, Float.NaN, Float.NaN,
+ INSERTION_MARKER_CLIPPED1).build());
// Check Matrix.
assertEquals(
@@ -233,52 +289,75 @@ public class CursorAnchorInfoTest extends InstrumentationTestCase {
assertEquals(
new Builder().setMatrix(MATRIX1).setInsertionMarkerLocation(
INSERTION_MARKER_HORIZONTAL1, INSERTION_MARKER_TOP1,
- INSERTION_MARKER_BASELINE1, INSERTION_MARKER_BOTOM1).build(),
+ INSERTION_MARKER_BASELINE1, INSERTION_MARKER_BOTOM1,
+ INSERTION_MARKER_CLIPPED1).build(),
new Builder().setMatrix(MATRIX1).setInsertionMarkerLocation(
INSERTION_MARKER_HORIZONTAL1, INSERTION_MARKER_TOP1,
- INSERTION_MARKER_BASELINE1, INSERTION_MARKER_BOTOM1).build());
+ INSERTION_MARKER_BASELINE1, INSERTION_MARKER_BOTOM1,
+ INSERTION_MARKER_CLIPPED1).build());
assertNotEquals(
new Builder().setMatrix(MATRIX1).setInsertionMarkerLocation(
Float.NaN, INSERTION_MARKER_TOP1,
- INSERTION_MARKER_BASELINE1, INSERTION_MARKER_BOTOM1).build(),
+ INSERTION_MARKER_BASELINE1, INSERTION_MARKER_BOTOM1,
+ INSERTION_MARKER_CLIPPED1).build(),
new Builder().setMatrix(MATRIX1).setInsertionMarkerLocation(
INSERTION_MARKER_HORIZONTAL1, INSERTION_MARKER_TOP1,
- INSERTION_MARKER_BASELINE1, INSERTION_MARKER_BOTOM1).build());
+ INSERTION_MARKER_BASELINE1, INSERTION_MARKER_BOTOM1,
+ INSERTION_MARKER_CLIPPED1).build());
assertNotEquals(
new Builder().setMatrix(MATRIX1).setInsertionMarkerLocation(
INSERTION_MARKER_HORIZONTAL1, INSERTION_MARKER_TOP1,
- INSERTION_MARKER_BASELINE1, INSERTION_MARKER_BOTOM1).build(),
+ INSERTION_MARKER_BASELINE1, INSERTION_MARKER_BOTOM1,
+ INSERTION_MARKER_CLIPPED1).build(),
new Builder().setMatrix(MATRIX1).setInsertionMarkerLocation(
INSERTION_MARKER_HORIZONTAL2, INSERTION_MARKER_TOP1,
- INSERTION_MARKER_BASELINE1, INSERTION_MARKER_BOTOM1).build());
+ INSERTION_MARKER_BASELINE1, INSERTION_MARKER_BOTOM1,
+ INSERTION_MARKER_CLIPPED1).build());
assertNotEquals(
new Builder().setMatrix(MATRIX1).setInsertionMarkerLocation(
INSERTION_MARKER_HORIZONTAL1, INSERTION_MARKER_TOP1,
- INSERTION_MARKER_BASELINE1, INSERTION_MARKER_BOTOM1).build(),
+ INSERTION_MARKER_BASELINE1, INSERTION_MARKER_BOTOM1,
+ INSERTION_MARKER_CLIPPED1).build(),
new Builder().setMatrix(MATRIX1).setInsertionMarkerLocation(
INSERTION_MARKER_HORIZONTAL1, INSERTION_MARKER_TOP2,
- INSERTION_MARKER_BASELINE1, INSERTION_MARKER_BOTOM1).build());
+ INSERTION_MARKER_BASELINE1, INSERTION_MARKER_BOTOM1,
+ INSERTION_MARKER_CLIPPED1).build());
assertNotEquals(
new Builder().setMatrix(MATRIX1).setInsertionMarkerLocation(
INSERTION_MARKER_HORIZONTAL1, INSERTION_MARKER_TOP1,
- INSERTION_MARKER_BASELINE1, INSERTION_MARKER_BOTOM1).build(),
+ INSERTION_MARKER_BASELINE1, INSERTION_MARKER_BOTOM1,
+ INSERTION_MARKER_CLIPPED1).build(),
new Builder().setMatrix(MATRIX1).setInsertionMarkerLocation(
INSERTION_MARKER_HORIZONTAL1, INSERTION_MARKER_TOP1,
- INSERTION_MARKER_BASELINE2, INSERTION_MARKER_BOTOM1).build());
+ INSERTION_MARKER_BASELINE2, INSERTION_MARKER_BOTOM1,
+ INSERTION_MARKER_CLIPPED1).build());
assertNotEquals(
new Builder().setMatrix(MATRIX1).setInsertionMarkerLocation(
INSERTION_MARKER_HORIZONTAL1, INSERTION_MARKER_TOP1,
- INSERTION_MARKER_BASELINE1, INSERTION_MARKER_BOTOM1).build(),
+ INSERTION_MARKER_BASELINE1, INSERTION_MARKER_BOTOM1,
+ INSERTION_MARKER_CLIPPED1).build(),
new Builder().setMatrix(MATRIX1).setInsertionMarkerLocation(
INSERTION_MARKER_HORIZONTAL2, INSERTION_MARKER_TOP1,
- INSERTION_MARKER_BASELINE1, INSERTION_MARKER_BOTOM1).build());
+ INSERTION_MARKER_BASELINE1, INSERTION_MARKER_BOTOM1,
+ INSERTION_MARKER_CLIPPED1).build());
+ assertNotEquals(
+ new Builder().setMatrix(MATRIX1).setInsertionMarkerLocation(
+ INSERTION_MARKER_HORIZONTAL1, INSERTION_MARKER_TOP1,
+ INSERTION_MARKER_BASELINE1, INSERTION_MARKER_BOTOM1,
+ INSERTION_MARKER_CLIPPED1).build(),
+ new Builder().setMatrix(MATRIX1).setInsertionMarkerLocation(
+ INSERTION_MARKER_HORIZONTAL1, INSERTION_MARKER_TOP1,
+ INSERTION_MARKER_BASELINE1, INSERTION_MARKER_BOTOM2,
+ INSERTION_MARKER_CLIPPED1).build());
assertNotEquals(
new Builder().setMatrix(MATRIX1).setInsertionMarkerLocation(
INSERTION_MARKER_HORIZONTAL1, INSERTION_MARKER_TOP1,
- INSERTION_MARKER_BASELINE1, INSERTION_MARKER_BOTOM1).build(),
+ INSERTION_MARKER_BASELINE1, INSERTION_MARKER_BOTOM1,
+ INSERTION_MARKER_CLIPPED1).build(),
new Builder().setMatrix(MATRIX1).setInsertionMarkerLocation(
INSERTION_MARKER_HORIZONTAL1, INSERTION_MARKER_TOP1,
- INSERTION_MARKER_BASELINE1, INSERTION_MARKER_BOTOM2).build());
+ INSERTION_MARKER_BASELINE1, INSERTION_MARKER_BOTOM1,
+ INSERTION_MARKER_CLIPPED2).build());
}
@SmallTest
@@ -315,6 +394,7 @@ public class CursorAnchorInfoTest extends InstrumentationTestCase {
final int SELECTION_END = 40;
final int COMPOSING_TEXT_START = 32;
final String COMPOSING_TEXT = "test";
+ final boolean INSERTION_MARKER_CLIPPED = true;
final float INSERTION_MARKER_HORIZONTAL = 10.5f;
final float INSERTION_MARKER_TOP = 100.1f;
final float INSERTION_MARKER_BASELINE = 110.4f;
@@ -330,25 +410,25 @@ public class CursorAnchorInfoTest extends InstrumentationTestCase {
try {
// Should succeed as coordinate transformation matrix is not required if no
// positional information is specified.
- new Builder().build();
+ builder.build();
} catch (IllegalArgumentException ex) {
assertTrue(false);
}
builder.setInsertionMarkerLocation(INSERTION_MARKER_HORIZONTAL, INSERTION_MARKER_TOP,
- INSERTION_MARKER_BASELINE, INSERTION_MARKER_BOTOM);
+ INSERTION_MARKER_BASELINE, INSERTION_MARKER_BOTOM, INSERTION_MARKER_CLIPPED);
try {
// Coordinate transformation matrix is required if no positional information is
// specified.
- new Builder().build();
+ builder.build();
+ assertTrue(false);
} catch (IllegalArgumentException ex) {
- assertTrue(true);
}
builder.setMatrix(TRANSFORM_MATRIX);
try {
// Should succeed as coordinate transformation matrix is required.
- new Builder().build();
+ builder.build();
} catch (IllegalArgumentException ex) {
assertTrue(false);
}
@@ -358,12 +438,21 @@ public class CursorAnchorInfoTest extends InstrumentationTestCase {
}
@SmallTest
- public void testBuilderAdd() throws Exception {
+ public void testBuilderAddCharacterRect() throws Exception {
// A negative index should be rejected.
try {
- new Builder().addCharacterRect(-1, 0.0f, 0.0f, 0.0f, 0.0f);
+ new Builder().addCharacterRect(-1, 0.0f, 0.0f, 0.0f, 0.0f,
+ CHARACTER_RECT_TYPE_FULLY_VISIBLE);
+ assertTrue(false);
+ } catch (IllegalArgumentException ex) {
+ }
+
+ // CHARACTER_RECT_TYPE_UNSPECIFIED is not allowed.
+ try {
+ new Builder().addCharacterRect(0, 0.0f, 0.0f, 0.0f, 0.0f,
+ CHARACTER_RECT_TYPE_UNSPECIFIED);
+ assertTrue(false);
} catch (IllegalArgumentException ex) {
- assertTrue(true);
}
}
diff --git a/core/tests/inputmethodtests/src/android/os/SparseRectFArrayTest.java b/core/tests/inputmethodtests/src/android/os/SparseRectFArrayTest.java
index fae7230..47b0d2a 100644
--- a/core/tests/inputmethodtests/src/android/os/SparseRectFArrayTest.java
+++ b/core/tests/inputmethodtests/src/android/os/SparseRectFArrayTest.java
@@ -52,14 +52,22 @@ public class SparseRectFArrayTest extends InstrumentationTestCase {
@SmallTest
public void testBuilder() throws Exception {
final RectF TEMP_RECT = new RectF(10.0f, 20.0f, 30.0f, 40.0f);
+ final int TEMP_FLAGS = 0x1234;
final SparseRectFArrayBuilder builder = new SparseRectFArrayBuilder();
- builder.append(100, TEMP_RECT.left, TEMP_RECT.top, TEMP_RECT.right, TEMP_RECT.bottom);
+ builder.append(100, TEMP_RECT.left, TEMP_RECT.top, TEMP_RECT.right, TEMP_RECT.bottom,
+ TEMP_FLAGS);
assertNull(builder.build().get(-1));
assertNull(builder.build().get(0));
assertNull(builder.build().get(99));
+ assertEquals(0, builder.build().getFlags(99, 0 /* valueIfKeyNotFound */));
+ assertEquals(1, builder.build().getFlags(99, 1 /* valueIfKeyNotFound */));
assertEquals(TEMP_RECT, builder.build().get(100));
+ assertEquals(TEMP_FLAGS, builder.build().getFlags(100, 0 /* valueIfKeyNotFound */));
+ assertEquals(TEMP_FLAGS, builder.build().getFlags(100, 1 /* valueIfKeyNotFound */));
assertNull(builder.build().get(101));
+ assertEquals(0, builder.build().getFlags(101, 0 /* valueIfKeyNotFound */));
+ assertEquals(1, builder.build().getFlags(101, 1 /* valueIfKeyNotFound */));
// Test if {@link SparseRectFArrayBuilder#reset} resets its internal state.
builder.reset();
@@ -69,28 +77,49 @@ public class SparseRectFArrayTest extends InstrumentationTestCase {
for (int i = 0; i < MANY_RECTS.length; i++) {
final RectF rect = MANY_RECTS[i];
if (rect != null) {
- builder.append(i, rect.left, rect.top, rect.right, rect.bottom);
+ builder.append(i, rect.left, rect.top, rect.right, rect.bottom, i);
}
}
final SparseRectFArray array = builder.build();
for (int i = 0; i < MANY_RECTS.length; i++) {
- final RectF rect = MANY_RECTS[i];
- assertEquals(rect, array.get(i));
+ final RectF expectedRect = MANY_RECTS[i];
+ assertEquals(expectedRect, array.get(i));
+ if (expectedRect != null) {
+ assertEquals(i, array.getFlags(i, 0x1234 /* valueIfKeyNotFound */));
+ assertEquals(i, array.getFlags(i, 0x4321 /* valueIfKeyNotFound */));
+ } else {
+ assertEquals(0x1234, array.getFlags(i, 0x1234 /* valueIfKeyNotFound */));
+ assertEquals(0x4321, array.getFlags(i, 0x4321 /* valueIfKeyNotFound */));
+ }
}
// Make sure the builder reproduces an equivalent object.
final SparseRectFArray array2 = builder.build();
for (int i = 0; i < MANY_RECTS.length; i++) {
- final RectF rect = MANY_RECTS[i];
- assertEquals(rect, array2.get(i));
+ final RectF expectedRect = MANY_RECTS[i];
+ assertEquals(expectedRect, array2.get(i));
+ if (expectedRect != null) {
+ assertEquals(i, array2.getFlags(i, 0x1234 /* valueIfKeyNotFound */));
+ assertEquals(i, array2.getFlags(i, 0x4321 /* valueIfKeyNotFound */));
+ } else {
+ assertEquals(0x1234, array2.getFlags(i, 0x1234 /* valueIfKeyNotFound */));
+ assertEquals(0x4321, array2.getFlags(i, 0x4321 /* valueIfKeyNotFound */));
+ }
}
assertEqualRects(array, array2);
// Make sure the instance can be marshaled via {@link Parcel}.
final SparseRectFArray array3 = cloneViaParcel(array);
for (int i = 0; i < MANY_RECTS.length; i++) {
- final RectF rect = MANY_RECTS[i];
- assertEquals(rect, array3.get(i));
+ final RectF expectedRect = MANY_RECTS[i];
+ assertEquals(expectedRect, array3.get(i));
+ if (expectedRect != null) {
+ assertEquals(i, array3.getFlags(i, 0x1234 /* valueIfKeyNotFound */));
+ assertEquals(i, array3.getFlags(i, 0x4321 /* valueIfKeyNotFound */));
+ } else {
+ assertEquals(0x1234, array3.getFlags(i, 0x1234 /* valueIfKeyNotFound */));
+ assertEquals(0x4321, array3.getFlags(i, 0x4321 /* valueIfKeyNotFound */));
+ }
}
assertEqualRects(array, array3);
@@ -106,87 +135,93 @@ public class SparseRectFArrayTest extends InstrumentationTestCase {
new SparseRectFArrayBuilder().build());
assertEqualRects(
- new SparseRectFArrayBuilder().append(100, 1.0f, 2.0f, 3.0f, 4.0f).build(),
- new SparseRectFArrayBuilder().append(100, 1.0f, 2.0f, 3.0f, 4.0f).build());
+ new SparseRectFArrayBuilder().append(100, 1.0f, 2.0f, 3.0f, 4.0f, 1).build(),
+ new SparseRectFArrayBuilder().append(100, 1.0f, 2.0f, 3.0f, 4.0f, 1).build());
+ assertEqualRects(
+ new SparseRectFArrayBuilder().append(100, 1.0f, 2.0f, 3.0f, 4.0f, 0).build(),
+ new SparseRectFArrayBuilder().append(100, 1.0f, 2.0f, 3.0f, 4.0f, 0).build());
+ assertNotEqualRects(
+ new SparseRectFArrayBuilder().append(100, 1.0f, 2.0f, 3.0f, 4.0f, 0).build(),
+ new SparseRectFArrayBuilder().append(100, 1.0f, 2.0f, 3.0f, 4.0f, 1).build());
assertNotEqualRects(
- new SparseRectFArrayBuilder().append(100, 1.0f, 2.0f, 3.0f, 4.0f).build(),
- new SparseRectFArrayBuilder().append(100, 2.0f, 2.0f, 3.0f, 4.0f).build());
+ new SparseRectFArrayBuilder().append(100, 1.0f, 2.0f, 3.0f, 4.0f, 1).build(),
+ new SparseRectFArrayBuilder().append(100, 2.0f, 2.0f, 3.0f, 4.0f, 1).build());
assertNotEqualRects(
- new SparseRectFArrayBuilder().append(100, 1.0f, 2.0f, 3.0f, 4.0f).build(),
- new SparseRectFArrayBuilder().append(101, 1.0f, 2.0f, 3.0f, 4.0f).build());
+ new SparseRectFArrayBuilder().append(100, 1.0f, 2.0f, 3.0f, 4.0f, 1).build(),
+ new SparseRectFArrayBuilder().append(101, 1.0f, 2.0f, 3.0f, 4.0f, 1).build());
assertEqualRects(
new SparseRectFArrayBuilder()
- .append(100, 1.0f, 2.0f, 3.0f, 4.0f)
- .append(101, 0.0f, 0.0f, 0.0f, 0.0f).build(),
+ .append(100, 1.0f, 2.0f, 3.0f, 4.0f, 0)
+ .append(101, 0.0f, 0.0f, 0.0f, 0.0f, 0).build(),
new SparseRectFArrayBuilder()
- .append(100, 1.0f, 2.0f, 3.0f, 4.0f)
- .append(101, 0.0f, 0.0f, 0.0f, 0.0f).build());
+ .append(100, 1.0f, 2.0f, 3.0f, 4.0f, 0)
+ .append(101, 0.0f, 0.0f, 0.0f, 0.0f, 0).build());
assertNotEqualRects(
new SparseRectFArrayBuilder()
- .append(100, 1.0f, 2.0f, 3.0f, 4.0f).build(),
+ .append(100, 1.0f, 2.0f, 3.0f, 4.0f, 0).build(),
new SparseRectFArrayBuilder()
- .append(100, 1.0f, 2.0f, 3.0f, 4.0f)
- .append(101, 0.0f, 0.0f, 0.0f, 0.0f).build());
+ .append(100, 1.0f, 2.0f, 3.0f, 4.0f, 0)
+ .append(101, 0.0f, 0.0f, 0.0f, 0.0f, 0).build());
assertNotEqualRects(
new SparseRectFArrayBuilder()
- .append(100, 1.0f, 2.0f, 3.0f, 4.0f)
- .append(101, 0.0f, 0.0f, 0.0f, 0.0f).build(),
+ .append(100, 1.0f, 2.0f, 3.0f, 4.0f, 0)
+ .append(101, 0.0f, 0.0f, 0.0f, 0.0f, 0).build(),
new SparseRectFArrayBuilder()
- .append(100, 1.0f, 2.0f, 3.0f, 4.0f).build());
+ .append(100, 1.0f, 2.0f, 3.0f, 4.0f, 0).build());
assertNotEqualRects(
new SparseRectFArrayBuilder()
- .append(100, 1.0f, 2.0f, 3.0f, 4.0f)
- .append(101, 0.0f, 0.0f, 0.0f, 0.0f).build(),
+ .append(100, 1.0f, 2.0f, 3.0f, 4.0f, 0)
+ .append(101, 0.0f, 0.0f, 0.0f, 0.0f, 0).build(),
new SparseRectFArrayBuilder()
- .append(100, 1.0f, 2.0f, 3.0f, 4.0f)
- .append(101, 1.0f, 0.0f, 0.0f, 0.0f).build());
+ .append(100, 1.0f, 2.0f, 3.0f, 4.0f, 0)
+ .append(101, 1.0f, 0.0f, 0.0f, 0.0f, 0).build());
assertNotEqualRects(
new SparseRectFArrayBuilder()
- .append(100, 1.0f, 2.0f, 3.0f, 4.0f)
- .append(101, 1.0f, 0.0f, 0.0f, 0.0f).build(),
+ .append(100, 1.0f, 2.0f, 3.0f, 4.0f, 0)
+ .append(101, 1.0f, 0.0f, 0.0f, 0.0f, 0).build(),
new SparseRectFArrayBuilder()
- .append(100, 1.0f, 2.0f, 3.0f, 4.0f)
- .append(101, 0.0f, 0.0f, 0.0f, 0.0f).build());
+ .append(100, 1.0f, 2.0f, 3.0f, 4.0f, 0)
+ .append(101, 0.0f, 0.0f, 0.0f, 0.0f, 0).build());
assertNotEqualRects(
new SparseRectFArrayBuilder()
- .append(100, 1.0f, 2.0f, 3.0f, 4.0f)
- .append(101, 0.0f, 0.0f, 0.0f, 0.0f).build(),
+ .append(100, 1.0f, 2.0f, 3.0f, 4.0f, 0)
+ .append(101, 0.0f, 0.0f, 0.0f, 0.0f, 0).build(),
new SparseRectFArrayBuilder()
- .append(100, 1.0f, 2.0f, 3.0f, 4.0f)
- .append(102, 0.0f, 0.0f, 0.0f, 0.0f).build());
+ .append(100, 1.0f, 2.0f, 3.0f, 4.0f, 0)
+ .append(102, 0.0f, 0.0f, 0.0f, 0.0f, 0).build());
assertEqualRects(
new SparseRectFArrayBuilder()
- .append(1, 1.0f, 2.0f, 3.0f, 4.0f)
- .append(1000, 0.0f, 0.0f, 0.0f, 0.0f)
- .append(100000000, 0.0f, 0.0f, 0.0f, 0.0f)
+ .append(1, 1.0f, 2.0f, 3.0f, 4.0f, 0)
+ .append(1000, 0.0f, 0.0f, 0.0f, 0.0f, 0)
+ .append(100000000, 0.0f, 0.0f, 0.0f, 0.0f, 0)
.build(),
new SparseRectFArrayBuilder()
- .append(1, 1.0f, 2.0f, 3.0f, 4.0f)
- .append(1000, 0.0f, 0.0f, 0.0f, 0.0f)
- .append(100000000, 0.0f, 0.0f, 0.0f, 0.0f)
+ .append(1, 1.0f, 2.0f, 3.0f, 4.0f, 0)
+ .append(1000, 0.0f, 0.0f, 0.0f, 0.0f, 0)
+ .append(100000000, 0.0f, 0.0f, 0.0f, 0.0f, 0)
.build());
assertNotEqualRects(
new SparseRectFArrayBuilder()
- .append(1, 1.0f, 2.0f, 3.0f, 4.0f)
- .append(1000, 0.0f, 0.0f, 0.0f, 0.0f)
- .append(100000000, 0.0f, 0.0f, 0.0f, 0.0f)
+ .append(1, 1.0f, 2.0f, 3.0f, 4.0f, 0)
+ .append(1000, 0.0f, 0.0f, 0.0f, 0.0f, 0)
+ .append(100000000, 0.0f, 0.0f, 0.0f, 0.0f, 0)
.build(),
new SparseRectFArrayBuilder()
- .append(1, 1.0f, 2.0f, 3.0f, 4.0f)
+ .append(1, 1.0f, 2.0f, 3.0f, 4.0f, 0)
.build());
assertNotEqualRects(
new SparseRectFArrayBuilder()
- .append(1, 1.0f, 2.0f, 3.0f, 4.0f)
- .append(1000, 0.0f, 0.0f, 0.0f, 0.0f)
- .append(100000000, 0.0f, 0.0f, 0.0f, 0.0f)
+ .append(1, 1.0f, 2.0f, 3.0f, 4.0f, 0)
+ .append(1000, 0.0f, 0.0f, 0.0f, 0.0f, 0)
+ .append(100000000, 0.0f, 0.0f, 0.0f, 0.0f, 0)
.build(),
new SparseRectFArrayBuilder()
- .append(1, 1.0f, 2.0f, 3.0f, 4.0f)
- .append(1000, 1.0f, 0.0f, 0.0f, 0.0f)
- .append(100000000, 0.0f, 0.0f, 0.0f, 0.0f)
+ .append(1, 1.0f, 2.0f, 3.0f, 4.0f, 0)
+ .append(1000, 1.0f, 0.0f, 0.0f, 0.0f, 0)
+ .append(100000000, 0.0f, 0.0f, 0.0f, 0.0f, 0)
.build());
}
@@ -194,13 +229,17 @@ public class SparseRectFArrayTest extends InstrumentationTestCase {
public void testBuilderAppend() throws Exception {
// Key should be appended in ascending order.
try {
- new SparseRectFArrayBuilder().append(10, 0, 0, 0, 0).append(0, 1, 2, 3, 4);
+ new SparseRectFArrayBuilder()
+ .append(10, 0.0f, 0.0f, 0.0f, 0.0f, 0)
+ .append(0, 1.0f, 2.0f, 3.0f, 4.0f, 0);
} catch (IllegalArgumentException ex) {
assertTrue(true);
}
try {
- new SparseRectFArrayBuilder().append(10, 0, 0, 0, 0).append(10, 1, 2, 3, 4);
+ new SparseRectFArrayBuilder()
+ .append(10, 0.0f, 0.0f, 0.0f, 0.0f, 0)
+ .append(10, 1.0f, 2.0f, 3.0f, 4.0f, 0);
} catch (IllegalArgumentException ex) {
assertTrue(true);
}