package com.bumptech.glide.util;
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertNull;
import android.view.View;
import android.view.ViewGroup;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class)
@Config(manifest = Config.NONE, sdk = 18)
public class ViewPreloadSizeProviderTest {
private View view;
private ViewPreloadSizeProvider<Object> provider;
@Before
public void setUp() {
view = new View(RuntimeEnvironment.application);
provider = new ViewPreloadSizeProvider<>();
}
@Test
public void testReturnsNullFromGetPreloadSizeBeforeHasSize() {
assertNull(provider.getPreloadSize(new Object(), 0, 0));
}
@Test
public void testReturnsValidSizeFromGetPreloadSizeAfterHasSize() {
int width = 4123;
int height = 342;
provider.onSizeReady(width, height);
int[] size = provider.getPreloadSize(new Object(), 0, 0);
assertThat(size).asList().containsExactly(width, height);
}
@Test
public void testDoesNotObtainSizeFromViewOnceSizeIsSet() {
int width = 123;
int height = 456;
provider.onSizeReady(width, height);
view.setLayoutParams(new ViewGroup.LayoutParams(1, 1));
view.layout(0, 0, 1, 1);
provider.setView(view);
int[] size = provider.getPreloadSize(new Object(), 0, 0);
assertThat(size).asList().containsExactly(width, height);
}
@Test
public void testCanObtainFixedSizeFromView() {
int width = 123;
int height = 456;
view.setLayoutParams(new ViewGroup.LayoutParams(width, height));
view.layout(0, 0, width, height);
provider.setView(view);
int[] size = provider.getPreloadSize(new Object(), 0, 0);
assertThat(size).asList().containsExactly(width, height);
}
@Test
public void testIgnoresNewViewIfAlreadyWaitingOnSizeOfAnotherView() {
provider.setView(view);
View newView = new View(RuntimeEnvironment.application);
newView.setLayoutParams(new ViewGroup.LayoutParams(100, 100));
provider.setView(newView);
assertNull(provider.getPreloadSize(new Object(), 0, 0));
}
@Test
public void testCanObtainSizeFromViewWhenGivenViewInConstructor() {
int width = 100;
int height = 200;
view.setLayoutParams(new ViewGroup.LayoutParams(width, height));
view.layout(0, 0, width, height);
provider = new ViewPreloadSizeProvider<>(view);
int[] size = provider.getPreloadSize(new Object(), 0, 0);
assertThat(size).asList().containsExactly(width, height);
}
}