Skip to content
Merged
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
297 changes: 148 additions & 149 deletions maven/src/test/java/org/hibernate/tool/maven/GenerateJavaMojoTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,160 +16,159 @@
import org.hibernate.tool.api.metadata.MetadataDescriptorFactory;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;

public class GenerateJavaMojoTest {

private static final String CREATE_PERSON_TABLE =
"create table PERSON (ID int not null, NAME varchar(20), primary key (ID))";
private static final String CREATE_ITEM_TABLE =
"create table ITEM (ID int not null, NAME varchar(20), OWNER_ID int not null, primary key (ID), foreign key (OWNER_ID) references PERSON(ID))";
private static final String DROP_ITEM_TABLE =
"drop table ITEM";
private static final String DROP_PERSON_TABLE =
"drop table PERSON";

@TempDir
private File tempDir;
private File outputDirectory;
private GenerateJavaMojo generateJavaMojo;

@BeforeEach
public void beforeEach() throws Exception {
createDatabase();
createOutputDirectory();
createGenerateJavaMojo();
}
@AfterEach
public void afterEach() throws Exception {
dropDatabase();
}
@Test
public void testGenerateAnnotatedJava() throws Exception {
File personJavaFile = new File(outputDirectory, "Person.java");
// Person.java should not exist
assertFalse(personJavaFile.exists());
// Set value of field 'ejb3' to 'true' and execute mojo
Field ejb3Field = GenerateJavaMojo.class.getDeclaredField("ejb3");
ejb3Field.setAccessible(true);
ejb3Field.set(generateJavaMojo, true);
// Execute mojo
generateJavaMojo.executeExporter(createMetadataDescriptor());
// Person.java should exist
assertTrue(personJavaFile.exists());
// Person.java should be an annotated entity
byte[] raw = Files.readAllBytes(personJavaFile.toPath());
assertTrue(new String(raw).contains("import jakarta.persistence.Entity;"));
}

@Test
public void testGenerateNonAnnotatedJava() throws Exception {
File personJavaFile = new File(outputDirectory, "Person.java");
// Person.java should not exist
assertFalse(personJavaFile.exists());
// Set value of field 'ejb3' to 'false' and execute mojo
Field ejb3Field = GenerateJavaMojo.class.getDeclaredField("ejb3");
ejb3Field.setAccessible(true);
ejb3Field.set(generateJavaMojo, false);
// Execute mojo
generateJavaMojo.executeExporter(createMetadataDescriptor());
// Person.java should exist
assertTrue(personJavaFile.exists());
// Person.java should be an annotated entity
byte[] raw = Files.readAllBytes(personJavaFile.toPath());
assertFalse(new String(raw).contains("import jakarta.persistence.Entity;"));
}

@Test
public void testGenerateJavaWithGenerics() throws Exception {
File personJavaFile = new File(outputDirectory, "Person.java");
// Person.java should not exist
assertFalse(personJavaFile.exists());
// Set value of field 'jdk5' to 'true' and execute mojo
Field jdk5Field = GenerateJavaMojo.class.getDeclaredField("jdk5");
jdk5Field.setAccessible(true);
jdk5Field.set(generateJavaMojo, true);
// Execute mojo
generateJavaMojo.executeExporter(createMetadataDescriptor());
// Person.java should exist
assertTrue(personJavaFile.exists());
// Person.java should be an annotated entity
byte[] raw = Files.readAllBytes(personJavaFile.toPath());
assertTrue(new String(raw).contains("Set<Item>"));
}

@Test
public void testGenerateJavaWithoutGenerics() throws Exception {
File personJavaFile = new File(outputDirectory, "Person.java");
// Person.java should not exist
assertFalse(personJavaFile.exists());
// Set value of field 'jdk5' to 'true' and execute mojo
Field jdk5Field = GenerateJavaMojo.class.getDeclaredField("jdk5");
jdk5Field.setAccessible(true);
jdk5Field.set(generateJavaMojo, false);
// Execute mojo
generateJavaMojo.executeExporter(createMetadataDescriptor());
// Person.java should exist
assertTrue(personJavaFile.exists());
// Person.java should be an annotated entity
byte[] raw = Files.readAllBytes(personJavaFile.toPath());
assertFalse(new String(raw).contains("Set<Item>"));
}

private void createDatabase() throws Exception {
Connection connection = DriverManager.getConnection(constructJdbcConnectionString());
Statement statement = connection.createStatement();
statement.execute(CREATE_PERSON_TABLE);
statement.execute(CREATE_ITEM_TABLE);
statement.close();
connection.close();
}

private void dropDatabase() throws Exception {
Connection connection = DriverManager.getConnection(constructJdbcConnectionString());
Statement statement = connection.createStatement();
statement.execute(DROP_ITEM_TABLE);
statement.execute(DROP_PERSON_TABLE);
statement.close();
connection.close();
}

private void createGenerateJavaMojo() throws Exception {
generateJavaMojo = new GenerateJavaMojo();
Field projectField = AbstractGenerationMojo.class.getDeclaredField("project");
projectField.setAccessible(true);
projectField.set(generateJavaMojo, new MavenProject());
Field propertyFileField = AbstractGenerationMojo.class.getDeclaredField("propertyFile");
propertyFileField.setAccessible(true);
propertyFileField.set(generateJavaMojo, new File(tempDir, "hibernate.properties"));
Field outputDirectoryField = GenerateJavaMojo.class.getDeclaredField("outputDirectory");
outputDirectoryField.setAccessible(true);
outputDirectoryField.set(generateJavaMojo, outputDirectory);
}
private void createOutputDirectory() {
outputDirectory = new File(tempDir, "generated");
outputDirectory.mkdir();
}

private MetadataDescriptor createMetadataDescriptor() {
return MetadataDescriptorFactory.createReverseEngineeringDescriptor(
null,
createProperties());
}

private Properties createProperties() {
Properties result = new Properties();
result.put("hibernate.connection.url", constructJdbcConnectionString());
result.put("hibernate.default_catalog", "TEST");
result.put("hibernate.default_schema", "PUBLIC");
return result;
}
private static final String CREATE_PERSON_TABLE =
"create table PERSON (ID int not null, NAME varchar(20), primary key (ID))";
private static final String CREATE_ITEM_TABLE =
"create table ITEM (ID int not null, NAME varchar(20), OWNER_ID int not null, primary key (ID), foreign key (OWNER_ID) references PERSON(ID))";
private static final String DROP_ITEM_TABLE =
"drop table ITEM";
private static final String DROP_PERSON_TABLE =
"drop table PERSON";

@TempDir
private File tempDir;

private File outputDirectory;
private GenerateJavaMojo generateJavaMojo;

@BeforeEach
public void beforeEach() throws Exception {
createDatabase();
createOutputDirectory();
createGenerateJavaMojo();
}

@AfterEach
public void afterEach() throws Exception {
dropDatabase();
}

@Test
public void testGenerateAnnotatedJava() throws Exception {
File personJavaFile = new File(outputDirectory, "Person.java");
// Person.java should not exist
assertFalse(personJavaFile.exists());
// Set value of field 'ejb3' to 'true' and execute mojo
Field ejb3Field = GenerateJavaMojo.class.getDeclaredField("ejb3");
ejb3Field.setAccessible(true);
ejb3Field.set(generateJavaMojo, true);
// Execute mojo
generateJavaMojo.executeExporter(createMetadataDescriptor());
// Person.java should exist
assertTrue(personJavaFile.exists());
// Person.java should be an annotated entity
byte[] raw = Files.readAllBytes(personJavaFile.toPath());
assertTrue(new String(raw).contains("import jakarta.persistence.Entity;"));
}

@Test
public void testGenerateNonAnnotatedJava() throws Exception {
File personJavaFile = new File(outputDirectory, "Person.java");
// Person.java should not exist
assertFalse(personJavaFile.exists());
// Set value of field 'ejb3' to 'false' and execute mojo
Field ejb3Field = GenerateJavaMojo.class.getDeclaredField("ejb3");
ejb3Field.setAccessible(true);
ejb3Field.set(generateJavaMojo, false);
// Execute mojo
generateJavaMojo.executeExporter(createMetadataDescriptor());
// Person.java should exist
assertTrue(personJavaFile.exists());
// Person.java should be an annotated entity
byte[] raw = Files.readAllBytes(personJavaFile.toPath());
assertFalse(new String(raw).contains("import jakarta.persistence.Entity;"));
}

@Test
public void testGenerateJavaWithGenerics() throws Exception {
File personJavaFile = new File(outputDirectory, "Person.java");
// Person.java should not exist
assertFalse(personJavaFile.exists());
// Set value of field 'jdk5' to 'true' and execute mojo
Field jdk5Field = GenerateJavaMojo.class.getDeclaredField("jdk5");
jdk5Field.setAccessible(true);
jdk5Field.set(generateJavaMojo, true);
// Execute mojo
generateJavaMojo.executeExporter(createMetadataDescriptor());
// Person.java should exist
assertTrue(personJavaFile.exists());
// Person.java should be an annotated entity
byte[] raw = Files.readAllBytes(personJavaFile.toPath());
assertTrue(new String(raw).contains("Set<Item>"));
}

@Test
public void testGenerateJavaWithoutGenerics() throws Exception {
File personJavaFile = new File(outputDirectory, "Person.java");
// Person.java should not exist
assertFalse(personJavaFile.exists());
// Set value of field 'jdk5' to 'true' and execute mojo
Field jdk5Field = GenerateJavaMojo.class.getDeclaredField("jdk5");
jdk5Field.setAccessible(true);
jdk5Field.set(generateJavaMojo, false);
// Execute mojo
generateJavaMojo.executeExporter(createMetadataDescriptor());
// Person.java should exist
assertTrue(personJavaFile.exists());
// Person.java should be an annotated entity
byte[] raw = Files.readAllBytes(personJavaFile.toPath());
assertFalse(new String(raw).contains("Set<Item>"));
}

private void createDatabase() throws Exception {
Connection connection = DriverManager.getConnection(constructJdbcConnectionString());
Statement statement = connection.createStatement();
statement.execute(CREATE_PERSON_TABLE);
statement.execute(CREATE_ITEM_TABLE);
statement.close();
connection.close();
}

private void dropDatabase() throws Exception {
Connection connection = DriverManager.getConnection(constructJdbcConnectionString());
Statement statement = connection.createStatement();
statement.execute(DROP_ITEM_TABLE);
statement.execute(DROP_PERSON_TABLE);
statement.close();
connection.close();
}

private void createGenerateJavaMojo() throws Exception {
generateJavaMojo = new GenerateJavaMojo();
Field projectField = AbstractGenerationMojo.class.getDeclaredField("project");
projectField.setAccessible(true);
projectField.set(generateJavaMojo, new MavenProject());
Field propertyFileField = AbstractGenerationMojo.class.getDeclaredField("propertyFile");
propertyFileField.setAccessible(true);
propertyFileField.set(generateJavaMojo, new File(tempDir, "hibernate.properties"));
Field outputDirectoryField = GenerateJavaMojo.class.getDeclaredField("outputDirectory");
outputDirectoryField.setAccessible(true);
outputDirectoryField.set(generateJavaMojo, outputDirectory);
}

private void createOutputDirectory() {
outputDirectory = new File(tempDir, "generated");
if (!outputDirectory.mkdir()) throw new RuntimeException("Unable to create output directory: " + outputDirectory);
}

private MetadataDescriptor createMetadataDescriptor() {
return MetadataDescriptorFactory.createReverseEngineeringDescriptor(
null,
createProperties());
}

private Properties createProperties() {
Properties result = new Properties();
result.put("hibernate.connection.url", constructJdbcConnectionString());
result.put("hibernate.default_catalog", "TEST");
result.put("hibernate.default_schema", "PUBLIC");
return result;
}

private String constructJdbcConnectionString() {
return "jdbc:h2:" + tempDir.getAbsolutePath() + "/database/test;AUTO_SERVER=TRUE";
Expand Down