package com.feedly.cassandra.entity.enhance; import static org.junit.Assert.*; import java.util.HashMap; import java.util.Map; import org.junit.Test; public class EnhancerTest { @Test public void testEnhancer() { SampleBean bean = new SampleBean(); assertTrue(bean instanceof IEnhancedEntity); //enhancer ant task runs as part of process-test-classes maven phase... IEnhancedEntity enh = (IEnhancedEntity) bean; assertNotNull(enh.getModifiedFields()); assertTrue(enh.getModifiedFields().isEmpty()); //nothing should have been set /* * the bitset hold fields that have been modified (setter has been invoked), the order is sorted field name * * 0 boolVal * 1 charVal * 2 dateVal * 3 doubleVal * 4 floatVal * 5 intVal * 6 longVal * 7 sampleEnum * 8 strVal * also not saved val is not saved */ bean.setNotSaved(12); assertTrue(enh.getModifiedFields().isEmpty()); bean.setIntVal(7); assertEquals(1, enh.getModifiedFields().cardinality()); assertEquals(true, enh.getModifiedFields().get(5)); assertEquals(7, bean.getIntVal()); //make sure the modified setter still sets the property value bean.setStrVal(null); assertEquals(2, enh.getModifiedFields().cardinality()); assertEquals(true, enh.getModifiedFields().get(5)); assertEquals(true, enh.getModifiedFields().get(8)); assertNull(bean.getStrVal()); bean.setStrVal("bar"); assertEquals(2, enh.getModifiedFields().cardinality()); assertEquals(true, enh.getModifiedFields().get(5)); assertEquals(true, enh.getModifiedFields().get(8)); assertEquals("bar", bean.getStrVal()); //test anonymous handlers bean = new SampleBean(); enh = (IEnhancedEntity) bean; Map<String, Object> map = new HashMap<String, Object>(); bean.setUnmapped(map); assertTrue(enh.getUnmappedFieldsModified()); enh.setUnmappedFieldsModified(false); assertTrue(map == bean.getUnmapped()); assertTrue(enh.getUnmappedFieldsModified()); //test counters - dirty field should work on getters AND setters CounterBean cbean = new CounterBean(); enh = (IEnhancedEntity) cbean; cbean.getCounterVal(); assertEquals(1, enh.getModifiedFields().cardinality()); assertTrue(enh.getModifiedFields().get(0)); //test collections - dirty field should work on getters AND setters MapBean mapBean = new MapBean(); enh = (IEnhancedEntity) mapBean; map = new HashMap<String, Object>(); mapBean.setMapProp(map); assertEquals(enh.getModifiedFields().toString(), 1, enh.getModifiedFields().cardinality()); assertTrue(enh.getModifiedFields().get(0)); enh.getModifiedFields().clear(); assertTrue(map == mapBean.getMapProp()); assertEquals(1, enh.getModifiedFields().cardinality()); assertTrue(enh.getModifiedFields().get(0)); } }