From 102f9b3876ecb166873a942a0fb3b4e80ef7c3de Mon Sep 17 00:00:00 2001 From: Emmanuel Bernard Date: Wed, 6 Apr 2011 18:09:47 +0200 Subject: [PATCH] HHH-6084 Add tests for id strategy provider in hem --- .../ejb/test/ejb3configuration/id/Cable.java | 43 +++++++++++++++ .../ejb3configuration/id/FunkyException.java | 27 ++++++++++ .../id/FunkyIdGenerator.java | 36 +++++++++++++ .../id/FunkyIdentifierGeneratorProvider.java | 37 +++++++++++++ ...entifierGeneratorStrategyProviderTest.java | 53 +++++++++++++++++++ 5 files changed, 196 insertions(+) create mode 100644 hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/Cable.java create mode 100644 hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/FunkyException.java create mode 100644 hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/FunkyIdGenerator.java create mode 100644 hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/FunkyIdentifierGeneratorProvider.java create mode 100644 hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/IdentifierGeneratorStrategyProviderTest.java diff --git a/hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/Cable.java b/hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/Cable.java new file mode 100644 index 0000000000..e5cef2daab --- /dev/null +++ b/hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/Cable.java @@ -0,0 +1,43 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * JBoss, Home of Professional Open Source + * Copyright 2011 Red Hat Inc. and/or its affiliates and other contributors + * as indicated by the @authors tag. All rights reserved. + * See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the GNU Lesser General Public License, v. 2.1. + * This program is distributed in the hope that it will be useful, but WITHOUT A + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A + * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + * You should have received a copy of the GNU Lesser General Public License, + * v.2.1 along with this distribution; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + */ +package org.hibernate.ejb.test.ejb3configuration.id; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +import org.hibernate.annotations.GenericGenerator; + +/** + * @author Emmanuel Bernard + */ +@Entity +public class Cable { + @Id @GeneratedValue(generator = "fnk") + @GenericGenerator( name = "fnk", strategy = "funky") + public Integer getId() { return id; } + public void setId(Integer id) { this.id = id; } + private Integer id; + + public String getName() { return name; } + public void setName(String name) { this.name = name; } + private String name; +} diff --git a/hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/FunkyException.java b/hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/FunkyException.java new file mode 100644 index 0000000000..06ca0a9f1e --- /dev/null +++ b/hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/FunkyException.java @@ -0,0 +1,27 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * JBoss, Home of Professional Open Source + * Copyright 2011 Red Hat Inc. and/or its affiliates and other contributors + * as indicated by the @authors tag. All rights reserved. + * See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the GNU Lesser General Public License, v. 2.1. + * This program is distributed in the hope that it will be useful, but WITHOUT A + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A + * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + * You should have received a copy of the GNU Lesser General Public License, + * v.2.1 along with this distribution; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + */ +package org.hibernate.ejb.test.ejb3configuration.id; + +/** + * @author Emmanuel Bernard + */ +public class FunkyException extends RuntimeException { +} diff --git a/hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/FunkyIdGenerator.java b/hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/FunkyIdGenerator.java new file mode 100644 index 0000000000..f0cb85b53f --- /dev/null +++ b/hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/FunkyIdGenerator.java @@ -0,0 +1,36 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * JBoss, Home of Professional Open Source + * Copyright 2011 Red Hat Inc. and/or its affiliates and other contributors + * as indicated by the @authors tag. All rights reserved. + * See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the GNU Lesser General Public License, v. 2.1. + * This program is distributed in the hope that it will be useful, but WITHOUT A + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A + * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + * You should have received a copy of the GNU Lesser General Public License, + * v.2.1 along with this distribution; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + */ +package org.hibernate.ejb.test.ejb3configuration.id; + +import java.io.Serializable; + +import org.hibernate.HibernateException; +import org.hibernate.engine.spi.SessionImplementor; +import org.hibernate.id.IdentifierGenerator; + +/** + * @author Emmanuel Bernard + */ +public class FunkyIdGenerator implements IdentifierGenerator { + public Serializable generate(SessionImplementor session, Object object) throws HibernateException { + throw new FunkyException(); + } +} diff --git a/hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/FunkyIdentifierGeneratorProvider.java b/hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/FunkyIdentifierGeneratorProvider.java new file mode 100644 index 0000000000..a37856bca6 --- /dev/null +++ b/hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/FunkyIdentifierGeneratorProvider.java @@ -0,0 +1,37 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * JBoss, Home of Professional Open Source + * Copyright 2011 Red Hat Inc. and/or its affiliates and other contributors + * as indicated by the @authors tag. All rights reserved. + * See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the GNU Lesser General Public License, v. 2.1. + * This program is distributed in the hope that it will be useful, but WITHOUT A + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A + * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + * You should have received a copy of the GNU Lesser General Public License, + * v.2.1 along with this distribution; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + */ +package org.hibernate.ejb.test.ejb3configuration.id; + +import java.util.HashMap; +import java.util.Map; + +import org.hibernate.ejb.cfg.spi.IdentifierGeneratorStrategyProvider; + +/** + * @author Emmanuel Bernard + */ +public class FunkyIdentifierGeneratorProvider implements IdentifierGeneratorStrategyProvider { + public Map> getStrategies() { + final HashMap> result = new HashMap>( 1 ); + result.put( "funky", FunkyIdGenerator.class ); + return result; + } +} diff --git a/hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/IdentifierGeneratorStrategyProviderTest.java b/hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/IdentifierGeneratorStrategyProviderTest.java new file mode 100644 index 0000000000..38394138aa --- /dev/null +++ b/hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/ejb3configuration/id/IdentifierGeneratorStrategyProviderTest.java @@ -0,0 +1,53 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * JBoss, Home of Professional Open Source + * Copyright 2011 Red Hat Inc. and/or its affiliates and other contributors + * as indicated by the @authors tag. All rights reserved. + * See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the GNU Lesser General Public License, v. 2.1. + * This program is distributed in the hope that it will be useful, but WITHOUT A + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A + * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + * You should have received a copy of the GNU Lesser General Public License, + * v.2.1 along with this distribution; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + */ +package org.hibernate.ejb.test.ejb3configuration.id; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; + +import junit.framework.TestCase; + +import org.hibernate.ejb.AvailableSettings; +import org.hibernate.ejb.Ejb3Configuration; + +/** + * @author Emmanuel Bernard + */ +public class IdentifierGeneratorStrategyProviderTest extends TestCase { + public void testIdentifierGeneratorStrategyProvider() { + Ejb3Configuration conf = new Ejb3Configuration(); + conf.setProperty( + AvailableSettings.IDENTIFIER_GENERATOR_STRATEGY_PROVIDER, + FunkyIdentifierGeneratorProvider.class.getName() ); + conf.addAnnotatedClass( Cable.class ); + final EntityManagerFactory entityManagerFactory = conf.buildEntityManagerFactory(); + final EntityManager entityManager = entityManagerFactory.createEntityManager(); + try { + entityManager.persist( new Cable() ); + entityManager.flush(); + fail("FunkyException should have been thrown when the id is generated"); + } + catch ( FunkyException e ) { + entityManager.close(); + entityManagerFactory.close(); + } + } +}