isIdleNow() is returning true, but a message indicating that the resource has transitioned from busy to idle was never sent
android, android-espresso, testing
Solution
You have to notify callback that you are on the way to idle state, something like that:
@Override
public boolean isIdleNow() {
if (!imageView.isShown()){
if (callback != null) {
callback.onTransitionToIdle();
}
return true;
}
return false;
}
Problem
I'm trying to write a test in Espresso for my Android application, and I have a problem with Idle. If my `isIdleNow()` looks like this ``` public boolean isIdleNow() { return true; } ``` then the message is sent. But if `IsIdleNow()` has to wait for some conditions (it doesn't return true at start) then the message isn't sent. My code: ``` public class ImageViewIdlingResource implements IdlingResource { private ImageView imageView=null; ResourceCallback callback; public ImageViewIdlingResource(ImageView imageView2){ this.imageView = imageView2; } @Override public String getName() { return "ImageViewIdlingResource"; } @Override public boolean isIdleNow() { return !imageView.isShown(); } @Override public void registerIdleTransitionCallback(ResourceCallback resourceCallback) { this.callback = resourceCallback; }} ``` and the test: ``` public class EspressoTest extends ActivityInstrumentationTestCase2<SplashScreen> { public EspressoTest() { super(SplashScreen.class); } @Override public void setUp() throws Exception { super.setUp(); getActivity(); ImageViewIdlingResource imageResource = new ImageViewIdlingResource((ImageView)getActivity().findViewById(R.id.splashscreen_icon)); Espresso.registerIdlingResources(imageResource); } public void testListGoesOverTheFold() throws InterruptedException { onView(withId(R.id.button)).check(matches(isDisplayed())); }} ```