RequestFocusTestpublic class RequestFocusTest extends android.test.ActivityInstrumentationTestCase2 {@link RequestFocusTest} is set up to exercise cases where the views that
have focus become invisible or GONE. |
Fields Summary |
---|
private android.widget.Button | mTopLeftButton | private android.widget.Button | mBottomLeftButton | private android.widget.Button | mTopRightButton | private android.widget.Button | mBottomRightButton | private android.os.Handler | mHandler |
Constructors Summary |
---|
public RequestFocusTest()
super(RequestFocus.class);
|
Methods Summary |
---|
public void | setUp()
super.setUp();
final RequestFocus a = getActivity();
mHandler = a.getHandler();
mTopLeftButton = (Button) a.findViewById(R.id.topLeftButton);
mBottomLeftButton = (Button) a.findViewById(R.id.bottomLeftButton);
mTopRightButton = (Button) a.findViewById(R.id.topRightButton);
mBottomRightButton = (Button) a.findViewById(R.id.bottomRightButton);
| public void | testOnFocusChangeCallbackOrderWhenClearingFocusOfFirstFocusable()This tests checks the case in which the first focusable View clears focus.
In such a case the framework tries to give the focus to another View starting
from the top. Hence, the framework will try to give focus to the view that
wants to clear its focus.
// Get the first focusable.
Button clearingFocusButton = mTopLeftButton;
Button gainingFocusButton = mTopLeftButton;
// Make sure that the clearing focus View is the first focusable.
View focusCandidate = clearingFocusButton.getRootView().getParent().focusSearch(null,
View.FOCUS_FORWARD);
assertSame("The clearing focus button is the first focusable.",
clearingFocusButton, focusCandidate);
assertSame("The gaining focus button is the first focusable.",
gainingFocusButton, focusCandidate);
// Focus the clearing focus button.
clearingFocusButton.requestFocus();
assertTrue(clearingFocusButton.hasFocus());
// Register the invocation order checker.
CombinedListeners mock = mock(CombinedListeners.class);
clearingFocusButton.setOnFocusChangeListener(mock);
gainingFocusButton.setOnFocusChangeListener(mock);
clearingFocusButton.getViewTreeObserver().addOnGlobalFocusChangeListener(mock);
// Try to clear focus.
clearingFocusButton.clearFocus();
// Check that no callback was invoked since focus did not move.
InOrder inOrder = inOrder(mock);
inOrder.verify(mock).onFocusChange(clearingFocusButton, false);
inOrder.verify(mock).onGlobalFocusChanged(clearingFocusButton, gainingFocusButton);
inOrder.verify(mock).onFocusChange(gainingFocusButton, true);
| public void | testOnFocusChangeCallbackOrderWhenClearingFocusOfNotFirstFocusable()This tests check whether the on focus change callbacks are invoked in
the proper order when a View loses focus and the framework gives it to
the fist focusable one.
Button clearingFocusButton = mTopRightButton;
Button gainingFocusButton = mTopLeftButton;
// Make sure that the clearing focus View is not the first focusable.
View focusCandidate = clearingFocusButton.getRootView().getParent().focusSearch(null,
View.FOCUS_FORWARD);
assertNotSame("The clearing focus button is not the first focusable.",
clearingFocusButton, focusCandidate);
assertSame("The gaining focus button is the first focusable.",
gainingFocusButton, focusCandidate);
// Focus the clearing focus button.
clearingFocusButton.requestFocus();
assertTrue(clearingFocusButton.hasFocus());
// Register the invocation order checker.
CombinedListeners mock = mock(CombinedListeners.class);
clearingFocusButton.setOnFocusChangeListener(mock);
gainingFocusButton.setOnFocusChangeListener(mock);
clearingFocusButton.getViewTreeObserver().addOnGlobalFocusChangeListener(mock);
// Try to clear focus.
clearingFocusButton.clearFocus();
// Check that no callback was invoked since focus did not move.
InOrder inOrder = inOrder(mock);
inOrder.verify(mock).onFocusChange(clearingFocusButton, false);
inOrder.verify(mock).onGlobalFocusChanged(clearingFocusButton, gainingFocusButton);
inOrder.verify(mock).onFocusChange(gainingFocusButton, true);
| public void | testPostedRequestFocus()
mHandler.post(new Runnable() { public void run() {
mBottomLeftButton.requestFocus();
}});
synchronized(this) {
try {
wait(500);
} catch (InterruptedException e) {
// Don't care.
}
}
assertTrue("Focus should move to bottom left", mBottomLeftButton.hasFocus());
| public void | testSetUpConditions()
assertNotNull(mHandler);
assertNotNull(mTopLeftButton);
assertNotNull(mTopRightButton);
assertNotNull(mBottomLeftButton);
assertNotNull(mBottomRightButton);
assertTrue("requestFocus() should work from onCreate.", mBottomRightButton.hasFocus());
| public void | testWrongThreadRequestFocusFails()
try {
mTopRightButton.requestFocus();
fail("requestFocus from wrong thread should raise exception.");
} catch (AndroidRuntimeException e) {
// Expected. The actual exception is not public, so we can't catch it.
assertEquals("android.view.ViewRootImpl$CalledFromWrongThreadException",
e.getClass().getName());
}
|
|