/******************************************************************************* * Copyright (c) 2012-2017 Codenvy, S.A. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.ide.selection; import com.google.gwt.junit.GWTMockUtilities; import com.google.gwt.user.client.ui.AcceptsOneWidget; import com.google.gwt.user.client.ui.IsWidget; import com.google.web.bindery.event.shared.EventBus; import com.google.web.bindery.event.shared.SimpleEventBus; import org.eclipse.che.ide.api.event.ActivePartChangedEvent; import org.eclipse.che.ide.api.event.SelectionChangedEvent; import org.eclipse.che.ide.api.event.SelectionChangedHandler; import org.eclipse.che.ide.api.parts.AbstractPartPresenter; import org.eclipse.che.ide.api.parts.PartPresenter; import org.eclipse.che.ide.api.selection.Selection; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.vectomatic.dom.svg.ui.SVGResource; import static org.junit.Assert.assertEquals; import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; /** * Test covers {@link SelectionAgentImpl} functionality. * * @author <a href="mailto:nzamosenchuk@exoplatform.com">Nikolay Zamosenchuk</a> */ @RunWith(MockitoJUnitRunner.class) public class TestSelectionAgent { private EventBus eventBus = new SimpleEventBus(); private SelectionAgentImpl agent = new SelectionAgentImpl(eventBus); @Mock private PartPresenter part; @Mock private Selection selection; @Before public void disarm() { // don't throw an exception if GWT.create() invoked GWTMockUtilities.disarm(); } @After public void restore() { GWTMockUtilities.restore(); } /** Check proper Selection returned when part changed */ @Test public void shouldChangeSelectionAfterPartGetsActivated() { when(part.getSelection()).thenReturn(selection); // fire event, for agent to get information about active part eventBus.fireEvent(new ActivePartChangedEvent(part)); assertEquals("Agent should return proper Selection", selection, agent.getSelection()); } /** Event should be fired, when active part changed */ @Test public void shouldFireEventWhenPartChanged() { when(part.getSelection()).thenReturn(selection); SelectionChangedHandler handler = mock(SelectionChangedHandler.class); eventBus.addHandler(SelectionChangedEvent.TYPE, handler); // fire event, for agent to get information about active part eventBus.fireEvent(new ActivePartChangedEvent(part)); verify(handler).onSelectionChanged((SelectionChangedEvent)any()); } /** * If selection chang in active part, Selection Agent should fire * an Event */ @Test public void shouldFireEventWhenSelectionInActivePartChanged() { AbstractPartPresenter part = new AbstractPartPresenter() { @Override public void go(AcceptsOneWidget container) { } @Override public String getTitleToolTip() { return null; } @Override public SVGResource getTitleImage() { return null; } @Override public String getTitle() { return null; } @Override public IsWidget getView() { return null; } }; // fire event, for agent to get information about active part eventBus.fireEvent(new ActivePartChangedEvent(part)); SelectionChangedHandler handler = mock(SelectionChangedHandler.class); eventBus.addHandler(SelectionChangedEvent.TYPE, handler); part.setSelection(mock(Selection.class)); verify(handler).onSelectionChanged((SelectionChangedEvent)any()); } /** * If selection chang in non-active part, no events should be fired by * Selection Agent */ @Test public void shouldNOTFireEventWhenSelectionInNONActivePartChanged() { AbstractPartPresenter firstPart = new AbstractPartPresenter() { @Override public void go(AcceptsOneWidget container) { } @Override public String getTitleToolTip() { return null; } @Override public SVGResource getTitleImage() { return null; } @Override public String getTitle() { return null; } @Override public IsWidget getView() { return null; } }; // fire event, for agent to get information about active part eventBus.fireEvent(new ActivePartChangedEvent(firstPart)); // change part eventBus.fireEvent(new ActivePartChangedEvent(mock(PartPresenter.class))); SelectionChangedHandler handler = mock(SelectionChangedHandler.class); eventBus.addHandler(SelectionChangedEvent.TYPE, handler); // call setSelection on the first Part. firstPart.setSelection(mock(Selection.class)); verifyZeroInteractions(handler); } }