Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions itests/integration/IntegrationTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import java.nio.file.Path;
import java.util.Collections;
import java.util.List;
import java.util.Map;

public class IntegrationTest {
public static Map<String, Object> postBuild(Path temporaryJar,
Path pomFile,
List<Map.Entry<String, String>> repositories,
List<Map.Entry<String, Path>> dependencies,
List<String> comments,
boolean nativeImage) {
System.out.println("Integration... (out)");
System.err.println("Integration... (err)");
if (System.getProperty("failintegration") != null) {
throw new RuntimeException("Failing integration...");
} else {
System.out.println("Integration OK (out)");
System.err.println("Integration OK (err)");
return Collections.emptyMap();
}
}
}
9 changes: 9 additions & 0 deletions itests/integration/inttest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@

//SOURCES IntegrationTest.java
//FILES META-INF/jbang-integration.list=jb-int.list

class inttest {
public static void main(String... args) {
System.out.println("Integration test");
}
}
1 change: 1 addition & 0 deletions itests/integration/jb-int.list
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
IntegrationTest
75 changes: 75 additions & 0 deletions src/it/java/dev/jbang/it/IntegrationIT.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package dev.jbang.it;

import static dev.jbang.it.CommandResultAssert.assertThat;

import org.junit.jupiter.api.Test;

public class IntegrationIT extends BaseIT {

// Feature: integration

// Scenario: integration success
// * command('jbang integration/inttest.java')
// * match err !contains 'Integration... (out)'
// * match err contains 'Integration... (err)'
// * match out contains "Integration test"
//
@Test
public void testIntegrationSuccess() {
assertThat(shell("jbang integration/inttest.java"))
.succeeded()
.errNotContains("Integration... (out)")
.errContains("Integration... (err)")
.outContains("Integration test");
}

// Scenario: integration success, verbose
// * command('jbang --verbose integration/inttest.java')
// * match err contains 'Integration... (out)'
// * match err contains 'Integration... (err)'
// * match out contains "Integration test"
//
@Test
public void testIntegrationSuccessVerbose() {
assertThat(shell("jbang --verbose integration/inttest.java"))
.succeeded()
.errContains("Integration... (out)")
.errContains("Integration... (err)")
.outContains("Integration test");
}

// Scenario: integration failure
// * command('jbang -Dfailintegration=1 integration/inttest.java')
// * match err !contains 'Integration... (out)'
// * match err contains 'Integration... (err)'
// * match err contains 'Issue running postBuild()'
// * match err !contains 'Failing integration...'
// * match exit == 1
@Test
public void testIntegrationFailure() {
assertThat(shell("jbang -Dfailintegration=1 integration/inttest.java"))
.exitedWith(1)
.errNotContains("Integration... (out)")
.errContains("Integration... (err)")
.errContains("Issue running postBuild()")
.errNotContains("Failing integration...");
}

//
// Scenario: integration failure, verbose
// * command('jbang -Dfailintegration=1 --verbose integration/inttest.java')
// * match err contains 'Integration... (out)'
// * match err contains 'Integration... (err)'
// * match err contains 'Issue running postBuild()'
// * match err contains 'Failing integration...'
// * match exit == 1
@Test
public void testIntegrationFailureVerbose() {
assertThat(shell("jbang -Dfailintegration=1 --verbose integration/inttest.java"))
.exitedWith(1)
.errContains("Integration... (out)")
.errContains("Integration... (err)")
.errContains("Issue running postBuild()")
.errContains("Failing integration...");
}
}
13 changes: 7 additions & 6 deletions src/main/java/dev/jbang/spi/IntegrationManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import java.nio.file.Path;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import javax.annotation.Nonnull;

Expand Down Expand Up @@ -85,7 +86,7 @@ public static IntegrationResult runIntegrations(BuildContext ctx) {
ClassLoader old = Thread.currentThread().getContextClassLoader();
PrintStream oldout = System.out;
try {
URLClassLoader integrationCl = getClassLoader(deps.values());
URLClassLoader integrationCl = getClassLoader(compileDir, deps.values());
Thread.currentThread().setContextClassLoader(integrationCl);
String requestedJavaVersion = prj.getJavaVersion();
Set<String> classNames = loadIntegrationClassNames(integrationCl);
Expand Down Expand Up @@ -118,8 +119,9 @@ public static IntegrationResult runIntegrations(BuildContext ctx) {
}

@Nonnull
private static URLClassLoader getClassLoader(Collection<Path> deps) {
URL[] urls = deps.stream().map(path -> {
private static URLClassLoader getClassLoader(Path classes, Collection<Path> deps) {
Stream<Path> paths = Stream.concat(Stream.of(classes), deps.stream());
URL[] urls = paths.map(path -> {
try {
return path.toUri().toURL();
} catch (MalformedURLException e) {
Expand Down Expand Up @@ -216,8 +218,7 @@ public void write(int b) {
}

private static IntegrationResult runIntegrationExternal(IntegrationInput input,
Map<String, String> properties,
Jdk jdk)
Map<String, String> properties, Jdk jdk)
throws Exception {
Gson parser = gsonb.create();
Util.infoMsg("Running external post build for " + input.integrationClassName);
Expand Down Expand Up @@ -288,7 +289,7 @@ public static void main(String... args) {
String output = "";
boolean ok = false;
try {
URLClassLoader integrationCl = getClassLoader(input.dependencies.values());
URLClassLoader integrationCl = getClassLoader(input.classes, input.dependencies.values());
Thread.currentThread().setContextClassLoader(integrationCl);
IntegrationResult result = runIntegrationEmbedded(input, integrationCl);
output = parser.toJson(result);
Expand Down
Loading