blob: 55b4e6638f3e9c4f945a53fea119ced92d41cdf0 [file] [log] [blame]
package com.bumptech.glide.load;
import com.bumptech.glide.Resource;
import org.junit.Test;
import java.util.ArrayList;
import static junit.framework.Assert.assertEquals;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class MultiTransformationTest {
@Test
public void testReturnsConcatenatedTransformationIds() {
String firstId = "firstId";
Transformation first = mock(Transformation.class);
when(first.getId()).thenReturn(firstId);
String secondId = "secondId";
Transformation second = mock(Transformation.class);
when(second.getId()).thenReturn(secondId);
String thirdId = "thirdId";
Transformation third = mock(Transformation.class);
when(third.getId()).thenReturn(thirdId);
MultiTransformation transformation = new MultiTransformation(first, second, third);
final String expected = firstId + secondId + thirdId;
assertEquals(expected, transformation.getId());
ArrayList<Transformation> transformations = new ArrayList<Transformation>();
transformations.add(first);
transformations.add(second);
transformations.add(third);
transformation = new MultiTransformation(transformations);
assertEquals(expected, transformation.getId());
}
@Test
public void testAppliesTransformationsInOrder() {
final int width = 584;
final int height = 768;
Resource initial = mock(Resource.class);
Resource firstTransformed = mock(Resource.class);
Transformation first = mock(Transformation.class);
when(first.transform(eq(initial), eq(width), eq(height))).thenReturn(firstTransformed);
Resource secondTransformed = mock(Resource.class);
Transformation second = mock(Transformation.class);
when(second.transform(eq(firstTransformed), eq(width), eq(height))).thenReturn(secondTransformed);
MultiTransformation transformation = new MultiTransformation(first, second);
assertEquals(secondTransformed, transformation.transform(initial, width, height));
}
@Test
public void testInitialResourceIsNotRecycled() {
Resource initial = mock(Resource.class);
Resource transformed = mock(Resource.class);
Transformation first = mock(Transformation.class);
when(first.transform(any(Resource.class), anyInt(), anyInt())).thenReturn(transformed);
MultiTransformation transformation = new MultiTransformation(first);
transformation.transform(initial, 123, 456);
verify(initial, never()).recycle();
}
@Test
public void testInitialResourceIsNotRecycledEvenIfReturnedByMultipleTransformations() {
Resource initial = mock(Resource.class);
Transformation first = mock(Transformation.class);
when(first.transform(any(Resource.class), anyInt(), anyInt())).thenReturn(initial);
Transformation second = mock(Transformation.class);
when(second.transform(any(Resource.class), anyInt(), anyInt())).thenReturn(initial);
MultiTransformation transformation = new MultiTransformation(first, second);
transformation.transform(initial, 1111, 2222);
verify(initial, never()).recycle();
}
@Test
public void testInitialResourceIsNotRecycledIfReturnedByOneTransformationButNotByALaterTransformation() {
Resource initial = mock(Resource.class);
Transformation first = mock(Transformation.class);
when(first.transform(any(Resource.class), anyInt(), anyInt())).thenReturn(initial);
Transformation second = mock(Transformation.class);
when(second.transform(any(Resource.class), anyInt(), anyInt())).thenReturn(mock(Resource.class));
MultiTransformation transformation = new MultiTransformation(first, second);
transformation.transform(initial, 1, 2);
verify(initial, never()).recycle();
}
@Test
public void testFinalResourceIsNotRecycled() {
Resource transformed = mock(Resource.class);
Transformation first = mock(Transformation.class);
when(first.transform(any(Resource.class), anyInt(), anyInt())).thenReturn(transformed);
MultiTransformation transformation = new MultiTransformation(first);
transformation.transform(mock(Resource.class), 111, 222);
verify(transformed, never()).recycle();
}
@Test
public void testIntermediateResourcesAreRecycled() {
Resource firstTransformed = mock(Resource.class);
Transformation first = mock(Transformation.class);
when(first.transform(any(Resource.class), anyInt(), anyInt())).thenReturn(firstTransformed);
Resource secondTransformed = mock(Resource.class);
Transformation second = mock(Transformation.class);
when(second.transform(any(Resource.class), anyInt(), anyInt())).thenReturn(secondTransformed);
MultiTransformation transformation = new MultiTransformation(first, second);
transformation.transform(mock(Resource.class), 233, 454);
verify(firstTransformed).recycle();
}
}