Skip to content

Commit 5166131

Browse files
mridangclaude
andcommitted
refactor: extract Docker image and generator name into per-language mixin interfaces
Add RubySpec, PythonSpec, PhpSpec, NodeSpec, JavaSpec, and CSharpSpec interfaces with default methods for getGeneratorName(), getRuntimeImage(), and getDockerImage(). Each language's Docker image version is now declared once instead of being duplicated across every spec. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent b65e323 commit 5166131

39 files changed

Lines changed: 137 additions & 366 deletions

src/spec/java/io/github/mridang/codegen/spec/csharp/CSharpBuildSpec.java

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import org.junit.jupiter.api.Test;
88
import org.openapitools.codegen.CodegenConstants;
99
import org.testcontainers.junit.jupiter.Testcontainers;
10-
import org.testcontainers.utility.DockerImageName;
1110

1211
/**
1312
* Verifies that generated C# code compiles cleanly with the strictest .NET SDK settings. Uses
@@ -16,17 +15,7 @@
1615
*/
1716
@SuppressWarnings("NewClassNamingConvention")
1817
@Testcontainers
19-
public class CSharpBuildSpec extends AbstractIntegrationSpec {
20-
21-
@Override
22-
protected String getGeneratorName() {
23-
return "csharp-plus";
24-
}
25-
26-
@Override
27-
protected DockerImageName getRuntimeImage() {
28-
return DockerImageName.parse("mcr.microsoft.com/dotnet/sdk:9.0");
29-
}
18+
public class CSharpBuildSpec extends AbstractIntegrationSpec implements CSharpSpec {
3019

3120
@Override
3221
protected String[] getBuildCommands() {

src/spec/java/io/github/mridang/codegen/spec/csharp/CSharpClientSpec.java

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,10 @@
88
import java.util.Map;
99
import org.openapitools.codegen.CodegenConstants;
1010
import org.testcontainers.junit.jupiter.Testcontainers;
11-
import org.testcontainers.utility.DockerImageName;
1211

1312
@SuppressWarnings("NewClassNamingConvention")
1413
@Testcontainers
15-
public class CSharpClientSpec extends AbstractClientSpec {
16-
17-
@Override
18-
protected String getGeneratorName() {
19-
return "csharp-plus";
20-
}
21-
22-
@Override
23-
protected DockerImageName getRuntimeImage() {
24-
return DockerImageName.parse("mcr.microsoft.com/dotnet/sdk:9.0");
25-
}
14+
public class CSharpClientSpec extends AbstractClientSpec implements CSharpSpec {
2615

2716
@Override
2817
protected String[] getBuildCommands() {

src/spec/java/io/github/mridang/codegen/spec/csharp/CSharpFormattingSpec.java

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,14 @@
88
import org.junit.jupiter.api.Test;
99
import org.openapitools.codegen.CodegenConstants;
1010
import org.testcontainers.junit.jupiter.Testcontainers;
11-
import org.testcontainers.utility.DockerImageName;
1211

1312
/**
1413
* Verifies that generated C# code is already properly formatted according to
1514
* CSharpier. If this test fails, the C# templates need to be fixed.
1615
*/
1716
@SuppressWarnings("NewClassNamingConvention")
1817
@Testcontainers
19-
public class CSharpFormattingSpec extends AbstractFormattingSpec {
20-
21-
@Override
22-
protected String getGeneratorName() {
23-
return "csharp-plus";
24-
}
25-
26-
@Override
27-
protected DockerImageName getRuntimeImage() {
28-
return DockerImageName.parse("mcr.microsoft.com/dotnet/sdk:9.0");
29-
}
18+
public class CSharpFormattingSpec extends AbstractFormattingSpec implements CSharpSpec {
3019

3120
@Override
3221
protected String[] getBuildCommands() {

src/spec/java/io/github/mridang/codegen/spec/csharp/CSharpReservedWordsSpec.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,7 @@
33
import io.github.mridang.codegen.spec.AbstractReservedWordsSpec;
44

55
@SuppressWarnings("NewClassNamingConvention")
6-
class CSharpReservedWordsSpec extends AbstractReservedWordsSpec {
7-
8-
@Override
9-
protected String getDockerImage() {
10-
return "mcr.microsoft.com/dotnet/sdk:9.0";
11-
}
6+
class CSharpReservedWordsSpec extends AbstractReservedWordsSpec implements CSharpSpec {
127

138
@Override
149
protected String getDumpScriptResource() {
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package io.github.mridang.codegen.spec.csharp;
2+
3+
import org.testcontainers.utility.DockerImageName;
4+
5+
interface CSharpSpec {
6+
7+
default String getGeneratorName() {
8+
return "csharp-plus";
9+
}
10+
11+
default DockerImageName getRuntimeImage() {
12+
return DockerImageName.parse("mcr.microsoft.com/dotnet/sdk:9.0");
13+
}
14+
15+
default String getDockerImage() {
16+
return "mcr.microsoft.com/dotnet/sdk:9.0";
17+
}
18+
}

src/spec/java/io/github/mridang/codegen/spec/csharp/CSharpStaticAnalysisSpec.java

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import org.junit.jupiter.api.Test;
88
import org.openapitools.codegen.CodegenConstants;
99
import org.testcontainers.junit.jupiter.Testcontainers;
10-
import org.testcontainers.utility.DockerImageName;
1110

1211
/**
1312
* Verifies that generated C# code passes Roslyn static analysis. Uses dotnet build with warnings as
@@ -16,17 +15,7 @@
1615
*/
1716
@SuppressWarnings("NewClassNamingConvention")
1817
@Testcontainers
19-
public class CSharpStaticAnalysisSpec extends AbstractIntegrationSpec {
20-
21-
@Override
22-
protected String getGeneratorName() {
23-
return "csharp-plus";
24-
}
25-
26-
@Override
27-
protected DockerImageName getRuntimeImage() {
28-
return DockerImageName.parse("mcr.microsoft.com/dotnet/sdk:9.0");
29-
}
18+
public class CSharpStaticAnalysisSpec extends AbstractIntegrationSpec implements CSharpSpec {
3019

3120
@Override
3221
protected String[] getBuildCommands() {

src/spec/java/io/github/mridang/codegen/spec/java/JavaBuildSpec.java

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import org.junit.jupiter.api.Test;
1313
import org.openapitools.codegen.CodegenConstants;
1414
import org.testcontainers.junit.jupiter.Testcontainers;
15-
import org.testcontainers.utility.DockerImageName;
1615

1716
/**
1817
* Verifies that generated Java code compiles cleanly under Error Prone and NullAway with zero
@@ -21,22 +20,12 @@
2120
*/
2221
@SuppressWarnings("NewClassNamingConvention")
2322
@Testcontainers
24-
public class JavaBuildSpec extends AbstractIntegrationSpec {
23+
public class JavaBuildSpec extends AbstractIntegrationSpec implements JavaSpec {
2524

2625
private static final String PACKAGE_NAME = "com.example.petstore";
2726
private static final Path TEST_PROJECT_PATH =
2827
Paths.get("src/spec/resources/testprojects/javatest");
2928

30-
@Override
31-
protected String getGeneratorName() {
32-
return "java-plus";
33-
}
34-
35-
@Override
36-
protected DockerImageName getRuntimeImage() {
37-
return DockerImageName.parse("maven:3.9-eclipse-temurin-21");
38-
}
39-
4029
@Override
4130
protected String[] getBuildCommands() {
4231
return new String[] {"mvn compile -B"};

src/spec/java/io/github/mridang/codegen/spec/java/JavaClientSpec.java

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,13 @@
88
import java.util.Map;
99
import org.openapitools.codegen.CodegenConstants;
1010
import org.testcontainers.junit.jupiter.Testcontainers;
11-
import org.testcontainers.utility.DockerImageName;
1211

1312
@SuppressWarnings("NewClassNamingConvention")
1413
@Testcontainers
15-
public class JavaClientSpec extends AbstractClientSpec {
14+
public class JavaClientSpec extends AbstractClientSpec implements JavaSpec {
1615

1716
private static final String PACKAGE_NAME = "com.example.petstore";
1817

19-
@Override
20-
protected String getGeneratorName() {
21-
return "java-plus";
22-
}
23-
24-
@Override
25-
protected DockerImageName getRuntimeImage() {
26-
return DockerImageName.parse("maven:3.9-eclipse-temurin-21");
27-
}
28-
2918
@Override
3019
protected String[] getBuildCommands() {
3120
return new String[] {

src/spec/java/io/github/mridang/codegen/spec/java/JavaFormattingSpec.java

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,28 +7,17 @@
77
import org.junit.jupiter.api.Test;
88
import org.openapitools.codegen.CodegenConstants;
99
import org.testcontainers.junit.jupiter.Testcontainers;
10-
import org.testcontainers.utility.DockerImageName;
1110

1211
/**
1312
* Verifies that generated Java code is already properly formatted according to google-java-format.
1413
* If this test fails, the Java templates need to be fixed.
1514
*/
1615
@SuppressWarnings("NewClassNamingConvention")
1716
@Testcontainers
18-
public class JavaFormattingSpec extends AbstractFormattingSpec {
17+
public class JavaFormattingSpec extends AbstractFormattingSpec implements JavaSpec {
1918

2019
private static final String PACKAGE_NAME = "com.example.petstore";
2120

22-
@Override
23-
protected String getGeneratorName() {
24-
return "java-plus";
25-
}
26-
27-
@Override
28-
protected DockerImageName getRuntimeImage() {
29-
return DockerImageName.parse("maven:3.9-eclipse-temurin-21");
30-
}
31-
3221
@Override
3322
protected String[] getBuildCommands() {
3423
return new String[] {"mvn fmt:check -B"};

src/spec/java/io/github/mridang/codegen/spec/java/JavaReservedWordsSpec.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,7 @@
33
import io.github.mridang.codegen.spec.AbstractReservedWordsSpec;
44

55
@SuppressWarnings("NewClassNamingConvention")
6-
class JavaReservedWordsSpec extends AbstractReservedWordsSpec {
7-
8-
@Override
9-
protected String getDockerImage() {
10-
return "eclipse-temurin:17-jdk-jammy";
11-
}
6+
class JavaReservedWordsSpec extends AbstractReservedWordsSpec implements JavaSpec {
127

138
@Override
149
protected String getDumpScriptResource() {

0 commit comments

Comments
 (0)