diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/CheckKey.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/CheckKey.java index 5805c25aae..e4668a62ac 100644 --- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/CheckKey.java +++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/CheckKey.java @@ -47,10 +47,18 @@ public interface CheckKey static final int KEY_J = 'J'; static final int KEY_K = 'K'; static final int KEY_S = 'S'; - static final int KEY_1 = '1'; - static final int KEY_2 = '2'; - static final int KEY_3 = '3'; - static final int KEY_4 = '4'; + + static int KEY_1 = 49; + static int KEY_1_NUM = 35; + + static final int KEY_2 = 50; + static final int KEY_2_NUM = 40; + + static final int KEY_3 = 51; + static final int KEY_3_NUM = 34; + + static final int KEY_4 = 52; + static final int KEY_4_NUM = 37; public static enum Context { diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/CheckKeyImpl.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/CheckKeyImpl.java index ec6f0c66af..c7498d0185 100644 --- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/CheckKeyImpl.java +++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/CheckKeyImpl.java @@ -20,7 +20,6 @@ */ package org.zanata.webtrans.client.editor; -import com.allen_sauer.gwt.log.client.Log; import com.google.gwt.dom.client.NativeEvent; import com.google.gwt.event.dom.client.KeyCodes; @@ -163,8 +162,7 @@ public boolean isCtrlKey() @Override public boolean isCopyFromTransMem() { - Log.info(keyCode + ""); - return ctrlKey && shiftKey && (keyCode == KEY_1 || keyCode == KEY_2 || keyCode == KEY_3 || keyCode == KEY_4); + return ctrlKey && shiftKey && (keyCode == KEY_1 || keyCode == KEY_1_NUM || keyCode == KEY_2 || keyCode == KEY_2_NUM || keyCode == KEY_3 || keyCode == KEY_3_NUM || keyCode == KEY_4 || keyCode == KEY_4_NUM); } @Override diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/TransMemoryPresenter.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/TransMemoryPresenter.java index 88fa7e4110..fa54efc0e1 100644 --- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/TransMemoryPresenter.java +++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/TransMemoryPresenter.java @@ -1,7 +1,5 @@ package org.zanata.webtrans.client.presenter; -import java.util.ArrayList; - import net.customware.gwt.presenter.client.EventBus; import net.customware.gwt.presenter.client.widget.WidgetDisplay; import net.customware.gwt.presenter.client.widget.WidgetPresenter; @@ -16,8 +14,8 @@ import org.zanata.webtrans.shared.model.TranslationMemoryGlossaryItem; import org.zanata.webtrans.shared.model.WorkspaceContext; import org.zanata.webtrans.shared.rpc.GetTranslationMemory; +import org.zanata.webtrans.shared.rpc.GetTranslationMemory.SearchType; import org.zanata.webtrans.shared.rpc.GetTranslationMemoryResult; -import org.zanata.webtrans.shared.rpc.HasSearchType.SearchType; import com.allen_sauer.gwt.log.client.Log; import com.google.gwt.cell.client.FieldUpdater; @@ -29,53 +27,56 @@ import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.HasText; import com.google.gwt.user.client.ui.HasValue; +import com.google.gwt.view.client.ListDataProvider; import com.google.inject.Inject; public class TransMemoryPresenter extends WidgetPresenter { - private final WorkspaceContext workspaceContext; - private final CachingDispatchAsync dispatcher; - private GetTranslationMemory submittedRequest = null; - private GetTranslationMemory lastRequest = null; - - @Inject - private TransMemoryDetailsPresenter tmInfoPresenter; public interface Display extends WidgetDisplay { HasClickHandlers getSearchButton(); + HasClickHandlers getClearButton(); + HasValue getSearchType(); HasText getTmTextBox(); - void reloadData(String query, ArrayList memories); + void setDiffText(String query); void startProcessing(); void stopProcessing(); - boolean isFocused(); - - String getSource(int index); + void setPageSize(int size); - String getTarget(int index); + boolean isFocused(); Column getDetailsColumn(); Column getCopyColumn(); - void renderTable(); + void setDataProvider(ListDataProvider dataProvider); } + private final WorkspaceContext workspaceContext; + private final CachingDispatchAsync dispatcher; + private GetTranslationMemory submittedRequest = null; + private GetTranslationMemory lastRequest = null; + private TransMemoryDetailsPresenter tmInfoPresenter; + private ListDataProvider dataProvider; + @Inject - public TransMemoryPresenter(Display display, EventBus eventBus, CachingDispatchAsync dispatcher, WorkspaceContext workspaceContext) + public TransMemoryPresenter(Display display, EventBus eventBus, CachingDispatchAsync dispatcher, TransMemoryDetailsPresenter tmInfoPresenter, WorkspaceContext workspaceContext) { super(display, eventBus); this.dispatcher = dispatcher; this.workspaceContext = workspaceContext; + this.tmInfoPresenter = tmInfoPresenter; - display.renderTable(); + dataProvider = new ListDataProvider(); + display.setDataProvider(dataProvider); } @Override @@ -92,6 +93,16 @@ public void onClick(ClickEvent event) } }); + display.getClearButton().addClickHandler(new ClickHandler() + { + @Override + public void onClick(ClickEvent event) + { + display.getTmTextBox().setText(""); + dataProvider.getList().clear(); + } + }); + registerHandler(eventBus.addHandler(TransUnitSelectionEvent.getType(), new TransUnitSelectionHandler() { @Override @@ -108,11 +119,18 @@ public void onTransMemoryCopy(TransMemoryShortcutCopyEvent event) { if (!workspaceContext.isReadOnly()) { - String source = display.getSource(event.getIndex()); - String target = display.getTarget(event.getIndex()); - if (source != null && target != null) + TranslationMemoryGlossaryItem item; + try + { + item = dataProvider.getList().get(event.getIndex()); + } + catch (IndexOutOfBoundsException ex) + { + item = null; + } + if (item != null) { - eventBus.fireEvent(new CopyDataToEditorEvent(source, target)); + eventBus.fireEvent(new CopyDataToEditorEvent(item.getSource(), item.getTarget())); } } } @@ -132,7 +150,7 @@ public void update(int index, TranslationMemoryGlossaryItem object, ImageResourc @Override public void update(int index, TranslationMemoryGlossaryItem object, String value) { - eventBus.fireEvent(new CopyDataToEditorEvent(object.getSource(), object.getTarget())); + eventBus.fireEvent(new TransMemoryCopyEvent(object.getSource(), object.getTarget())); } }); } @@ -148,6 +166,7 @@ public void createTMRequestForTransUnit(TransUnit transUnit) private void createTMRequest(final String query, GetTranslationMemory.SearchType searchType) { + dataProvider.getList().clear(); display.startProcessing(); final GetTranslationMemory action = new GetTranslationMemory(query, workspaceContext.getWorkspaceId().getLocaleId(), searchType); scheduleTMRequest(action); @@ -213,9 +232,16 @@ private void displayTMResult(GetTranslationMemoryResult result) { String query = submittedRequest.getQuery(); display.getTmTextBox().setText(query); + display.setDiffText(query); display.getSearchType().setValue(submittedRequest.getSearchType()); - ArrayList memories = result.getMemories(); - display.reloadData(query, memories); + + dataProvider.getList().clear(); + for (final TranslationMemoryGlossaryItem memory : result.getMemories()) + { + dataProvider.getList().add(memory); + } + display.setPageSize(dataProvider.getList().size()); + dataProvider.refresh(); } @Override diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/TranslationPresenter.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/TranslationPresenter.java index 4e299f490f..7802476139 100644 --- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/TranslationPresenter.java +++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/TranslationPresenter.java @@ -236,16 +236,20 @@ public void onPreviewNativeEvent(NativePreviewEvent event) int index; switch (checkKey.getKeyCode()) { - case '1': + case CheckKey.KEY_1: + case CheckKey.KEY_1_NUM: index = 0; break; - case '2': + case CheckKey.KEY_2: + case CheckKey.KEY_2_NUM: index = 1; break; - case '3': + case CheckKey.KEY_3: + case CheckKey.KEY_3_NUM: index = 2; break; - case '4': + case CheckKey.KEY_4: + case CheckKey.KEY_4_NUM: index = 3; break; default: diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransMemoryView.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransMemoryView.java index 6e24d64853..fb846b4cef 100644 --- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransMemoryView.java +++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransMemoryView.java @@ -1,37 +1,42 @@ package org.zanata.webtrans.client.view; -import java.util.ArrayList; +import java.util.HashSet; +import java.util.Set; import org.zanata.webtrans.client.presenter.TransMemoryPresenter; import org.zanata.webtrans.client.resources.Resources; import org.zanata.webtrans.client.resources.UiMessages; +import org.zanata.webtrans.client.ui.DiffMatchPatchLabel; import org.zanata.webtrans.client.ui.EnumListBox; +import org.zanata.webtrans.client.ui.HighlightingLabel; import org.zanata.webtrans.client.ui.SearchTypeRenderer; -import org.zanata.webtrans.client.ui.table.column.CopyButtonColumn; -import org.zanata.webtrans.client.ui.table.column.DetailsColumn; -import org.zanata.webtrans.client.ui.table.column.DiffMatchPatchLabelColumn; -import org.zanata.webtrans.client.ui.table.column.HighlightingLabelColumn; -import org.zanata.webtrans.client.ui.table.column.SimilarityColumn; import org.zanata.webtrans.shared.model.TranslationMemoryGlossaryItem; -import org.zanata.webtrans.shared.rpc.HasSearchType.SearchType; +import org.zanata.webtrans.shared.rpc.GetTranslationMemory.SearchType; +import com.google.gwt.cell.client.AbstractCell; +import com.google.gwt.cell.client.ButtonCell; +import com.google.gwt.cell.client.ImageResourceCell; +import com.google.gwt.cell.client.ValueUpdater; import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Element; +import com.google.gwt.dom.client.NativeEvent; import com.google.gwt.event.dom.client.BlurEvent; -import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.FocusEvent; +import com.google.gwt.event.dom.client.HasClickHandlers; import com.google.gwt.event.dom.client.KeyCodes; import com.google.gwt.event.dom.client.KeyUpEvent; import com.google.gwt.resources.client.ImageResource; +import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.cellview.client.CellTable; import com.google.gwt.user.cellview.client.Column; import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy; +import com.google.gwt.user.cellview.client.TextColumn; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.HasValue; -import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.ScrollPanel; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.ValueListBox; @@ -53,9 +58,6 @@ interface TransMemoryViewUiBinder extends UiBinder @UiField TextBox tmTextBox; - @UiField - Label headerLabel; - @UiField Button searchButton; @@ -70,31 +72,115 @@ interface TransMemoryViewUiBinder extends UiBinder CellTable tmTable; + private Resources resources; + private String query; + private boolean isFocused; private UiMessages messages; private ListDataProvider dataProvider; - private final DiffMatchPatchLabelColumn sourceColumn; - private final HighlightingLabelColumn targetColumn; - private final CopyButtonColumn copyColumn; - private final DetailsColumn detailsColumn; + private static class ClickableImageResourceCell extends ImageResourceCell + { + @Override + public Set getConsumedEvents() + { + Set consumedEvents = new HashSet(); + consumedEvents.add("click"); + return consumedEvents; + } + + @Override + public void onBrowserEvent(Context context, Element parent, ImageResource value, NativeEvent event, ValueUpdater valueUpdater) + { + String eventType = event.getType(); + if ("click".equals(eventType)) + { + onEnterKeyDown(context, parent, value, event, valueUpdater); + } + } + + @Override + protected void onEnterKeyDown(Context context, Element parent, ImageResource value, NativeEvent event, ValueUpdater valueUpdater) + { + if (valueUpdater != null) + { + valueUpdater.update(value); + } + } + } + + private final Column sourceColumn = new Column(new DiffMatchPatchLabelCell()) + { + @Override + public DiffMatchPatchLabel getValue(TranslationMemoryGlossaryItem object) + { + DiffMatchPatchLabel label = new DiffMatchPatchLabel(query, object.getSource()); + return label; + } + }; + private final Column targetColumn = new Column(new HighlightingLabelCell()) + { + @Override + public HighlightingLabel getValue(TranslationMemoryGlossaryItem object) + { + HighlightingLabel label = new HighlightingLabel(object.getTarget()); + return label; + } + }; + private final TextColumn similarityColumn = new TextColumn() + { + @Override + public String getValue(TranslationMemoryGlossaryItem object) + { + return object.getSimilarityPercent() + "%"; + } + }; + private final Column detailsColumn = new Column(new ClickableImageResourceCell()) + { + @Override + public ImageResource getValue(TranslationMemoryGlossaryItem object) + { + return resources.informationImage(); + } + }; + + private final Column copyColumn = new Column(new ButtonCell()) + { + @Override + public String getValue(TranslationMemoryGlossaryItem object) + { + return "Copy"; + } + }; + + private static class DiffMatchPatchLabelCell extends AbstractCell + { + @Override + public void render(Context context, DiffMatchPatchLabel value, SafeHtmlBuilder sb) + { + sb.appendHtmlConstant(value.getElement().getString()); + } + } + + private static class HighlightingLabelCell extends AbstractCell + { + @Override + public void render(Context context, HighlightingLabel value, SafeHtmlBuilder sb) + { + sb.appendHtmlConstant(value.getElement().getString()); + } + } @Inject public TransMemoryView(final UiMessages messages, SearchTypeRenderer searchTypeRenderer, Resources resources) { + this.resources = resources; this.messages = messages; - sourceColumn = new DiffMatchPatchLabelColumn(true, false); - targetColumn = new HighlightingLabelColumn(false, true); - copyColumn = new CopyButtonColumn(); - detailsColumn = new DetailsColumn(resources); - searchType = new EnumListBox(SearchType.class, searchTypeRenderer); - dataProvider = new ListDataProvider(); initWidget(uiBinder.createAndBindUi(this)); - headerLabel.setText(messages.translationMemoryHeading()); clearButton.setText(messages.clearButtonLabel()); searchButton.setText(messages.searchButtonLabel()); } @@ -120,15 +206,14 @@ public void onTmTextBoxBlur(BlurEvent event) isFocused = false; } - @UiHandler("clearButton") - void onClearButtonClicked(ClickEvent event) + @Override + public HasClickHandlers getClearButton() { - tmTextBox.setText(""); - dataProvider.getList().clear(); + return clearButton; } @Override - public Button getSearchButton() + public HasClickHandlers getSearchButton() { return searchButton; } @@ -153,57 +238,32 @@ public Widget asWidget() @Override public void startProcessing() { - dataProvider.getList().clear(); + //TODO show waiting indicator } @Override public void stopProcessing() { + //TODO hide waiting indicator + //TODO add test for start and stop processing at appropriate times } @Override - public void reloadData(String query, ArrayList memories) + public void setDiffText(String query) { - tmTable.setVisibleRangeAndClearData(tmTable.getVisibleRange(), true); - dataProvider.getList().clear(); - for (final TranslationMemoryGlossaryItem memory : memories) - { - dataProvider.getList().add(memory); - } - tmTable.setPageSize(dataProvider.getList().size()); - dataProvider.refresh(); + this.query = query; } @Override - public boolean isFocused() + public void setPageSize(int size) { - return isFocused; + tmTable.setPageSize(size); } @Override - public String getSource(int index) - { - try - { - return dataProvider.getList().get(index).getSource(); - } - catch (IndexOutOfBoundsException e) - { - return null; - } - } - - @Override - public String getTarget(int index) + public boolean isFocused() { - try - { - return dataProvider.getList().get(index).getTarget(); - } - catch (IndexOutOfBoundsException e) - { - return null; - } + return isFocused; } @Override @@ -219,15 +279,20 @@ public Column getCopyColumn() } @Override - public void renderTable() + public void setDataProvider(ListDataProvider dataProvider) + { + this.dataProvider = dataProvider; + renderTable(); + } + + private void renderTable() { tmTable = new CellTable(); tmTable.addStyleName("tmTable"); - tmTable.addStyleName("southTable"); tmTable.addColumn(sourceColumn, messages.sourceLabel()); tmTable.addColumn(targetColumn, messages.targetLabel()); - tmTable.addColumn(new SimilarityColumn(), messages.similarityLabel()); - tmTable.addColumn(detailsColumn, messages.detailsLabel()); + tmTable.addColumn(similarityColumn, messages.similarityLabel()); + tmTable.addColumn(detailsColumn); tmTable.addColumn(copyColumn); final NoSelectionModel selectionModel = new NoSelectionModel(); diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransMemoryView.ui.xml b/server/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransMemoryView.ui.xml index 9ce2ec162e..76e176cae5 100644 --- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransMemoryView.ui.xml +++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransMemoryView.ui.xml @@ -1,28 +1,28 @@ - .headerLabel { + .headerLabel { padding-right:5px; padding-top:5px; font-weight:bold; } - - + + + - - - - + + + - + - \ No newline at end of file diff --git a/server/zanata-war/src/test/java/org/zanata/webtrans/client/presenter/TransMemoryPresenterTest.java b/server/zanata-war/src/test/java/org/zanata/webtrans/client/presenter/TransMemoryPresenterTest.java new file mode 100644 index 0000000000..2035a5c581 --- /dev/null +++ b/server/zanata-war/src/test/java/org/zanata/webtrans/client/presenter/TransMemoryPresenterTest.java @@ -0,0 +1,117 @@ +package org.zanata.webtrans.client.presenter; + +import static org.easymock.EasyMock.*; + +import net.customware.gwt.presenter.client.EventBus; + +import org.easymock.Capture; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; +import org.zanata.webtrans.client.events.TransMemoryShorcutCopyHandler; +import org.zanata.webtrans.client.events.TransMemoryShortcutCopyEvent; +import org.zanata.webtrans.client.events.TransUnitSelectionEvent; +import org.zanata.webtrans.client.events.TransUnitSelectionHandler; +import org.zanata.webtrans.client.presenter.TransMemoryPresenter.Display; +import org.zanata.webtrans.client.rpc.CachingDispatchAsync; +import org.zanata.webtrans.shared.model.TranslationMemoryGlossaryItem; +import org.zanata.webtrans.shared.model.WorkspaceContext; +import org.zanata.webtrans.shared.rpc.GetTranslationMemory.SearchType; + +import com.google.gwt.cell.client.FieldUpdater; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.event.dom.client.HasClickHandlers; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.resources.client.ImageResource; +import com.google.gwt.user.cellview.client.Column; +import com.google.gwt.user.client.ui.HasValue; +import com.google.gwt.view.client.ListDataProvider; + + +@Test(groups = { "unit-tests" }) +public class TransMemoryPresenterTest +{ + // object under test + TransMemoryPresenter transMemoryPresenter; + + //injected mocks + Display mockDisplay = createMock(Display.class); + EventBus mockEventBus = createMock(EventBus.class); + CachingDispatchAsync mockDispatcher = createMock(CachingDispatchAsync.class); + TransMemoryDetailsPresenter mockTransMemoryDetailsPresenter = createMock(TransMemoryDetailsPresenter.class); + WorkspaceContext mockWorkspaceContext = createMock(WorkspaceContext.class); + + @SuppressWarnings("unchecked") + HasValue mockSearchType = createMock(HasValue.class); + HasClickHandlers mockSearchButton = createMock(HasClickHandlers.class); + @SuppressWarnings("unchecked") + Column mockDetailsColumn = createMock(Column.class); + @SuppressWarnings("unchecked") + Column mockCopyColumn = createMock(Column.class); + + Capture capturedTransUnitSelectionEventHandler = new Capture(); + Capture capturedClearButtonClickHandler = new Capture(); + Capture capturedSearchButtonClickHandler = new Capture(); + Capture capturedTransMemoryShortcutCopyEventHandler = new Capture(); + + HasClickHandlers mockClearButton = createMock(HasClickHandlers.class); + + + + @BeforeMethod + public void resetMocks() + { + reset(mockDispatcher, mockDisplay, mockEventBus, mockTransMemoryDetailsPresenter, mockWorkspaceContext); + reset(mockSearchType, mockSearchButton, mockClearButton); + reset(mockDetailsColumn, mockCopyColumn); + + capturedTransUnitSelectionEventHandler.reset(); + capturedSearchButtonClickHandler.reset(); + capturedTransMemoryShortcutCopyEventHandler.reset(); + } + + public void canBind() + { + expect(mockDisplay.getSearchType()).andReturn(mockSearchType).anyTimes(); + + mockSearchType.setValue(SearchType.FUZZY); + expectLastCall().once(); + + expect(mockDisplay.getSearchButton()).andReturn(mockSearchButton).anyTimes(); + expect(mockSearchButton.addClickHandler(capture(capturedSearchButtonClickHandler))).andReturn(createMock(HandlerRegistration.class)).once(); + + expect(mockDisplay.getClearButton()).andReturn(mockClearButton).anyTimes(); + expect(mockClearButton.addClickHandler(capture(capturedClearButtonClickHandler))).andReturn(createMock(HandlerRegistration.class)).once(); + + expect(mockEventBus.addHandler(eq(TransUnitSelectionEvent.getType()), and(capture(capturedTransUnitSelectionEventHandler), isA(TransUnitSelectionHandler.class)))).andReturn(createMock(HandlerRegistration.class)).once(); + expect(mockEventBus.addHandler(eq(TransMemoryShortcutCopyEvent.getType()), and(capture(capturedTransMemoryShortcutCopyEventHandler ), isA(TransMemoryShorcutCopyHandler.class)))).andReturn(createMock(HandlerRegistration.class)).once(); + + expect(mockDisplay.getDetailsColumn()).andReturn(mockDetailsColumn).anyTimes(); + + //TODO capture field updaters and data provider to check them? + + mockDetailsColumn.setFieldUpdater(isA(FieldUpdater.class)); + expectLastCall().once(); + + expect(mockDisplay.getCopyColumn()).andReturn(mockCopyColumn).anyTimes(); + + mockCopyColumn.setFieldUpdater(isA(FieldUpdater.class)); + expectLastCall().once(); + + //multiple calls may be bad (rendering issues?). May want to inject into + //view and presenter instead. + mockDisplay.setDataProvider(isA(ListDataProvider.class)); + expectLastCall().once(); + + replay(mockDispatcher, mockDisplay, mockEventBus, mockTransMemoryDetailsPresenter, mockWorkspaceContext); + replay(mockSearchType, mockSearchButton, mockClearButton); + replay(mockDetailsColumn, mockCopyColumn); + + transMemoryPresenter = new TransMemoryPresenter(mockDisplay, mockEventBus, mockDispatcher, mockTransMemoryDetailsPresenter , mockWorkspaceContext); + + transMemoryPresenter.bind(); + + verify(mockDispatcher, mockDisplay, mockEventBus, mockTransMemoryDetailsPresenter, mockWorkspaceContext); + verify(mockSearchType, mockSearchButton, mockClearButton); + verify(mockDetailsColumn, mockCopyColumn); + } +}