/* * 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.bytecode.enhancement.basic; import org.hibernate.engine.spi.ManagedEntity; import org.hibernate.engine.spi.PersistentAttributeInterceptable; import org.hibernate.test.bytecode.enhancement.AbstractEnhancerTestTask; import org.hibernate.testing.bytecode.enhancement.EnhancerTestUtils; import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; /** * @author Luis Barreiro */ public class BasicEnhancementTestTask extends AbstractEnhancerTestTask { public Class<?>[] getAnnotatedClasses() { return new Class<?>[] {SimpleEntity.class}; } public void prepare() { } public void execute() { SimpleEntity entity = new SimpleEntity(); // Call the new ManagedEntity methods assertTyping( ManagedEntity.class, entity ); ManagedEntity managedEntity = (ManagedEntity) entity; assertSame( entity, managedEntity.$$_hibernate_getEntityInstance() ); assertNull( managedEntity.$$_hibernate_getEntityEntry() ); managedEntity.$$_hibernate_setEntityEntry( EnhancerTestUtils.makeEntityEntry() ); assertNotNull( managedEntity.$$_hibernate_getEntityEntry() ); managedEntity.$$_hibernate_setEntityEntry( null ); assertNull( managedEntity.$$_hibernate_getEntityEntry() ); managedEntity.$$_hibernate_setNextManagedEntity( managedEntity ); managedEntity.$$_hibernate_setPreviousManagedEntity( managedEntity ); assertSame( managedEntity, managedEntity.$$_hibernate_getNextManagedEntity() ); assertSame( managedEntity, managedEntity.$$_hibernate_getPreviousManagedEntity() ); // Add an attribute interceptor... assertTyping( PersistentAttributeInterceptable.class, entity ); PersistentAttributeInterceptable interceptableEntity = (PersistentAttributeInterceptable) entity; assertNull( interceptableEntity.$$_hibernate_getInterceptor() ); interceptableEntity.$$_hibernate_setInterceptor( new ObjectAttributeMarkerInterceptor() ); assertNotNull( interceptableEntity.$$_hibernate_getInterceptor() ); assertNull( EnhancerTestUtils.getFieldByReflection( entity, "anUnspecifiedObject" ) ); entity.setAnObject( new Object() ); assertSame( EnhancerTestUtils.getFieldByReflection( entity, "anUnspecifiedObject" ), ObjectAttributeMarkerInterceptor.WRITE_MARKER ); assertSame( entity.getAnObject(), ObjectAttributeMarkerInterceptor.READ_MARKER ); entity.setAnObject( null ); assertSame( EnhancerTestUtils.getFieldByReflection( entity, "anUnspecifiedObject" ), ObjectAttributeMarkerInterceptor.WRITE_MARKER ); } protected void cleanup() { } }