package aQute.bnd.main; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.PrintStream; import aQute.bnd.osgi.About; import aQute.bnd.osgi.Jar; import junit.framework.TestCase; public class TestBndMain extends TestCase { private final ByteArrayOutputStream capturedStdOut = new ByteArrayOutputStream(); private PrintStream originalStdOut; private final ByteArrayOutputStream capturedStdErr = new ByteArrayOutputStream(); private PrintStream originalStdErr; private String version; @Override protected void setUp() throws Exception { super.setUp(); version = About.CURRENT.getWithoutQualifier().toString(); capturedStdOut.reset(); originalStdOut = System.out; System.setOut(new PrintStream(capturedStdOut)); capturedStdErr.reset(); originalStdErr = System.err; System.setErr(new PrintStream(capturedStdErr)); } @Override protected void tearDown() throws Exception { System.setErr(originalStdErr); System.setOut(originalStdOut); super.tearDown(); } public void testRunStandalone() throws Exception { bnd.mainNoExit(new String[] { "run", "testdata/standalone/standalone.bndrun" }); expectNoError(); expectOutput("Gesundheit!"); } public void testRunWorkspace() throws Exception { bnd.mainNoExit(new String[] { "run", "testdata/workspace/p/workspace.bndrun" }); expectNoError(); expectOutput("Gesundheit!"); } public void testPackageBndrunStandalone() throws Exception { String output = "generated/tmp/export-standalone.jar"; bnd.mainNoExit(new String[] { "package", "-o", output, "testdata/standalone/standalone.bndrun" }); expectNoError(); // validate exported jar content try (Jar result = new Jar(new File(output))) { expectJarEntry(result, "jar/biz.aQute.launcher-" + version + ".jar"); expectJarEntry(result, "jar/org.apache.felix.framework-5.2.0.jar"); expectJarEntry(result, "jar/printAndExit-1.0.0.jar"); } } public void testPackageBndrunWorkspace() throws Exception { String output = "generated/tmp/export-workspace.jar"; bnd.mainNoExit(new String[] { "package", "-o", output, "testdata/workspace/p/workspace.bndrun" }); expectNoError(); // validate exported jar content try (Jar result = new Jar(new File(output))) { expectJarEntry(result, "jar/biz.aQute.launcher-" + version + ".jar"); expectJarEntry(result, "jar/org.apache.felix.framework-5.2.0.jar"); expectJarEntry(result, "jar/printAndExit-1.0.0.jar"); } } public void testPackageProject() throws Exception { String output = "generated/tmp/export-workspace-project.jar"; bnd.mainNoExit(new String[] { "package", "-o", output, "testdata/workspace/p2" }); expectNoError(); // validate exported jar content try (Jar result = new Jar(new File(output))) { expectJarEntry(result, "jar/biz.aQute.launcher-" + version + ".jar"); expectJarEntry(result, "jar/org.apache.felix.framework-5.2.0.jar"); expectJarEntry(result, "jar/p2.jar"); } } private void expectOutput(String expected) { assertEquals("wrong output", expected, capturedStdOut.toString().trim()); } private void expectNoError() { assertEquals("non-empty error output", "", capturedStdErr.toString().trim()); } private void expectJarEntry(Jar jar, String path) { assertNotNull("missing entry in jar: " + path, jar.getResource(path)); } }