Skip to content
This repository has been archived by the owner on Nov 9, 2017. It is now read-only.

Commit

Permalink
Add Trans memory merge tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
Carlos A. Munoz committed Jul 30, 2013
1 parent d2516a0 commit 272363f
Show file tree
Hide file tree
Showing 3 changed files with 140 additions and 2 deletions.
17 changes: 17 additions & 0 deletions zanata-war/src/test/java/org/zanata/model/TestFixture.java
Expand Up @@ -28,6 +28,9 @@
import org.zanata.common.ContentType;
import org.zanata.common.LocaleId;
import org.zanata.common.ProjectType;
import org.zanata.model.tm.TransMemory;
import org.zanata.model.tm.TransMemoryUnit;
import org.zanata.model.tm.TransMemoryUnitVariant;
import org.zanata.webtrans.shared.model.AuditInfo;
import org.zanata.webtrans.shared.model.DocumentId;
import org.zanata.webtrans.shared.model.DocumentInfo;
Expand Down Expand Up @@ -207,4 +210,18 @@ public static DocumentInfo documentInfo(long id)
{
return documentInfo(id, "");
}

public static TransMemoryUnit makeTransMemoryUnit(Long l, HLocale hLocale)
{
TransMemory tm = new TransMemory();
tm.setSlug("test-tm");

return TransMemoryUnit.tu(tm,
"uid" + l,
"uid" + l,
hLocale.getLocaleId().getId(),
"<seg>source</seg>",
TransMemoryUnitVariant.tuv("lang", "<seg>target</seg>")
);
}
}
Expand Up @@ -39,6 +39,7 @@
import org.zanata.model.HLocale;
import org.zanata.model.HTextFlow;
import org.zanata.model.TestFixture;
import org.zanata.model.tm.TransMemoryUnit;
import org.zanata.seam.SeamAutowire;
import org.zanata.service.SecurityService;
import org.zanata.webtrans.server.TranslationWorkspace;
Expand All @@ -59,6 +60,7 @@
import net.customware.gwt.dispatch.shared.ActionException;
import static com.google.common.collect.Lists.newArrayList;
import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Matchers.same;
Expand Down Expand Up @@ -118,14 +120,23 @@ public void beforeMethod()
}

private TransMemoryMerge prepareActionAndMockSecurityService(int threshold, long... tranUnitIds) throws NoSuchWorkspaceException
{
return prepareActionAndMockSecurityService(threshold, true, tranUnitIds);
}

private TransMemoryMerge prepareActionAndMockSecurityService(int threshold, boolean acceptImportedTMResults, long... tranUnitIds)
throws NoSuchWorkspaceException
{
List<TransUnitUpdateRequest> requests = newArrayList();
for (long tranUnitId : tranUnitIds)
{
requests.add(new TransUnitUpdateRequest(new TransUnitId(tranUnitId), null, null, 0));
}
// we have TransMemoryMergeStatusResolverTest to cover various different merge options so here we don't test that
TransMemoryMerge action = new TransMemoryMerge(threshold, requests, MergeOption.IGNORE_CHECK, MergeOption.IGNORE_CHECK, MergeOption.IGNORE_CHECK, MergeOption.IGNORE_CHECK);
MergeOption importedTMOption = acceptImportedTMResults ? MergeOption.IGNORE_CHECK : MergeOption.REJECT;
TransMemoryMerge action =
new TransMemoryMerge(threshold, requests, MergeOption.IGNORE_CHECK, MergeOption.IGNORE_CHECK,
MergeOption.IGNORE_CHECK, importedTMOption);
mockSecurityService(action);
return action;
}
Expand All @@ -144,6 +155,13 @@ private static TransMemoryResultItem tmResult(Long sourceId, int percent)
return resultItem;
}

private static TransMemoryResultItem importedTmResult(Long sourceId, int percent)
{
TransMemoryResultItem resultItem = new TransMemoryResultItem(tmSource, tmTarget, MatchType.Imported, 1D, percent);
resultItem.addSourceId(sourceId);
return resultItem;
}

private static TransMemoryDetails tmDetail()
{
return new TransMemoryDetails("", "", "project a", "master", "pot/msg.pot", "resId", null, null, null, null);
Expand Down Expand Up @@ -356,4 +374,71 @@ public void doubleToInt()
assertThat((int)oneHundred <= 100, Matchers.is(true));

}

@Test
public void canAutoTranslateImportedTMResults() throws Exception
{
// Given:
// an action with threshold 80% and trans unit id
final long transUnitId = 1L;
TransMemoryMerge mergeAction = prepareActionAndMockSecurityService(80, transUnitId);
// A Text Flow to be translated
HTextFlow hTextFlow = TestFixture.makeHTextFlow(transUnitId, hLocale, ContentState.New, "pot/a.po");
// An imported Translation Unit match source ...
TransMemoryUnit tuResultSource = TestFixture.makeTransMemoryUnit(10L, hLocale);
// ... wrapped around a result item
TransMemoryResultItem mostSimilarTM = importedTmResult(11L, 100);
// A Translation memory query
TransMemoryQuery tmQuery = new TransMemoryQuery(hTextFlow.getContents(), FUZZY_PLURAL);

// Expectations:
when(textFlowDAO.findByIdList(newArrayList(transUnitId))).thenReturn(newArrayList(hTextFlow));
when(getTransMemoryHandler.searchTransMemory(hLocale, tmQuery, sourceLocale.getLocaleId()))
.thenReturn(newArrayList(mostSimilarTM, tmResult(12L, 90), tmResult(13L, 80)));
when(transMemoryUnitDAO.findById(11L)).thenReturn(tuResultSource);

// When: execute the action
handler.execute(mergeAction, null);

// Then: we should have text flow auto translated by using the most similar TM
verify(updateTransUnitHandler).doTranslation(same(hLocale.getLocaleId()), same(workspace), updateRequestCaptor.capture(),
same(mergeAction.getEditorClientId()), eq(TransUnitUpdated.UpdateType.TMMerge));
List<TransUnitUpdateRequest> updateRequest = updateRequestCaptor.getValue();
assertThat(updateRequest, Matchers.hasSize(1));
TransUnitUpdateRequest transUnitUpdateRequest = updateRequest.get(0);
assertThat(transUnitUpdateRequest.getNewContents(), Matchers.equalTo(mostSimilarTM.getTargetContents()));
assertThat(transUnitUpdateRequest.getTargetComment(), Matchers.equalTo("auto translated by TM merge from translation memory: test-tm, unique id: uid10"));
}

@Test
public void willIgnoreImportedTMResults() throws Exception
{
// Given:
// an action with threshold 80% and trans unit id
final long transUnitId = 1L;
prepareActionAndMockSecurityService(80, transUnitId);
TransMemoryMerge mergeAction = prepareActionAndMockSecurityService(80, false, transUnitId);
// A Text Flow to be translated
HTextFlow hTextFlow = TestFixture.makeHTextFlow(transUnitId, hLocale, ContentState.New, "pot/a.po");
// An imported Translation Unit match source ...
TransMemoryUnit tuResultSource = TestFixture.makeTransMemoryUnit(10L, hLocale);
// ... wrapped around a result item
TransMemoryResultItem mostSimilarTM = importedTmResult(11L, 100);
// A Translation memory query
TransMemoryQuery tmQuery = new TransMemoryQuery(hTextFlow.getContents(), FUZZY_PLURAL);

// Expectations:
when(textFlowDAO.findByIdList(newArrayList(transUnitId))).thenReturn(newArrayList(hTextFlow));
when(getTransMemoryHandler.searchTransMemory(hLocale, tmQuery, sourceLocale.getLocaleId()))
.thenReturn(newArrayList(mostSimilarTM, tmResult(12L, 90), tmResult(13L, 80)));
when(transMemoryUnitDAO.findById(11L)).thenReturn(tuResultSource);

// When: execute the action
UpdateTransUnitResult result = handler.execute(mergeAction, null);

// Then: We should not have anything auto-translated
// Then: we should have EMPTY trans unit update request
verifyZeroInteractions(updateTransUnitHandler);
assertThat(result.getUpdateInfoList(), Matchers.<TransUnitUpdateInfo>empty());
}
}
Expand Up @@ -44,6 +44,7 @@
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.nullValue;
import static org.zanata.webtrans.shared.model.TransMemoryResultItem.MatchType;

/**
* @author Patrick Huang <a href="mailto:pahuang@redhat.com">pahuang@redhat.com</a>
Expand Down Expand Up @@ -79,7 +80,12 @@ public void beforeMethod()

private static TransMemoryResultItem tmResultWithSimilarity(double percent)
{
return new TransMemoryResultItem(null, null, null, 0, percent);
return new TransMemoryResultItem(null, null, MatchType.TranslatedInternal, 0, percent);
}

private static TransMemoryResultItem tmResultWithSimilarityAndExternallyImported( double percent )
{
return new TransMemoryResultItem(null, null, MatchType.Imported, 0, percent);
}

private static TransMemoryDetails tmDetail(String projectName, String docId, String resId, String msgContext)
Expand Down Expand Up @@ -214,4 +220,34 @@ public void willRejectIfThereIsOldTranslationButCanNotFindTranslationToSetAsAppr
assertThat(resolver.decideStatus(action, textFlow, tmDetail, tmResultWithSimilarity(100), oldTarget), is(nullValue()));
}

@Test
public void fromImportedTmAndOptionIsFuzzy()
{
TransMemoryMerge transMemoryMerge =
mergeTMAction(MergeOption.IGNORE_CHECK, MergeOption.IGNORE_CHECK, MergeOption.IGNORE_CHECK, MergeOption.FUZZY);
assertThat(
resolver.decideStatus(transMemoryMerge, tmResultWithSimilarityAndExternallyImported(100), null),
equalTo(ContentState.NeedReview));
}

@Test
public void fromImportedTmAndOptionIsIgnore()
{
TransMemoryMerge transMemoryMerge =
mergeTMAction(MergeOption.IGNORE_CHECK, MergeOption.IGNORE_CHECK, MergeOption.IGNORE_CHECK, MergeOption.IGNORE_CHECK);
assertThat(
resolver.decideStatus(transMemoryMerge, tmResultWithSimilarityAndExternallyImported(100), null),
equalTo(ContentState.Translated));
}

@Test
public void fromImportedTmAndOptionIsReject()
{
TransMemoryMerge transMemoryMerge =
mergeTMAction(MergeOption.IGNORE_CHECK, MergeOption.IGNORE_CHECK, MergeOption.IGNORE_CHECK, MergeOption.REJECT);
assertThat(
resolver.decideStatus(transMemoryMerge, tmResultWithSimilarityAndExternallyImported(100), null),
nullValue());
}

}

0 comments on commit 272363f

Please sign in to comment.