Skip to content

Commit

Permalink
Start of tests
Browse files Browse the repository at this point in the history
  • Loading branch information
FroMage authored and gavinking committed Mar 1, 2024
1 parent b32296f commit 7c453fb
Show file tree
Hide file tree
Showing 4 changed files with 185 additions and 0 deletions.
65 changes: 65 additions & 0 deletions tooling/metamodel-generator/hibernate-jpamodelgen.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,28 @@ ext {
xsdDir = file( "${projectDir}/src/main/xsd" )
}

sourceSets {
quarkusOrmPanache {
compileClasspath += sourceSets.main.output
compileClasspath += sourceSets.test.output
runtimeClasspath += sourceSets.main.output
runtimeClasspath += sourceSets.test.output
}
quarkusHrPanache {
compileClasspath += sourceSets.main.output
compileClasspath += sourceSets.test.output
runtimeClasspath += sourceSets.main.output
runtimeClasspath += sourceSets.test.output
}
}

configurations {
quarkusOrmPanacheImplementation.extendsFrom testImplementation
quarkusOrmPanacheRuntimeOnly.extendsFrom runtimeOnly
quarkusHrPanacheImplementation.extendsFrom testImplementation
quarkusHrPanacheRuntimeOnly.extendsFrom runtimeOnly
}

dependencies {
// api - ewww... but Maven needs them this way
api project( ':hibernate-core' )
Expand All @@ -31,8 +53,51 @@ dependencies {
xjc jakartaLibs.xjc
xjc jakartaLibs.jaxb
xjc rootProject.fileTree(dir: 'patched-libs/jaxb2-basics', include: '*.jar')

quarkusOrmPanacheImplementation "io.quarkus:quarkus-hibernate-orm-panache:3.6.2"
quarkusOrmPanacheImplementation project( ":hibernate-testing" )
quarkusOrmPanacheImplementation 'org.checkerframework:checker-qual:3.4.0'

quarkusHrPanacheImplementation "io.quarkus:quarkus-hibernate-hr-panache:3.6.2"
quarkusHrPanacheImplementation project( ":hibernate-testing" )
quarkusHrPanacheImplementation 'org.checkerframework:checker-qual:3.4.0'
}

def quarkusOrmPanacheTestTask = tasks.register( 'quarkusOrmPanacheTest', Test ) {
description = 'Runs the Quarkus ORM Panache tests.'
group = 'verification'

testClassesDirs = sourceSets.quarkusOrmPanache.output.classesDirs
classpath = sourceSets.quarkusOrmPanache.runtimeClasspath
shouldRunAfter test
dependsOn test

useJUnitPlatform()

testLogging {
events "passed"
}
}

def quarkusHrPanacheTestTask = tasks.register( 'quarkusHrPanacheTest', Test ) {
description = 'Runs the Quarkus HR Panache tests.'
group = 'verification'

testClassesDirs = sourceSets.quarkusHrPanache.output.classesDirs
classpath = sourceSets.quarkusHrPanache.runtimeClasspath
shouldRunAfter test
dependsOn test

useJUnitPlatform()

testLogging {
events "passed"
}
}

check.dependsOn quarkusHrPanacheTestTask
check.dependsOn quarkusOrmPanacheTestTask

sourceSets.main {
java.srcDir xjcTargetDir
resources.srcDir xsdDir
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package org.hibernate.jpamodelgen.test.ormPanache;

import jakarta.persistence.Entity;
import jakarta.persistence.Id;

import java.util.List;

import org.hibernate.annotations.NaturalId;
import org.hibernate.annotations.processing.Find;
import org.hibernate.annotations.processing.HQL;

import io.quarkus.hibernate.orm.panache.PanacheEntity;

@Entity
public class PanacheBook extends PanacheEntity {
public @Id String isbn;
public @NaturalId String title;
public @NaturalId String author;
public String text;
public int pages;

@Find
public static native List<PanacheBook> findBook(String isbn);

@HQL("WHERE isbn = :isbn")
public static native List<PanacheBook> hqlBook(String isbn);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package org.hibernate.jpamodelgen.test.ormPanache;

import java.util.List;

import org.hibernate.annotations.processing.Find;
import org.hibernate.annotations.processing.HQL;

import io.quarkus.hibernate.orm.panache.PanacheRepository;
import jakarta.enterprise.context.ApplicationScoped;

@ApplicationScoped
public class PanacheBookRepository implements PanacheRepository<PanacheBook> {
@Find
public native List<PanacheBook> findBook(String isbn);

@HQL("WHERE isbn = :isbn")
public native List<PanacheBook> hqlBook(String isbn);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.jpamodelgen.test.ormPanache;

import org.hibernate.jpamodelgen.test.util.CompilationTest;
import org.hibernate.jpamodelgen.test.util.TestUtil;
import org.hibernate.jpamodelgen.test.util.WithClasses;
import org.junit.Test;
import org.junit.jupiter.api.Assertions;

import jakarta.persistence.EntityManager;

import static org.hibernate.jpamodelgen.test.util.TestUtil.getMetamodelClassFor;

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

/**
* @author Gavin King
*/
public class QuarkusOrmPanacheTest extends CompilationTest {
@Test
@WithClasses({ PanacheBook.class })
public void testPanacheEntityMetamodel() throws Exception {
// Panache entity
System.out.println( TestUtil.getMetaModelSourceAsString( PanacheBook.class ) );
Class<?> entityClass = getMetamodelClassFor( PanacheBook.class );
Assertions.assertNotNull(entityClass);

// Make sure it has the proper supertype
Class<?> superclass = entityClass.getSuperclass();
if(superclass != null) {
Assertions.assertEquals("io.quarkus.hibernate.orm.panache.PanacheEntity_", superclass.getName());
}

// Panache static native method generates a static method
Method method = entityClass.getDeclaredMethod("hqlBook", EntityManager.class, String.class);
Assertions.assertNotNull(method);
Assertions.assertTrue(Modifier.isStatic(method.getModifiers()));

// Panache static native method generates a static method
method = entityClass.getDeclaredMethod("findBook", EntityManager.class, String.class);
Assertions.assertNotNull(method);
Assertions.assertTrue(Modifier.isStatic(method.getModifiers()));
}

@Test
@WithClasses({ PanacheBook.class, PanacheBookRepository.class })
public void testPanacheRepositoryMetamodel() throws Exception {
// Panache repository
System.out.println( TestUtil.getMetaModelSourceAsString( PanacheBookRepository.class ) );
Class<?> repositoryClass = getMetamodelClassFor( PanacheBookRepository.class );
Assertions.assertNotNull(repositoryClass);

// Make sure it has the proper supertype
Class<?> superclass = repositoryClass.getSuperclass();
if(superclass != null) {
Assertions.assertEquals("java.lang.Object", superclass.getName());
}

// Panache native method generates a static method
Method method = repositoryClass.getDeclaredMethod("hqlBook", EntityManager.class, String.class);
Assertions.assertNotNull(method);
Assertions.assertTrue(Modifier.isStatic(method.getModifiers()));

// Panache native method generates a static method
method = repositoryClass.getDeclaredMethod("findBook", EntityManager.class, String.class);
Assertions.assertNotNull(method);
Assertions.assertTrue(Modifier.isStatic(method.getModifiers()));
}
}

0 comments on commit 7c453fb

Please sign in to comment.