Package org.bladerunnerjs.runner

Source Code of org.bladerunnerjs.runner.CommandRunnerTest

package org.bladerunnerjs.runner;

import static org.bladerunnerjs.testing.utility.BRJSAssertions.*;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.PrintStream;

import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.bladerunnerjs.model.ThreadSafeStaticBRJSAccessor;
import org.bladerunnerjs.model.exception.InvalidSdkDirectoryException;
import org.bladerunnerjs.model.exception.command.CommandOperationException;
import org.bladerunnerjs.runner.CommandRunner;
import org.bladerunnerjs.runner.CommandRunner.InvalidDirectoryException;
import org.bladerunnerjs.runner.CommandRunner.NoSdkArgumentException;
import org.bladerunnerjs.utility.UserCommandRunner;

import com.caplin.cutlass.util.FileUtility;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.impl.StaticLoggerBinder;

public class CommandRunnerTest {
  private CommandRunner commandRunner;
  private ByteArrayOutputStream systemOutputStream = new ByteArrayOutputStream();
  private ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
  private ByteArrayOutputStream errorStream = new ByteArrayOutputStream();
  private File tempDir;
 
  private PrintStream oldSysOut;
 
  @Before
  public void setUp() throws IOException, InvalidSdkDirectoryException {
    StaticLoggerBinder.getSingleton().getLoggerFactory().setOutputStreams(new PrintStream(outputStream), new PrintStream(errorStream));
    commandRunner = new CommandRunner();
   
    tempDir = FileUtility.createTemporaryDirectory( getClass() );
    ThreadSafeStaticBRJSAccessor.destroy();
    oldSysOut = System.out;
    System.setOut( new PrintStream(systemOutputStream) );
  }
 
  @After
  public void tearDown() {
    System.setOut( oldSysOut );   
  }
 
 
  @Test(expected=NoSdkArgumentException.class)
  public void anExceptionIsThrownIfNoSdkDirectoryIsProvided() throws Exception {
    commandRunner.run(new String[] {});
  }
 
  @Test(expected=InvalidDirectoryException.class)
  public void anExceptionIsThrownIfTheSdkArgumentIsNotADirectory() throws Exception {
    commandRunner.run(new String[] {dir("no-such-directory")});
  }
 
  @Test(expected=CommandOperationException.class)
  public void anExceptionIsThrownIfTheSdkArgumentIsNotAValidSdkDirectory() throws Exception {
    dirFile("not-a-valid-sdk-directory").mkdirs();
    commandRunner.run(new String[] {dir("not-a-valid-sdk-directory")});
  }
 
  @Test
  public void theCommandIsExecutedWhenAValidDirectoryIsProvided() throws Exception {
    dirFile("valid-sdk-directory/sdk").mkdirs();
    commandRunner.run(new String[] {dir("valid-sdk-directory")});
  }
 
  @Test
  public void builtInCommandsShowWarnLevelLogLinesByDefault() throws Exception {
    dirFile("valid-sdk-directory/sdk").mkdirs();
    commandRunner.run(new String[] {dir("valid-sdk-directory"), "log-test"});
   
    String output = outputStream.toString("UTF-8");
    assertContains("warn-level", output);
    assertDoesNotContain("info-level", output);
    assertDoesNotContain("debug-level", output);
  }
 
  @Test
  public void consoleLoggingIsAlwaysVisible() throws Exception {
    dirFile("valid-sdk-directory/sdk").mkdirs();
    commandRunner.run(new String[] {dir("valid-sdk-directory"), "log-test"});
   
    String output = systemOutputStream.toString("UTF-8");
    assertContains("console-level", output);
  }
 
  @Test
  public void verboseLogLinesCanBeEnabled() throws Exception {
    dirFile("valid-sdk-directory/sdk").mkdirs();
    commandRunner.run(new String[] {dir("valid-sdk-directory"), "log-test", "--info"});
   
    String output = outputStream.toString("UTF-8");
    assertContains("warn-level", output);
    assertContains("info-level", output);
    assertDoesNotContain("debug-level", output);
  }
 
  @Test
  public void debugLogLinesCanBeEnabled() throws Exception {
    dirFile("valid-sdk-directory/sdk").mkdirs();
    commandRunner.run(new String[] {dir("valid-sdk-directory"), "log-test", "--debug"});
   
    String output = outputStream.toString("UTF-8");
    assertContains("warn-level", output);
    assertContains("info-level", output);
    assertContains("debug-level", output);
  }
 
  @Test
  public void externalCommandsDontShowAnyLogsEvenWhenDebugLoggingIsUsed() throws Exception {
    dirFile("valid-sdk-directory/sdk").mkdirs();
    commandRunner.run(new String[] {dir("valid-sdk-directory"), "external-log-test", "--debug"});
   
    String output = outputStream.toString("UTF-8");
    assertDoesNotContain("info-level", output);
    assertDoesNotContain("debug-level", output);
  }
 
  @Test
  public void externalCommandsCanHaveTheirLoggingEnabled() throws Exception {
    dirFile("valid-sdk-directory/sdk").mkdirs();
    commandRunner.run(new String[] {dir("valid-sdk-directory"), "external-log-test", "--pkg", "org.other, org.external", "--info"});
   
    String output = outputStream.toString("UTF-8");
    assertContains("warn-level", output);
    assertContains("info-level", output);
    assertDoesNotContain("debug-level", output);
  }
 
  @Test
  public void externalCommandsCanHaveTheirLoggingEnabledViaWildcard() throws Exception {
    dirFile("valid-sdk-directory/sdk").mkdirs();
    commandRunner.run(new String[] {dir("valid-sdk-directory"), "external-log-test", "--pkg", "ALL", "--info"});
   
    String output = outputStream.toString("UTF-8");
    assertContains("warn-level", output);
    assertContains("info-level", output);
    assertDoesNotContain("debug-level", output);
  }
 
  @Test
  public void errorsAndWarningsForAllPackagesAreDisplayedEvenIfNotLoggingThatPackage() throws Exception {
    dirFile("valid-sdk-directory/sdk").mkdirs();
    commandRunner.run(new String[] {dir("valid-sdk-directory"), "external-log-test", "--info"});
   
    String output = outputStream.toString("UTF-8");
    assertContains("error-level", output);
    assertContains("warn-level", output);
    assertDoesNotContain("info-level", output);
    assertDoesNotContain("debug-level", output);
  }
 
  @Test
  public void theClassResponsibleForEachLogLineCanBeDisplayed() throws Exception {
    dirFile("valid-sdk-directory/sdk").mkdirs();
    commandRunner.run(new String[] {dir("valid-sdk-directory"), "log-test", "--show-pkg"});
   
    String output = outputStream.toString("UTF-8");
    assertContains("org.bladerunnerjs.runner.LogTestCommand: warn-level", output);
  }
 
  @Test
  public void nonLogArgumentsAreReceivedCorrectly() throws Exception {
    dirFile("valid-sdk-directory/sdk").mkdirs();
    commandRunner.run(new String[] {dir("valid-sdk-directory"), "arg-test", "arg1", "arg2", "--info"});
    commandRunner.run(new String[] {dir("valid-sdk-directory"), "arg-test", "argX", "--info", "--show-pkg"});
   
    String output = outputStream.toString("UTF-8");
    assertContains("arg1, arg2", output);
    assertContains("argX", output);
  }
 
  @Test
  public void warningIsPrintedIfTheServletJarIsOutdated() throws Exception
  {
    dirFile("valid-sdk-directory/sdk").mkdirs();
    dirFile("valid-sdk-directory/sdk/libs/java").mkdirs();
    FileUtils.write( dirFile("valid-sdk-directory/sdk/libs/java/application/brjs-servlet-1.2.3.jar"), "some jar contents" );
    dirFile("valid-sdk-directory/apps/myApp/WEB-INF/lib").mkdirs();
    FileUtils.write( dirFile("valid-sdk-directory/apps/myApp/WEB-INF/lib/brjs-servlet-1.2.2.jar"), "old jar contents" );
   
    commandRunner.run(new String[] {dir("valid-sdk-directory"), "log-test"});
    String output = outputStream.toString("UTF-8");
    String warnMessage = String.format(UserCommandRunner.Messages.OUTDATED_JAR_MESSAGE, "myApp", "brjs-", "sdk/libs/java/application");
    assertContains(warnMessage, output);
  }
 
  //if I do an incorrect command I get the properties outputted in the right order
  @Test
  public void theCommandIsExecutedWithIncorrectParametersExpectCorrectPropertiesOrder() throws Exception {
    dirFile("valid-sdk-directory/sdk").mkdirs();
    commandRunner.run(new String[] {dir("valid-sdk-directory"), "multiple-args-command-test"});
   
    String output = systemOutputStream.toString("UTF-8"); //expected val
   
    String[] valuesInQuotes = StringUtils.substringsBetween(output , "\'", "\'");
   
    assertContains("arg1", valuesInQuotes[0]);
    assertContains("arg2", valuesInQuotes[1]);
    assertContains("arg3", valuesInQuotes[2]);
    assertContains("arg4", valuesInQuotes[3]);
    assertContains("arg5", valuesInQuotes[4]);
  }
 
  private File dirFile(String dirName) {
    return new File(tempDir, dirName);
  }
 
  private String dir(String dirName) {
    return dirFile(dirName).getPath();
  }

}
TOP

Related Classes of org.bladerunnerjs.runner.CommandRunnerTest

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.