Skip to content

Commit

Permalink
HHH-16261 - More strict test case
Browse files Browse the repository at this point in the history
  • Loading branch information
cigaly authored and beikov committed Apr 25, 2023
1 parent 643cd32 commit 672eaed
Showing 1 changed file with 31 additions and 1 deletion.
@@ -1,13 +1,23 @@
package org.hibernate.jpamodelgen.test.records;

import jakarta.persistence.metamodel.SingularAttribute;
import org.hibernate.jpamodelgen.test.util.CompilationTest;
import org.hibernate.jpamodelgen.test.util.TestForIssue;
import org.hibernate.jpamodelgen.test.util.WithClasses;
import org.junit.Test;

import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;

import static java.lang.reflect.Modifier.isStatic;
import static org.hibernate.jpamodelgen.test.util.TestUtil.assertMetamodelClassGeneratedFor;
import static org.hibernate.jpamodelgen.test.util.TestUtil.getFieldFromMetamodelFor;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;

public class Java14RecordsTest extends CompilationTest {

Expand All @@ -16,7 +26,27 @@ public class Java14RecordsTest extends CompilationTest {
@WithClasses({Address.class, Author.class})
public void testEmbeddableRecordProperty() {
assertMetamodelClassGeneratedFor(Address.class);
for (final String fieldName : List.of("street", "city", "postalCode")) {
assertNotNull("Address must contain '" + fieldName + "' field", getFieldFromMetamodelFor(Address.class, fieldName));
}
assertMetamodelClassGeneratedFor(Author.class);
assertNotNull("Author must contain 'address' field", getFieldFromMetamodelFor(Author.class, "address"));

final Field addressField = getFieldFromMetamodelFor(Author.class, "address");
assertNotNull("Author must contain 'address' field", addressField);
assertTrue(isStatic(addressField.getModifiers()));
if (addressField.getGenericType() instanceof ParameterizedType parameterizedType) {
assertEquals(SingularAttribute.class, parameterizedType.getRawType());
final Type[] typeArguments = parameterizedType.getActualTypeArguments();
assertEquals(2, typeArguments.length);
assertEquals(Author.class, typeArguments[0]);
assertEquals(Address.class, typeArguments[1]);
} else {
fail("Address field must be instance of ParameterizedType");
}

final Field addressNameField = getFieldFromMetamodelFor(Author.class, "address".toUpperCase());
assertNotNull("Author must contain 'ADDRESS' field", addressNameField);
assertTrue(isStatic(addressNameField.getModifiers()));
assertEquals(String.class, addressNameField.getGenericType());
}
}

0 comments on commit 672eaed

Please sign in to comment.