package de.saumya.mojo.ruby;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.codehaus.plexus.util.FileUtils;
import de.saumya.mojo.ruby.gems.GemsConfig;
import de.saumya.mojo.ruby.script.GemScriptFactory;
import de.saumya.mojo.ruby.script.ScriptFactory;
public class EmbeddedLauncherTest extends TestCase {
private static final String SEP = System.getProperty("line.separator");
public EmbeddedLauncherTest(final String testName) {
super(testName);
}
public static Test suite() {
return new TestSuite(EmbeddedLauncherTest.class);
}
private ScriptFactory factory;
private String expected;
private File home;
private File path;
@Override
public void setUp() throws Exception {
final List<String> classpathElements = new ArrayList<String>();
classpathElements.add(".");
// setup local rubygems repository
this.home = new File("target");
this.path = new File("target/rubygems");
GemsConfig config = new GemsConfig();
config.setGemHome(home);
config.addGemPath(path);
this.path.mkdirs();
this.expected = "onetwothree" + SEP + this.home.getAbsolutePath() + SEP
+ this.path.getAbsolutePath() + SEP;
final Logger logger = new NoopLogger();
// no classrealm
this.factory = new GemScriptFactory(logger,
null,
new File(""),
new File(""),
classpathElements,
false, config);
// for eclipse
final File output = new File("target/test-classes");
if (!output.exists()) {
FileUtils.copyDirectory(new File("src/test/resources"), output);
}
}
public void testExecution() throws Exception {
this.factory.newArguments()
.addArg("target/test-classes/test.rb")
.addArg("one")
.addArg("two")
.addArg("three")
.execute();
File f = new File("target/test-classes/test.rb.txt");
if (!f.exists()) {
// in this case GEM_HOME was set in system environment
f = new File("target/test-classes/test.rb-gem.txt");
}
assertEquals("onetwothree", FileUtils.fileRead(f).trim() );
}
public void testExecutionInTarget() throws Exception {
final File f;
if (System.getenv("GEM_HOME") != null) {
f = new File("target/test-classes/test.rb-gem.txt");
}
else {
f = new File("target/test-classes/test.rb.txt");
}
f.delete();
this.factory.newArguments()
.addArg("test-classes/test.rb")
.addArg("one")
.addArg("two")
.addArg("three")
.executeIn(new File("target"));
assertEquals("onetwothree", FileUtils.fileRead(f)
.replace( SEP, "--n--")
.replaceFirst("--n--.*", ""));
}
public void testExecutionWithOutput() throws Exception {
final File output = new File("target/test-classes/test_with_output.rb.txt");
output.delete();
this.factory.newArguments()
.addArg("target/test-classes/test_with_output.rb")
.addArg("one")
.addArg("two")
.addArg("three")
.execute(output);
assertEquals("onetwothree", FileUtils.fileRead(output)
.replace("\n", "--n--")
.replaceFirst("--n--.*", ""));
}
public void testExecutionWithOutputInTarget() throws Exception {
final File output = new File("target/test-classes/test_with_output.rb.txt");
output.delete();
this.factory.newArguments()
.addArg("test-classes/test_with_output.rb")
.addArg("one")
.addArg("two")
.addArg("three")
.executeIn(new File("target"), output);
assertEquals("onetwothree", FileUtils.fileRead(output)
.replace("\n", "--n--")
.replaceFirst("--n--.*", ""));
}
public void testScript() throws Exception {
this.factory.newScriptFromResource("test.rb")
.addArg("one")
.addArg("two")
.addArg("three")
.execute();
assertEquals(this.expected,
FileUtils.fileRead("target/test-classes/test.rb-gem.txt"));
}
public void testScriptInTarget() throws Exception {
this.factory.newScriptFromResource("test.rb")
.addArg("one")
.addArg("two")
.addArg("three")
.executeIn(new File("target"));
assertEquals(this.expected,
FileUtils.fileRead("target/test-classes/test.rb-gem.txt") );
}
public void testScriptWithOutput() throws Exception {
final File output = new File("target/test-classes/test_with_output.rb-gem.txt");
output.delete();
this.factory.newScriptFromResource("test_with_output.rb")
.addArg("one")
.addArg("two")
.addArg("three")
.execute(output);
assertEquals(this.expected, FileUtils.fileRead(output).replaceAll( "\\s", SEP ) );
}
public void testScriptWithOutputInTarget() throws Exception {
final File output = new File("target/test-classes/test_with_output.rb-gem.txt");
output.delete();
this.factory.newScriptFromResource("test_with_output.rb")
.addArg("one")
.addArg("two")
.addArg("three")
.executeIn(new File("target"), output);
assertEquals(this.expected, FileUtils.fileRead(output).replaceAll( "\\s", SEP ) );
}
public void testSimpleScriptInTarget() throws Exception {
final File output = new File("target/simple.txt");
output.delete();
this.factory.newScript("File.open('simple.txt', 'w') { |f| f.puts ARGV.join }")
.addArg("one")
.addArg("two")
.addArg("three")
.executeIn(new File("target"));
assertEquals("onetwothree", FileUtils.fileRead(output).trim() );
}
public void testSimpleScriptWithOutputInTarget() throws Exception {
final File output = new File("target/test-classes/simple.txt");
this.factory.newScript("puts ARGV.join")
.addArg("one")
.addArg("two")
.addArg("three")
.executeIn(new File("target"), output);
assertEquals("onetwothree", FileUtils.fileRead(output).trim() );
}
public void testGemHomeAndGemPath() throws Exception {
final File output = new File("target/test-classes/gem.txt");
this.factory.newScriptFromResource("META-INF/jruby.home/bin/gem")
.addArg("env")
.execute(output);
final String[] lines = FileUtils.fileRead(output).split( "\n" );
int countDir = 0;
int countHome = 0;
int countPath = 0;
String home = this.home.getAbsolutePath();
home = home.replaceAll("\\\\", "/" ).toLowerCase();
String path = this.path.getAbsolutePath();
path = path.replaceAll("\\\\", "/" ).toLowerCase();
for (final String line : lines) {
if (line.toLowerCase().contains("directory: " + home ) ) {
countDir++;
}
if (line.toLowerCase().contains(home) && !line.toLowerCase().contains(path) ) {
countHome++;
}
if (line.toLowerCase().contains(path)) {
countPath++;
}
}
assertEquals(2, countDir);
assertEquals(3, countHome);
assertEquals(1, countPath);
}
}