/** * Copyright (c) 2013-2016 Angelo ZERR. * 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: * Angelo Zerr <angelo.zerr@gmail.com> - initial API and implementation */ package tern.server.nodejs.process; import java.io.File; import java.io.IOException; import java.util.LinkedList; import java.util.List; import org.junit.After; import org.junit.Ignore; import org.junit.Assert; import org.junit.Test; import tern.TernException; /** * Test with node.js process. * */ public class NodejsProcessTest { private static final int TIMEOUT = 1000; private static final int TEST_NUMBER = 1; @After public void shutdown() { NodejsProcessManager.getInstance().dispose(); } /** * Test when node.js base dir is not well configurated. * * @throws IOException * @throws InterruptedException * @throws TernException */ @Test public void badNodejsBaseDir() throws IOException, InterruptedException, TernException { File nodejsBaseDir = new File("."); File nodejsTernBaseDir = PathHelper.getNodejsTernBaseDir(); File projectDir = new File("."); INodejsProcess process = createProcess(nodejsBaseDir, nodejsTernBaseDir, projectDir); process.addProcessListener(new NodejsProcessAdapter() { @Override public void onData(INodejsProcess server, String line) { System.err.println(line); } }); try { process.start(TIMEOUT, TEST_NUMBER); Assert.assertTrue(false); } catch (Exception e) { Assert.assertTrue(e.getMessage(), true); } } protected INodejsProcess createProcess(File nodejsBaseDir, File nodejsTernBaseDir, File projectDir) throws TernException { INodejsProcess process = NodejsProcessManager.getInstance().create( projectDir, nodejsBaseDir, nodejsTernBaseDir); process.setLaunchConfiguration(new INodejsLaunchConfiguration() { @Override public boolean isWaitOnPort() { return true; } @Override public boolean isSaveLaunch() { return false; } @Override public String getLaunchMode() { return null; } @Override public String generateLaunchConfigurationName() { return null; } @Override public List<String> createNodeArgs() { List<String> args = new LinkedList<String>(); return args; } }); return process; } @Ignore("fail on macosx") @Test public void badNodejsTernBaseDir() throws IOException, InterruptedException, TernException { File nodejsBaseDir = PathHelper.getNodejsBasedir(); File nodejsTernBaseDir = new File("."); File projectDir = new File("."); try { createProcess(nodejsBaseDir, nodejsTernBaseDir, projectDir); Assert.assertTrue(false); } catch (Exception e) { Assert.assertTrue(e.getMessage(), true); } } @Test public void ok() throws IOException, InterruptedException, TernException { File nodejsBaseDir = PathHelper.getNodejsBasedir(); File nodejsTernBaseDir = PathHelper.getNodejsTernBaseDir(); File projectDir = new File("."); INodejsProcess process = createProcess(nodejsBaseDir, nodejsTernBaseDir, projectDir); final StringBuilder error = new StringBuilder(); process.addProcessListener(new NodejsProcessAdapter() { @Override public void onError(INodejsProcess server, String line) { error.append(line); } }); try { process.start(TIMEOUT, TEST_NUMBER); } catch (Exception e) { } Assert.assertEquals(0, error.toString().length()); System.err.println(error.toString()); } }