Package uk.co.javahelp.maven.plugin.fitnesse.util

Source Code of uk.co.javahelp.maven.plugin.fitnesse.util.FitNesseHelperTest

package uk.co.javahelp.maven.plugin.fitnesse.util;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStream;
import java.io.PrintStream;
import java.net.URL;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.DefaultArtifact;
import org.apache.maven.artifact.handler.ArtifactHandler;
import org.apache.maven.monitor.logging.DefaultLog;
import org.apache.maven.plugin.logging.Log;
import org.codehaus.plexus.logging.Logger;
import org.eclipse.jetty.server.Server;
import org.junit.Before;
import org.junit.Test;

import uk.co.javahelp.maven.plugin.fitnesse.mojo.PrintStreamLogger;
import fitnesse.Arguments;

public class FitNesseHelperTest {

  private FitNesseHelper fitNesseHelper;
 
  private ArtifactHandler artifactHandler;
 
    private ByteArrayOutputStream logStream;
   
  @Before
  public void setUp() {
    artifactHandler = mock(ArtifactHandler.class);
   
    logStream = new ByteArrayOutputStream();
    Log log = new DefaultLog(new PrintStreamLogger(
      Logger.LEVEL_INFO, "test", new PrintStream(logStream)));
   
    fitNesseHelper = new FitNesseHelper(log);
  }
   
  @Test
  public void testFormatAndAppendClasspath() {
    // Save the real os.name
    String os = System.getProperty("os.name");
     
    System.setProperty("os.name", "windows");
      assertFormatAndAppendClasspath("");
   
    System.setProperty("os.name", "linux");
      assertFormatAndAppendClasspath(String.format(
          "[ERROR] THERE IS WHITESPACE IN CLASSPATH ELEMENT [/x/y z]%nFitNesse classpath may not function correctly in wiki mode%n"));
   
    // Restore the real os.name (to prevent side-effects on other tests)
    System.setProperty("os.name", os);
  }
   
  private void assertFormatAndAppendClasspath(String expectedLogMsg) {
       
    StringBuilder sb = new StringBuilder();
   
    assertSame(sb, fitNesseHelper.formatAndAppendClasspath(sb, "/x/y/z"));
    assertEquals("!path /x/y/z\n", sb.toString());
    assertEquals("", logStream.toString());
     
    assertSame(sb, fitNesseHelper.formatAndAppendClasspath(sb, "/x/y z"));
    assertEquals("!path /x/y/z\n!path /x/y z\n", sb.toString());
    assertEquals(expectedLogMsg, logStream.toString());
  }
   
  @Test
  public void testFormatAndAppendClasspathArtifact() {
        String jarPath = new File(getClass().getResource("/dummy.jar").getPath()).getPath();
        Artifact artifact = new DefaultArtifact(
            "org.fitnesse", "fitnesse", "20130530", "compile", "jar", null, artifactHandler);
        artifact.setFile(new File(jarPath));
       
    StringBuilder sb = new StringBuilder();
    assertSame(sb, fitNesseHelper.formatAndAppendClasspathArtifact(sb, artifact));
   
    assertEquals("!path " + jarPath + "\n", sb.toString());
  }
   
  @Test
  public void testLaunchFitNesseServer() throws Exception {
    File logDir = new File(System.getProperty("java.io.tmpdir"), "fitnesse-launcher-logs");
    // Clean out logDir, as it might still exist from a previous run,
    // because Windows doesn't always delete this file on exit
      FileUtils.deleteQuietly(logDir);
    assertLaunchFitNesseServer(null);
    assertLaunchFitNesseServer(" ");
    assertLaunchFitNesseServer(logDir.getCanonicalPath());
    String[] logFiles = logDir.list();
    assertEquals(1, logFiles.length);
    assertTrue(logFiles[0].matches("fitnesse[0-9]+\\.log"));
    FileUtils.forceDeleteOnExit(logDir);
  }
   
  public void assertLaunchFitNesseServer(String logDir) throws Exception {
    String port = String.valueOf(Arguments.DEFAULT_COMMAND_PORT);
    File working = new File(System.getProperty("java.io.tmpdir"), "fitnesse-launcher-test");
    fitNesseHelper.launchFitNesseServer(port, working.getCanonicalPath(), FitNesseHelper.DEFAULT_ROOT, logDir);
    URL local = new URL("http://localhost:" + port);
    InputStream in = local.openConnection().getInputStream();
    try {
      String content = IOUtils.toString(in);
      assertTrue(content.startsWith("<!DOCTYPE html>"));
      assertTrue(content.contains("<title>Page doesn't exist. Edit: FrontPage</title>"));
    } finally {
      IOUtils.closeQuietly(in);
        fitNesseHelper.shutdownFitNesseServer(port);
        Thread.sleep(100L);
      FileUtils.deleteQuietly(working);
    }
  }
   
  @Test
  public void testShutdownFitNesseServerOk() throws Exception {
    int port = Arguments.DEFAULT_COMMAND_PORT;
    Server server = new Server(port);
      server.setHandler(new OkHandler("/", "responder=shutdown"));
      server.start();
     
      try {
      fitNesseHelper.shutdownFitNesseServer(String.valueOf(port));
    } finally {
        server.stop();
    }
  }
 
  @Test
  public void testShutdownFitNesseServerNotRunning() throws Exception {
    int port = Arguments.DEFAULT_COMMAND_PORT;
    fitNesseHelper.shutdownFitNesseServer(String.valueOf(port));
    assertEquals(String.format("[INFO] FitNesse already not running.%n"), logStream.toString());
  }
 
  @Test
  public void testShutdownFitNesseServerDisconnect() throws Exception {
    int port = Arguments.DEFAULT_COMMAND_PORT;
    Server server = new Server(port);
      server.setHandler(new DisconnectingHandler(server));
      server.start();
     
      try {
      fitNesseHelper.shutdownFitNesseServer(String.valueOf(port));
     
      assertTrue(logStream.toString().startsWith(String.format("[ERROR] %njava.io.IOException: Could not parse Response")));
    } finally {
        server.stop();
    }
  }
}
TOP

Related Classes of uk.co.javahelp.maven.plugin.fitnesse.util.FitNesseHelperTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.