package com.bumptech.glide.load.engine;
import static com.bumptech.glide.tests.Util.mockResource;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import android.os.Looper;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.Shadows;
import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class)
@Config(manifest = Config.NONE, sdk = 18)
public class ResourceRecyclerTest {
private ResourceRecycler recycler;
@Before
public void setUp() {
recycler = new ResourceRecycler();
}
@Test
public void testRecyclesResourceSynchronouslyIfNotAlreadyRecyclingResource() {
Resource<?> resource = mockResource();
Shadows.shadowOf(Looper.getMainLooper()).pause();
recycler.recycle(resource);
verify(resource).recycle();
}
@Test
public void testDoesNotRecycleChildResourceSynchronously() {
Resource<?> parent = mockResource();
final Resource<?> child = mockResource();
doAnswer(new Answer<Void>() {
@Override
public Void answer(InvocationOnMock invocationOnMock) throws Throwable {
recycler.recycle(child);
return null;
}
}).when(parent).recycle();
Shadows.shadowOf(Looper.getMainLooper()).pause();
recycler.recycle(parent);
verify(parent).recycle();
verify(child, never()).recycle();
Shadows.shadowOf(Looper.getMainLooper()).runOneTask();
verify(child).recycle();
}
}