package com.quran.labs.androidquran.presenter.translation;
import com.quran.labs.androidquran.common.LocalTranslation;
import com.quran.labs.androidquran.common.QuranAyahInfo;
import com.quran.labs.androidquran.common.QuranText;
import com.quran.labs.androidquran.data.VerseRange;
import com.quran.labs.androidquran.presenter.Presenter;
import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.google.common.truth.Truth.assertThat;
public class BaseTranslationPresenterTest {
private BaseTranslationPresenter<TestPresenter> presenter;
@Before
public void setupTest() {
presenter = new BaseTranslationPresenter<>(null, null);
}
@Test
public void testGetTranslationNames() {
final List<String> databases = Arrays.asList("one.db", "two.db");
Map<String, LocalTranslation> map = new HashMap<String, LocalTranslation>() {{
put("one.db", new LocalTranslation(1, "one.db", "One", "First", null, null, null, 1));
put("two.db", new LocalTranslation(2, "two.db", "Two", "Second", null, null, null, 1));
put("three.db", new LocalTranslation(2, "three.db", "Three", "Third", null, null, null, 1));
}};
String[] translations = presenter.getTranslationNames(databases, map);
assertThat(translations).hasLength(2);
assertThat(translations[0]).isEqualTo("First");
assertThat(translations[1]).isEqualTo("Second");
}
@Test
public void testHashlessGetTranslationNames() {
final List<String> databases = Arrays.asList("one.db", "two.db");
final Map<String, LocalTranslation> map = new HashMap<>();
String[] translations = presenter.getTranslationNames(databases, map);
assertThat(translations).hasLength(2);
assertThat(translations[0]).isEqualTo(databases.get(0));
assertThat(translations[1]).isEqualTo(databases.get(1));
}
@Test
public void testCombineAyahDataOneVerse() throws Exception {
VerseRange verseRange = new VerseRange(1, 1, 1, 1);
List<QuranText> arabic = Collections.singletonList(new QuranText(1, 1, "first ayah"));
List<QuranAyahInfo> info = presenter.combineAyahData(verseRange, arabic,
Collections.singletonList(Collections.singletonList(new QuranText(1, 1, "translation"))));
assertThat(info).hasSize(1);
QuranAyahInfo first = info.get(0);
assertThat(first.sura).isEqualTo(1);
assertThat(first.ayah).isEqualTo(1);
assertThat(first.texts).hasSize(1);
assertThat(first.arabicText).isEqualTo("first ayah");
assertThat(first.texts.get(0)).isEqualTo("translation");
}
@Test
public void testCombineAyahDataOneVerseEmpty() throws Exception {
VerseRange verseRange = new VerseRange(1, 1, 1, 1);
List<QuranText> arabic = Collections.emptyList();
List<QuranAyahInfo> info =
presenter.combineAyahData(verseRange, arabic, Collections.emptyList());
assertThat(info).hasSize(0);
}
@Test
public void testCombineAyahDataOneVerseNoArabic() throws Exception {
VerseRange verseRange = new VerseRange(1, 1, 1, 1);
List<QuranText> arabic = Collections.emptyList();
List<QuranAyahInfo> info = presenter.combineAyahData(verseRange, arabic,
Collections.singletonList(Collections.singletonList(new QuranText(1, 1, "translation"))));
assertThat(info).hasSize(1);
QuranAyahInfo first = info.get(0);
assertThat(first.sura).isEqualTo(1);
assertThat(first.ayah).isEqualTo(1);
assertThat(first.texts).hasSize(1);
assertThat(first.arabicText).isNull();
assertThat(first.texts.get(0)).isEqualTo("translation");
}
@Test
public void testCombineAyahDataArabicEmptyTranslations() throws Exception {
VerseRange verseRange = new VerseRange(1, 1, 1, 2);
List<QuranText> arabic = Arrays.asList(
new QuranText(1, 1, "first ayah"),
new QuranText(1, 2, "second ayah")
);
List<QuranAyahInfo> info = presenter.combineAyahData(verseRange, arabic, new ArrayList<>());
assertThat(info).hasSize(2);
assertThat(info.get(0).sura).isEqualTo(1);
assertThat(info.get(0).ayah).isEqualTo(1);
assertThat(info.get(0).texts).hasSize(0);
assertThat(info.get(0).arabicText).isEqualTo("first ayah");
assertThat(info.get(1).sura).isEqualTo(1);
assertThat(info.get(1).ayah).isEqualTo(2);
assertThat(info.get(1).texts).hasSize(0);
assertThat(info.get(1).arabicText).isEqualTo("second ayah");
}
@Test
public void testEnsureProperTranslations() {
VerseRange verseRange = new VerseRange(1, 1, 1, 2);
List<QuranText> text = new ArrayList<>();
text.add(new QuranText(1, 1, "bismillah"));
text = presenter.ensureProperTranslations(verseRange, text);
assertThat(text).hasSize(2);
QuranText first = text.get(0);
assertThat(first.sura).isEqualTo(1);
assertThat(first.ayah).isEqualTo(1);
assertThat(first.text).isEqualTo("bismillah");
QuranText second = text.get(1);
assertThat(second.sura).isEqualTo(1);
assertThat(second.ayah).isEqualTo(2);
assertThat(second.text).isEmpty();
}
private static class TestPresenter implements Presenter {
@Override
public void bind(Object what) {
}
@Override
public void unbind(Object what) {
}
}
}