/*******************************************************************************
* 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.api.languageserver.registry;
import org.eclipse.che.api.languageserver.launcher.LanguageServerLauncher;
import org.eclipse.che.api.languageserver.messager.PublishDiagnosticsParamsMessenger;
import org.eclipse.che.api.languageserver.messager.ShowMessageMessenger;
import org.eclipse.che.api.languageserver.shared.model.LanguageDescription;
import org.eclipse.lsp4j.InitializeParams;
import org.eclipse.lsp4j.InitializeResult;
import org.eclipse.lsp4j.ServerCapabilities;
import org.eclipse.lsp4j.services.LanguageServer;
import org.mockito.Mock;
import org.mockito.testng.MockitoTestNGListener;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
import java.util.concurrent.CompletableFuture;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.testng.Assert.assertEquals;
/**
* @author Anatoliy Bazko
*/
@Listeners(MockitoTestNGListener.class)
public class ServerInitializerImplTest {
@Mock
private ServerInitializerObserver observer;
@Mock
private PublishDiagnosticsParamsMessenger publishDiagnosticsParamsMessenger;
@Mock
private ShowMessageMessenger showMessageParamsMessenger;
@Mock
private LanguageDescription languageDescription;
@Mock
private LanguageServerLauncher launcher;
@Mock
private LanguageServer server;
@Mock
private CompletableFuture<InitializeResult> completableFuture;
private ServerInitializerImpl initializer;
@BeforeMethod
public void setUp() throws Exception {
initializer = spy(new ServerInitializerImpl(publishDiagnosticsParamsMessenger, showMessageParamsMessenger));
}
@Test
public void initializerShouldNotifyObservers() throws Exception {
when(languageDescription.getLanguageId()).thenReturn("languageId");
when(server.initialize(any(InitializeParams.class))).thenReturn(completableFuture);
when(completableFuture.get()).thenReturn(mock(InitializeResult.class));
when(launcher.getLanguageDescription()).thenReturn(languageDescription);
when(launcher.launch(anyString(), any())).thenReturn(server);
doNothing().when(initializer).registerCallbacks(server);
initializer.addObserver(observer);
LanguageServer languageServer = initializer.initialize(launcher, "/path");
assertEquals(server, languageServer);
verify(observer).onServerInitialized(eq(server), any(ServerCapabilities.class), eq(languageDescription), eq("/path"));
}
}