Skip to content
Merged
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
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ java -jar target/selenium-boot-migrator.jar migrate ./my-selenium-project --out
The output directory must not already exist and cannot be the source directory or one of its
children. Migration output lists applied changes, compatibility notes, and any findings still
requiring manual review. The build descriptor rewrite (`pom.xml`, `build.gradle`, `build.gradle.kts`)
uses the published Selenium Boot `3.10.0` release.
uses the published Selenium Boot `3.11.0` release.

`analyze` reports counts per rule, what maps cleanly vs. needs review, and an *estimated* confidence.
The estimate is a guide, not a guarantee. The report also lists dependencies found in Maven
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/seleniumboot/migrator/Migrator.java
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
/** Copies a project and applies only transformations that can be performed mechanically. */
public final class Migrator {

private static final String SELENIUM_BOOT_VERSION = "3.10.0";
private static final String SELENIUM_BOOT_VERSION = "3.11.0";
private static final Set<String> EXCLUDED_DIRECTORIES = Set.of(".git", "target", "build", ".gradle", "node_modules");
private static final Pattern GRADLE_STRING_DEPENDENCY = Pattern.compile(
"(?m)^(?!(?:\\s*//|\\s*/\\*|\\s*\\*))(.*?)(?:(\"\"\"|['\"]))\\s*org\\.seleniumhq\\.selenium:selenium-java(?::[^'\"\\r\\n]+)?\\s*\\2");
Expand Down
4 changes: 2 additions & 2 deletions src/test/java/com/seleniumboot/migrator/CliTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -216,8 +216,8 @@ void migratesGradleProjectViaCli(@TempDir Path temp) throws Exception {
RunResult result = runCli("migrate", fixture("gradle-groovy").toString(), "--out", output.toString());
assertEquals(0, result.exitCode());
assertTrue(result.out().contains("Migrated copy:"));
assertTrue(result.out().contains("[applied] build.gradle: replaced selenium-java with io.github.seleniumboot:selenium-boot:3.10.0"));
assertTrue(Files.readString(output.resolve("build.gradle")).contains("io.github.seleniumboot:selenium-boot:3.10.0"));
assertTrue(result.out().contains("[applied] build.gradle: replaced selenium-java with io.github.seleniumboot:selenium-boot:3.11.0"));
assertTrue(Files.readString(output.resolve("build.gradle")).contains("io.github.seleniumboot:selenium-boot:3.11.0"));
}

@Test
Expand Down
44 changes: 22 additions & 22 deletions src/test/java/com/seleniumboot/migrator/MigratorTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ class Utility { int value; }
String pom = Files.readString(output.resolve("pom.xml"));
assertTrue(pom.contains("<groupId>io.github.seleniumboot</groupId>"));
assertTrue(pom.contains("<artifactId>selenium-boot</artifactId>"));
assertTrue(pom.contains("<version>3.10.0</version>"));
assertTrue(pom.contains("<version>3.11.0</version>"));
assertTrue(result.remaining().findings().stream().anyMatch(f -> f.ruleId().equals("MIG-014")));
assertTrue(result.remaining().findings().stream().anyMatch(f -> f.ruleId().equals("MIG-014")
&& f.file().endsWith("DriverFactory.java")));
Expand Down Expand Up @@ -157,7 +157,7 @@ class Caller {
.filter(finding -> finding.ruleId().equals("MIG-017")
&& finding.file().endsWith("Caller.java"))
.count());
assertTrue(Files.readString(output.resolve("pom.xml")).contains("<version>3.10.0</version>"));
assertTrue(Files.readString(output.resolve("pom.xml")).contains("<version>3.11.0</version>"));

assertTrue(Files.isRegularFile(output.resolve("MIGRATION_REPORT.md")));
String migrationReport = Files.readString(output.resolve("MIGRATION_REPORT.md"));
Expand Down Expand Up @@ -217,13 +217,13 @@ public class DriverFactory {
assertFalse(Files.exists(output.resolve("src/main/java/fixture/DriverFactory.java")));

String gradle = Files.readString(output.resolve("build.gradle"));
assertTrue(gradle.contains("implementation 'io.github.seleniumboot:selenium-boot:3.10.0'"));
assertTrue(gradle.contains("implementation 'io.github.seleniumboot:selenium-boot:3.11.0'"));
assertTrue(gradle.contains("testImplementation 'org.testng:testng:7.10.2'"));
assertFalse(gradle.contains("org.seleniumhq.selenium:selenium-java"));

assertTrue(result.applied().contains("build.gradle: replaced selenium-java with io.github.seleniumboot:selenium-boot:3.10.0"));
assertTrue(result.applied().contains("build.gradle: replaced selenium-java with io.github.seleniumboot:selenium-boot:3.11.0"));
assertTrue(result.remaining().detectedTechnologies().contains("Dependency: org.seleniumhq.selenium:selenium-java:4.21.0"));
assertFalse(result.remaining().detectedTechnologies().contains("Dependency: io.github.seleniumboot:selenium-boot:3.10.0"));
assertFalse(result.remaining().detectedTechnologies().contains("Dependency: io.github.seleniumboot:selenium-boot:3.11.0"));
assertTrue(result.remaining().detectedTechnologies().contains("Dependency: org.testng:testng:7.10.2"));
assertTrue(result.remaining().detectedTechnologies().contains("Build system: Gradle (Groovy DSL)"));
}
Expand All @@ -250,13 +250,13 @@ void migratesGradleKotlinProjectWithoutChangingOriginal() throws Exception {
original.forEach((path, bytes) -> assertArrayEquals(bytes, read(project.resolve(path))));

String gradleKts = Files.readString(output.resolve("build.gradle.kts"));
assertTrue(gradleKts.contains("implementation(\"io.github.seleniumboot:selenium-boot:3.10.0\")"));
assertTrue(gradleKts.contains("implementation(\"io.github.seleniumboot:selenium-boot:3.11.0\")"));
assertTrue(gradleKts.contains("testImplementation(\"org.junit.jupiter:junit-jupiter:5.10.2\")"));
assertFalse(gradleKts.contains("org.seleniumhq.selenium:selenium-java"));

assertTrue(result.applied().contains("build.gradle.kts: replaced selenium-java with io.github.seleniumboot:selenium-boot:3.10.0"));
assertTrue(result.applied().contains("build.gradle.kts: replaced selenium-java with io.github.seleniumboot:selenium-boot:3.11.0"));
assertTrue(result.remaining().detectedTechnologies().contains("Dependency: org.seleniumhq.selenium:selenium-java:4.21.0"));
assertFalse(result.remaining().detectedTechnologies().contains("Dependency: io.github.seleniumboot:selenium-boot:3.10.0"));
assertFalse(result.remaining().detectedTechnologies().contains("Dependency: io.github.seleniumboot:selenium-boot:3.11.0"));
assertTrue(result.remaining().detectedTechnologies().contains("Dependency: org.junit.jupiter:junit-jupiter:5.10.2"));
assertTrue(result.remaining().detectedTechnologies().contains("Build system: Gradle (Kotlin DSL)"));
}
Expand All @@ -266,14 +266,14 @@ void migratesFromGradleFixtures() throws Exception {
Path groovyFixture = Path.of(MigratorTest.class.getResource("/gradle-groovy").toURI());
Path groovyOutput = temp.resolve("fixture-groovy-migrated");
Migrator.Result groovyResult = new Migrator().migrate(groovyFixture, groovyOutput);
assertTrue(groovyResult.applied().contains("build.gradle: replaced selenium-java with io.github.seleniumboot:selenium-boot:3.10.0"));
assertTrue(Files.readString(groovyOutput.resolve("build.gradle")).contains("io.github.seleniumboot:selenium-boot:3.10.0"));
assertTrue(groovyResult.applied().contains("build.gradle: replaced selenium-java with io.github.seleniumboot:selenium-boot:3.11.0"));
assertTrue(Files.readString(groovyOutput.resolve("build.gradle")).contains("io.github.seleniumboot:selenium-boot:3.11.0"));

Path kotlinFixture = Path.of(MigratorTest.class.getResource("/gradle-kotlin").toURI());
Path kotlinOutput = temp.resolve("fixture-kotlin-migrated");
Migrator.Result kotlinResult = new Migrator().migrate(kotlinFixture, kotlinOutput);
assertTrue(kotlinResult.applied().contains("build.gradle.kts: replaced selenium-java with io.github.seleniumboot:selenium-boot:3.10.0"));
assertTrue(Files.readString(kotlinOutput.resolve("build.gradle.kts")).contains("io.github.seleniumboot:selenium-boot:3.10.0"));
assertTrue(kotlinResult.applied().contains("build.gradle.kts: replaced selenium-java with io.github.seleniumboot:selenium-boot:3.11.0"));
assertTrue(Files.readString(kotlinOutput.resolve("build.gradle.kts")).contains("io.github.seleniumboot:selenium-boot:3.11.0"));
}

@Test
Expand All @@ -300,7 +300,7 @@ void migratesSeleniumJavaInGradleVersionCatalog() throws Exception {
Migrator.Result result = new Migrator().migrate(project, output);

String toml = Files.readString(output.resolve("gradle/libs.versions.toml"));
assertTrue(toml.contains("selenium-java = { module = \"io.github.seleniumboot:selenium-boot\", version = \"3.10.0\" } # main"));
assertTrue(toml.contains("selenium-java = { module = \"io.github.seleniumboot:selenium-boot\", version = \"3.11.0\" } # main"));
assertTrue(toml.contains("# selenium-java = \"org.seleniumhq.selenium:selenium-java:1.0\""), "comment untouched");
assertTrue(toml.contains("selenium-chrome-driver = { module = \"org.seleniumhq.selenium:selenium-chrome-driver\""), "other entries untouched");
assertTrue(toml.contains("junit = \"org.junit.jupiter:junit-jupiter:5.10.2\""));
Expand All @@ -323,8 +323,8 @@ void migratesCatalogStringAndGroupNameForms() throws Exception {
""");
new Migrator().migrate(project, output);
String toml = Files.readString(output.resolve("gradle/libs.versions.toml"));
assertTrue(toml.contains("sel = { module = \"io.github.seleniumboot:selenium-boot\", version = \"3.10.0\" }"));
assertTrue(toml.contains("sel2 = { module = \"io.github.seleniumboot:selenium-boot\", version = \"3.10.0\" }"));
assertTrue(toml.contains("sel = { module = \"io.github.seleniumboot:selenium-boot\", version = \"3.11.0\" }"));
assertTrue(toml.contains("sel2 = { module = \"io.github.seleniumboot:selenium-boot\", version = \"3.11.0\" }"));
assertFalse(toml.contains("org.seleniumhq.selenium:selenium-java"));
}

Expand Down Expand Up @@ -414,19 +414,19 @@ void supportsVariousGradleSyntaxStyles() throws Exception {
}
""");
Migrator.Result result = new Migrator().migrate(project, output);
assertTrue(result.applied().contains("build.gradle: replaced selenium-java with io.github.seleniumboot:selenium-boot:3.10.0"));
assertTrue(result.applied().contains("build.gradle: replaced selenium-java with io.github.seleniumboot:selenium-boot:3.11.0"));

String migrated = Files.readString(output.resolve("build.gradle"));
assertTrue(migrated.contains("// implementation 'org.seleniumhq.selenium:selenium-java:4.21.0'"));
assertTrue(migrated.contains("/* testImplementation 'org.seleniumhq.selenium:selenium-java:4.21.0' */"));
assertTrue(migrated.contains("* implementation 'org.seleniumhq.selenium:selenium-java:4.21.0'"));

assertTrue(migrated.contains("implementation \"io.github.seleniumboot:selenium-boot:3.10.0\""));
assertTrue(migrated.contains("api \"io.github.seleniumboot:selenium-boot:3.10.0\""));
assertTrue(migrated.contains("testImplementation group: 'io.github.seleniumboot', name: 'selenium-boot', version: '3.10.0'"));
assertTrue(migrated.contains("compileOnly name: 'selenium-boot', group: 'io.github.seleniumboot', version: '3.10.0'"));
assertTrue(migrated.contains("runtimeOnly 'io.github.seleniumboot', 'selenium-boot', '3.10.0'"));
assertTrue(migrated.contains("implementation('io.github.seleniumboot:selenium-boot:3.10.0') {"));
assertTrue(migrated.contains("implementation \"io.github.seleniumboot:selenium-boot:3.11.0\""));
assertTrue(migrated.contains("api \"io.github.seleniumboot:selenium-boot:3.11.0\""));
assertTrue(migrated.contains("testImplementation group: 'io.github.seleniumboot', name: 'selenium-boot', version: '3.11.0'"));
assertTrue(migrated.contains("compileOnly name: 'selenium-boot', group: 'io.github.seleniumboot', version: '3.11.0'"));
assertTrue(migrated.contains("runtimeOnly 'io.github.seleniumboot', 'selenium-boot', '3.11.0'"));
assertTrue(migrated.contains("implementation('io.github.seleniumboot:selenium-boot:3.11.0') {"));
assertTrue(migrated.contains("exclude group: 'org.hamcrest'"));
}

Expand Down
Loading