/*
* 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.test.mapping;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.boot.spi.MetadataBuildingContext;
import org.hibernate.mapping.JoinedSubclass;
import org.hibernate.mapping.PersistentClassVisitor;
import org.hibernate.mapping.RootClass;
import org.hibernate.mapping.SingleTableSubclass;
import org.hibernate.mapping.Subclass;
import org.hibernate.mapping.UnionSubclass;
import org.hibernate.testing.junit4.BaseUnitTestCase;
import org.hibernate.testing.boot.MetadataBuildingContextTestingImpl;
/**
* Simple smoke style tests to make sure visitors keep working.
*
* @author max
*/
public class PersistentClassVisitorTest extends BaseUnitTestCase {
private StandardServiceRegistry serviceRegistry;
private MetadataBuildingContext metadataBuildingContext;
@Before
public void prepare() {
serviceRegistry = new StandardServiceRegistryBuilder().build();
metadataBuildingContext = new MetadataBuildingContextTestingImpl( serviceRegistry );
}
@After
public void release() {
StandardServiceRegistryBuilder.destroy( serviceRegistry );
}
@Test
public void testProperCallbacks() {
PersistentClassVisitorValidator vv = new PersistentClassVisitorValidator();
new RootClass( metadataBuildingContext ).accept( vv );
new Subclass( new RootClass( metadataBuildingContext ), metadataBuildingContext ).accept( vv );
new JoinedSubclass( new RootClass( metadataBuildingContext ), metadataBuildingContext ).accept( vv );
new SingleTableSubclass( new RootClass( metadataBuildingContext ), metadataBuildingContext ).accept( vv );
new UnionSubclass( new RootClass( metadataBuildingContext ), metadataBuildingContext ).accept( vv );
}
static public class PersistentClassVisitorValidator implements PersistentClassVisitor {
private Object validate(Class expectedClass, Object visitee) {
if (!visitee.getClass().getName().equals(expectedClass.getName())) {
throw new IllegalStateException(visitee.getClass().getName()
+ " did not call proper accept method. Was "
+ expectedClass.getName());
}
return null;
}
public Object accept(RootClass class1) {
return validate(RootClass.class, class1);
}
public Object accept(UnionSubclass subclass) {
return validate(UnionSubclass.class, subclass);
}
public Object accept(SingleTableSubclass subclass) {
return validate(SingleTableSubclass.class, subclass);
}
public Object accept(JoinedSubclass subclass) {
return validate(JoinedSubclass.class, subclass);
}
public Object accept(Subclass subclass) {
return validate(Subclass.class, subclass);
}
}
}