package com.mopub.nativeads; import android.app.Activity; import android.content.Context; import com.mopub.common.test.support.SdkTestRunner; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import static org.fest.assertions.api.Assertions.assertThat; import static org.mockito.Mockito.mock; @RunWith(SdkTestRunner.class) public class AdapterHelperTest { private AdapterHelper subject; private Activity context; private int contentRowCount; private int start; private int interval; @Before public void setUp() { context = new Activity(); start = 1; interval = 2; subject = new AdapterHelper(context, start, interval); } @Test(expected = IllegalArgumentException.class) public void constructor_whenPassedAnApplicationContext_shouldThrowIllegalArgumentException() { new AdapterHelper(context.getApplicationContext(), start, interval); } @Test public void getAdView_withNullActivityContext_shouldReturnEmptyViewWithApplicationContext() { subject.clearActivityContext(); Context viewContext = subject.getAdView(null, null, mock(NativeResponse.class), mock(ViewBinder.class), null).getContext(); assertThat(viewContext).isEqualTo(context.getApplication()); } @Test public void adapterHelper_withContentRowCountOf10_shouldCalculateCorrectly() { contentRowCount = 10; start = 0; interval = 2; subject = new AdapterHelper(context, start, interval); // acacacacacacacacacac assertThat(subject.shiftedCount(contentRowCount)).isEqualTo(20); validateRows(20, start, interval); assertThat(subject.shiftedPosition(1)).isEqualTo(0); assertThat(subject.shiftedPosition(3)).isEqualTo(1); assertThat(subject.shiftedPosition(5)).isEqualTo(2); assertThat(subject.shiftedPosition(7)).isEqualTo(3); assertThat(subject.shiftedPosition(9)).isEqualTo(4); assertThat(subject.shiftedPosition(11)).isEqualTo(5); assertThat(subject.shiftedPosition(13)).isEqualTo(6); assertThat(subject.shiftedPosition(15)).isEqualTo(7); assertThat(subject.shiftedPosition(17)).isEqualTo(8); assertThat(subject.shiftedPosition(19)).isEqualTo(9); start = 0; interval = 6; subject = new AdapterHelper(context, start, interval); // acccccaccccc assertThat(subject.shiftedCount(contentRowCount)).isEqualTo(12); validateRows(12, start, interval); assertThat(subject.shiftedPosition(1)).isEqualTo(0); assertThat(subject.shiftedPosition(2)).isEqualTo(1); assertThat(subject.shiftedPosition(3)).isEqualTo(2); assertThat(subject.shiftedPosition(4)).isEqualTo(3); assertThat(subject.shiftedPosition(5)).isEqualTo(4); assertThat(subject.shiftedPosition(7)).isEqualTo(5); assertThat(subject.shiftedPosition(8)).isEqualTo(6); assertThat(subject.shiftedPosition(9)).isEqualTo(7); assertThat(subject.shiftedPosition(10)).isEqualTo(8); assertThat(subject.shiftedPosition(11)).isEqualTo(9); start = 0; interval = 11; subject = new AdapterHelper(context, start, interval); // acccccccccc assertThat(subject.shiftedCount(contentRowCount)).isEqualTo(11); validateRows(11, start, interval); assertThat(subject.shiftedPosition(1)).isEqualTo(0); assertThat(subject.shiftedPosition(5)).isEqualTo(4); assertThat(subject.shiftedPosition(10)).isEqualTo(9); start = 0; interval = 4; subject = new AdapterHelper(context, start, interval); // acccacccacccac assertThat(subject.shiftedCount(contentRowCount)).isEqualTo(14); validateRows(14, start, interval); start = 5; interval = 6; subject = new AdapterHelper(context, start, interval); // cccccaccccc assertThat(subject.shiftedCount(contentRowCount)).isEqualTo(11); validateRows(11, start, interval); assertThat(subject.shiftedPosition(4)).isEqualTo(4); assertThat(subject.shiftedPosition(6)).isEqualTo(5); assertThat(subject.shiftedPosition(10)).isEqualTo(9); start = 5; interval = 5; subject = new AdapterHelper(context, start, interval); // cccccaccccac assertThat(subject.shiftedCount(contentRowCount)).isEqualTo(12); validateRows(12, start, interval); assertThat(subject.shiftedPosition(6)).isEqualTo(5); assertThat(subject.shiftedPosition(11)).isEqualTo(9); start = 3; interval = 4; subject = new AdapterHelper(context, start, interval); // cccacccacccac assertThat(subject.shiftedCount(contentRowCount)).isEqualTo(13); validateRows(13, start, interval); assertThat(subject.shiftedPosition(0)).isEqualTo(0); assertThat(subject.shiftedPosition(2)).isEqualTo(2); assertThat(subject.shiftedPosition(12)).isEqualTo(9); start = 10; interval = 100; subject = new AdapterHelper(context, start, interval); // cccccccccc assertThat(subject.shiftedCount(contentRowCount)).isEqualTo(10); validateRows(10, start, interval); assertThat(subject.shiftedPosition(3)).isEqualTo(3); assertThat(subject.shiftedPosition(7)).isEqualTo(7); assertThat(subject.shiftedPosition(9)).isEqualTo(9); start = 0; interval = 10; subject = new AdapterHelper(context, start, interval); // acccccccccac assertThat(subject.shiftedCount(contentRowCount)).isEqualTo(12); validateRows(12, start, interval); assertThat(subject.shiftedPosition(1)).isEqualTo(0); assertThat(subject.shiftedPosition(9)).isEqualTo(8); assertThat(subject.shiftedPosition(11)).isEqualTo(9); } @Test public void adapterHelper_withContentRowCountOf1_shouldCalculateCorrectly() { contentRowCount = 1; start = 0; interval = 2; subject = new AdapterHelper(context, start, interval); // ac assertThat(subject.shiftedCount(contentRowCount)).isEqualTo(2); validateRows(2, start, interval); assertThat(subject.shiftedPosition(1)).isEqualTo(0); // We can still query for large numbers since the calculation assumes an infinite list assertThat(subject.shiftedPosition(1001)).isEqualTo(500); start = 1; interval = 2; subject = new AdapterHelper(context, start, interval); // c assertThat(subject.shiftedCount(contentRowCount)).isEqualTo(1); validateRows(1, start, interval); assertThat(subject.shiftedPosition(0)).isEqualTo(0); } private void validateRows(int totalRows, int start, int interval) { for (int i = 0; i < totalRows; ++i) { if (i == start) { assertThat(subject.isAdPosition(i)).isTrue(); } else if (i > start && ((i - start) % (interval) == 0)) { assertThat(subject.isAdPosition(i)).isTrue(); } else { assertThat(subject.isAdPosition(i)).isFalse(); } } } }