package com.door43.translationstudio;
import android.test.InstrumentationTestCase;
import com.door43.translationstudio.core.Library;
import com.door43.translationstudio.core.NativeSpeaker;
import com.door43.translationstudio.core.Resource;
import com.door43.translationstudio.core.SourceTranslation;
import com.door43.translationstudio.core.TargetLanguage;
import com.door43.translationstudio.core.TargetTranslation;
import com.door43.translationstudio.core.TranslationFormat;
import com.door43.translationstudio.core.TranslationType;
import com.door43.translationstudio.core.Translator;
import org.apache.commons.io.FileUtils;
import java.io.File;
/**
* Created by joel on 9/15/2015.
*/
public class TranslatorTest extends InstrumentationTestCase {
private File mTranslatorDir;
private Translator mTranslator;
private Library library;
private MainApplication app;
private String rootApiUrl;
protected void setUp() throws Exception {
app = AppContext.context();
mTranslatorDir = new File(app.getFilesDir(), "translator_test_translations");
mTranslator = new Translator(app, null, mTranslatorDir);
String server = app.getUserPreferences().getString(SettingsActivity.KEY_PREF_MEDIA_SERVER, app.getResources().getString(R.string.pref_default_media_server));
rootApiUrl = server + app.getResources().getString(R.string.root_catalog_api);
library = new Library(app, rootApiUrl, null);
}
public void test01Clean() throws Exception {
library.delete();
FileUtils.deleteQuietly(mTranslatorDir);
AppContext.deployDefaultLibrary();
library = new Library(app, rootApiUrl, null);
assertTrue(library.exists());
}
public void test02CreateTargetTranslation() throws Exception {
TargetLanguage[] targetLanguages = library.getTargetLanguages();
assertTrue(targetLanguages.length > 0);
int numTargetTranslations = 5;
NativeSpeaker speaker = new NativeSpeaker("me");
for(int i = 0; i < numTargetTranslations; i ++) {
mTranslator.createTargetTranslation(speaker, targetLanguages[i], "obs", TranslationType.TEXT, Resource.REGULAR_SLUG, TranslationFormat.MARKDOWN);
}
assertEquals(numTargetTranslations, mTranslator.getTargetTranslations().length);
}
public void test03GetTargetTranslation() throws Exception {
TargetLanguage[] targetLanguages = library.getTargetLanguages();
TargetLanguage targetLanguage = targetLanguages[0];
TargetTranslation targetTranslation = mTranslator.getTargetTranslation(TargetTranslation.generateTargetTranslationId(targetLanguage.getId(), "obs", TranslationType.TEXT, Resource.REGULAR_SLUG));
assertEquals("obs", targetTranslation.getProjectId());
assertEquals(targetLanguage.getId(), targetTranslation.getTargetLanguageId());
assertEquals(targetLanguage.name, targetTranslation.getTargetLanguageName());
TargetTranslation sameTargetTranslation = mTranslator.getTargetTranslation(targetTranslation.getId());
assertEquals(targetTranslation.getId(), sameTargetTranslation.getId());
}
public void test04DeleteTargetTranslation() throws Exception {
TargetLanguage[] targetLanguages = library.getTargetLanguages();
TargetLanguage targetLanguage = targetLanguages[0];
TargetTranslation targetTranslation = mTranslator.getTargetTranslation(TargetTranslation.generateTargetTranslationId(targetLanguage.getId(), "obs", TranslationType.TEXT, Resource.REGULAR_SLUG));
TargetTranslation[] targetTranslations = mTranslator.getTargetTranslations();
mTranslator.deleteTargetTranslation(targetTranslation.getId());
AppContext.clearTargetTranslationSettings(targetTranslation.getId());
TargetTranslation deletedTargetTranslation = mTranslator.getTargetTranslation(targetTranslation.getId());
assertNull(deletedTargetTranslation);
TargetTranslation[] newTargetTranslations = mTranslator.getTargetTranslations();
assertEquals(targetTranslations.length - 1, newTargetTranslations.length);
}
public void test05AddSourceTranslation() throws Exception {
TargetLanguage[] targetLanguages = library.getTargetLanguages();
TargetLanguage targetLanguage = targetLanguages[1];
TargetTranslation targetTranslation = mTranslator.getTargetTranslation(TargetTranslation.generateTargetTranslationId(targetLanguage.getId(), "obs", TranslationType.TEXT, Resource.REGULAR_SLUG));
SourceTranslation[] sourceTranslations = library.getSourceTranslations(targetTranslation.getProjectId());
AppContext.addOpenSourceTranslation(targetTranslation.getId(), sourceTranslations[0].getId());
targetTranslation.addSourceTranslation(sourceTranslations[0]);
AppContext.addOpenSourceTranslation(targetTranslation.getId(), sourceTranslations[1].getId());
targetTranslation.addSourceTranslation(sourceTranslations[1]);
String[] sourceTranslationIds = AppContext.getOpenSourceTranslationIds(targetTranslation.getId());
assertEquals(2, sourceTranslationIds.length);
// set/get selected translation
String selectedSourceTranslationId = AppContext.getSelectedSourceTranslationId(targetTranslation.getId());
assertNotNull(selectedSourceTranslationId);
assertTrue(selectedSourceTranslationId.equals(sourceTranslationIds[0]) || selectedSourceTranslationId.equals(sourceTranslationIds[1]));
}
public void test06RemoveSourceTranslation() throws Exception {
TargetLanguage[] targetLanguages = library.getTargetLanguages();
TargetLanguage targetLanguage = targetLanguages[1];
TargetTranslation targetTranslation = mTranslator.getTargetTranslation(TargetTranslation.generateTargetTranslationId(targetLanguage.getId(), "obs", TranslationType.TEXT, Resource.REGULAR_SLUG));
String selectedSourceTranslationId = AppContext.getSelectedSourceTranslationId(targetTranslation.getId());
String[] sourceTranslationIds = AppContext.getOpenSourceTranslationIds(targetTranslation.getId());
// the loop below requires two items
assertEquals(2, sourceTranslationIds.length);
// delete selected source translation
String newSelectedSourceTranslationId = null;
for(String id:sourceTranslationIds) {
if(id.equals(selectedSourceTranslationId)) {
AppContext.removeOpenSourceTranslation(targetTranslation.getId(), id);
} else {
newSelectedSourceTranslationId = id;
}
}
String[] updatedSourceTranslationIds = AppContext.getOpenSourceTranslationIds(targetTranslation.getId());
assertEquals(1, updatedSourceTranslationIds.length);
// should auto select the next source translation
String actualNewSelectedSourceTranslationId = AppContext.getSelectedSourceTranslationId(targetTranslation.getId());
assertEquals(newSelectedSourceTranslationId, actualNewSelectedSourceTranslationId);
// finish emptying
AppContext.removeOpenSourceTranslation(targetTranslation.getId(), newSelectedSourceTranslationId);
assertEquals(0, AppContext.getOpenSourceTranslationIds(targetTranslation.getId()).length);
}
public void test07SetSelectedSourceTranslation() throws Exception {
TargetLanguage[] targetLanguages = library.getTargetLanguages();
TargetLanguage targetLanguage = targetLanguages[1];
TargetTranslation targetTranslation = mTranslator.getTargetTranslation(TargetTranslation.generateTargetTranslationId(targetLanguage.getId(), "obs", TranslationType.TEXT, Resource.REGULAR_SLUG));
String selectedSourceTranslationid = AppContext.getSelectedSourceTranslationId(targetTranslation.getId());
assertNull(selectedSourceTranslationid);
// set dummy source translation
String dummySourceTranslationid = "dummy_id";
AppContext.setSelectedSourceTranslation(targetTranslation.getId(), dummySourceTranslationid);
String newSelectedSourceTranslationId = AppContext.getSelectedSourceTranslationId(targetTranslation.getId());
assertEquals(dummySourceTranslationid, newSelectedSourceTranslationId);
// remove dummy source translation
AppContext.setSelectedSourceTranslation(targetTranslation.getId(), null);
assertNull(AppContext.getSelectedSourceTranslationId(targetTranslation.getId()));
}
}