import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
import java.io.*;
import java.nio.file.*;
public class MavenProjectCreationTest {
private final Path projectPath = Path.of("selenium-test");
private final Path pomFile = projectPath.resolve("pom.xml");
@Test
public void testMavenProjectCreationAndDependency() throws IOException, InterruptedException {
// Step 1: Run mvn archetype:generate command
ProcessBuilder generateBuilder = new ProcessBuilder(
"mvn", "archetype:generate",
"-DgroupId=com.example",
"-DartifactId=selenium-test",
"-DarchetypeArtifactId=maven-archetype-quickstart",
"-DinteractiveMode=false"
);
generateBuilder.redirectErrorStream(true);
Process generateProcess = generateBuilder.start();
String generateOutput = new String(generateProcess.getInputStream().readAllBytes());
int generateExitCode = generateProcess.waitFor();
assertEquals(0, generateExitCode, "Maven archetype generation failed");
// Step 2: Verify project directory exists
assertTrue(Files.exists(projectPath) && Files.isDirectory(projectPath), "Project directory does not exist");
// Step 3: Add Selenium dependency to pom.xml
String pomContent = Files.readString(pomFile);
String seleniumDependency = "<dependency>\n" +
" <groupId>org.seleniumhq.selenium</groupId>\n" +
" <artifactId>selenium-java</artifactId>\n" +
" <version>4.10.0</version>\n" +
" </dependency>";
if (!pomContent.contains("selenium-java")) {
int insertPos = pomContent.indexOf("</dependencies>");
if (insertPos == -1) {
// If no dependencies tag, add one before </project>
insertPos = pomContent.indexOf("</project>");
String dependenciesBlock = " <dependencies>\n" + seleniumDependency + "\n </dependencies>\n";
pomContent = pomContent.substring(0, insertPos) + dependenciesBlock + pomContent.substring(insertPos);
} else {
pomContent = pomContent.substring(0, insertPos) + seleniumDependency + "\n" + pomContent.substring(insertPos);
}
Files.writeString(pomFile, pomContent);
}
// Step 4: Verify pom.xml contains Selenium dependency
String updatedPom = Files.readString(pomFile);
assertTrue(updatedPom.contains("selenium-java"), "Selenium dependency not found in pom.xml");
// Step 5: Run mvn clean compile
ProcessBuilder compileBuilder = new ProcessBuilder("mvn", "clean", "compile");
compileBuilder.directory(projectPath.toFile());
compileBuilder.redirectErrorStream(true);
Process compileProcess = compileBuilder.start();
String compileOutput = new String(compileProcess.getInputStream().readAllBytes());
int compileExitCode = compileProcess.waitFor();
assertEquals(0, compileExitCode, "Maven compile failed. Output:\n" + compileOutput);
}
}
This test automates the manual steps to create a Maven project with Selenium dependency.
First, it runs the Maven archetype generate command using ProcessBuilder and checks the exit code to ensure success.
Then it verifies the project folder exists.
Next, it reads the pom.xml file and adds the Selenium dependency if missing, then verifies the dependency is present.
Finally, it runs mvn clean compile inside the project folder and asserts the build succeeds.
This approach uses explicit assertions, runs commands programmatically, and manipulates files safely, following best practices.