/*******************************************************************************
* 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.plugin.nodejsdbg.ide.configuration;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
import org.eclipse.che.ide.api.app.AppContext;
import org.eclipse.che.ide.api.debug.DebugConfiguration;
import org.eclipse.che.ide.api.debug.DebugConfigurationPage;
import org.eclipse.che.ide.api.machine.RecipeServiceClient;
import org.eclipse.che.ide.macro.CurrentProjectPathMacro;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;
import java.util.Map;
import static org.eclipse.che.plugin.nodejsdbg.ide.NodeJsDebugger.ConnectionProperties.SCRIPT;
import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
/** @author Artem Zatsarynnyi */
@RunWith(MockitoJUnitRunner.class)
public class NodeJsDebuggerConfigurationPagePresenterTest {
private static final String HOST = "localhost";
private static final int PORT = 8000;
@Mock
private NodeJsDebuggerConfigurationPageView pageView;
@Mock
private DebugConfiguration configuration;
@Mock
private CurrentProjectPathMacro currentProjectPathMacro;
@Mock
private AppContext appContext;
@Mock
private RecipeServiceClient recipeServiceClient;
@InjectMocks
private NodeJsDebuggerConfigurationPagePresenter pagePresenter;
@Before
public void setUp() {
when(configuration.getHost()).thenReturn(HOST);
when(configuration.getPort()).thenReturn(PORT);
pagePresenter.resetFrom(configuration);
}
@Test
public void testResetting() throws Exception {
verify(configuration, atLeastOnce()).getConnectionProperties();
verify(currentProjectPathMacro).getName();
}
@Test
public void testGo() throws Exception {
AcceptsOneWidget container = Mockito.mock(AcceptsOneWidget.class);
pagePresenter.go(container);
verify(container).setWidget(eq(pageView));
verify(configuration, atLeastOnce()).getConnectionProperties();
verify(pageView).setScriptPath(anyString());
}
@Test
public void testOnBinaryPathChanged() throws Exception {
String binPath = "/path";
when(pageView.getScriptPath()).thenReturn(binPath);
final DebugConfigurationPage.DirtyStateListener listener = mock(DebugConfigurationPage.DirtyStateListener.class);
pagePresenter.setDirtyStateListener(listener);
pagePresenter.onScriptPathChanged();
verify(pageView).getScriptPath();
ArgumentCaptor<Map> argumentCaptor = ArgumentCaptor.forClass(Map.class);
verify(configuration).setConnectionProperties(argumentCaptor.capture());
Map argumentCaptorValue = argumentCaptor.getValue();
assertEquals(binPath, argumentCaptorValue.get(SCRIPT.toString()));
verify(listener).onDirtyStateChanged();
}
}