@@ -93,4 +93,51 @@ public void interfaceWithCustomDiscriminator() throws Exception {
93
93
94
94
FileUtils .deleteDirectory (new File (tmpFolder .getAbsolutePath ()));
95
95
}
96
+
97
+ @ Test
98
+ public void javaCustomDiscriminator () throws Exception {
99
+
100
+ String name = "java" ;
101
+ String specPath = "3_0_0/javaDiscriminatorExample.yaml" ;
102
+ GenerationRequest .CodegenVersion codegenVersion = GenerationRequest .CodegenVersion .V3 ;
103
+ boolean v2Spec = false ; // 3.0 spec
104
+ boolean yaml = true ;
105
+ boolean flattenInlineComposedSchema = true ;
106
+ String outFolder = null ; // temporary folder
107
+
108
+ File tmpFolder = GeneratorRunner .getTmpFolder ();
109
+ Assert .assertNotNull (tmpFolder );
110
+
111
+ List <File > files = GeneratorRunner .runGenerator (
112
+ name ,
113
+ specPath ,
114
+ codegenVersion ,
115
+ v2Spec ,
116
+ yaml ,
117
+ flattenInlineComposedSchema ,
118
+ tmpFolder .getAbsolutePath (),
119
+ options -> options .setLibrary ("resttemplate" ));
120
+
121
+
122
+ File interfaceFile = files .stream ().filter (f -> f .getName ().equals ("ResultForSubTypeDTO.java" )).findAny ().orElseThrow (() -> new RuntimeException ("No class generated" ));
123
+
124
+ String interfaceContent = new String (Files .readAllBytes (Paths .get (interfaceFile .toURI ())));
125
+
126
+ Pattern typeInfoPattern = Pattern .compile ( "(.*)(@JsonTypeInfo\\ ()(.*)(}\\ ))(.*)" , Pattern .DOTALL );
127
+
128
+ Matcher matcher = typeInfoPattern .matcher (interfaceContent );
129
+
130
+ Assert .assertTrue (matcher .matches (),
131
+ "No JsonTypeInfo generated into the interface file" );
132
+
133
+ String generatedTypeInfoLines = matcher .group (2 )+matcher .group (3 )+matcher .group (4 );
134
+
135
+ Assert .assertEquals ( generatedTypeInfoLines , "@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = \" type\" , visible = true )" + System .lineSeparator () +
136
+ "@JsonSubTypes({" + System .lineSeparator () +
137
+ " @JsonSubTypes.Type(value = SubTypeBResultDTO.class, name = \" WeirdlyNamedSubTypeB\" )," + System .lineSeparator () +
138
+ " @JsonSubTypes.Type(value = SubTypeAResultDTO.class, name = \" SubTypeA\" )," + System .lineSeparator () +
139
+ "})" );
140
+
141
+ FileUtils .deleteDirectory (new File (tmpFolder .getAbsolutePath ()));
142
+ }
96
143
}
0 commit comments