package jadex.rules.test.state; import jadex.rules.state.IOAVState; import jadex.rules.state.javaimpl.OAVStateFactory; import java.util.ArrayList; import java.util.Collection; import java.util.List; import junit.framework.TestCase; /** * Test multi attributes. */ public class MultiAttributeTest extends TestCase { //-------- attributes -------- /** The state. */ protected IOAVState state; //-------- methods -------- /** * Test setup. */ protected void setUp() throws Exception { // todo: make state impl customizable this.state = OAVStateFactory.createOAVState(TestWorld.testworld_type_model); } /** * Test if adding values to list attribute works. */ public void testAddValuesToListAttribute() { List tests = new ArrayList(); for(int i=0; i<1000; i++) tests.add(state.createRootObject(TestWorld.test_type)); for(int i=0; i<1000; i++) state.addAttributeValue(tests.get(0), TestWorld.test_has_testslist, tests.get(i)); Collection coll = state.getAttributeValues(tests.get(0), TestWorld.test_has_testslist); assertTrue(coll.equals(tests)); } /** * Test if adding identical values to list attribute works. */ public void testAddSameValuesToListAttribute() { Object test = state.createRootObject(TestWorld.test_type); for(int i=0; i<1000; i++) state.addAttributeValue(test, TestWorld.test_has_testslist, test); Collection coll = state.getAttributeValues(test, TestWorld.test_has_testslist); assertEquals(coll.size(), 1000); } /** * Test if removing values from list attribute works. */ public void testRemoveValuesFromListAttribute() { List tests = new ArrayList(); for(int i=0; i<1000; i++) tests.add(state.createRootObject(TestWorld.test_type)); for(int i=0; i<1000; i++) state.addAttributeValue(tests.get(0), TestWorld.test_has_testslist, tests.get(i)); for(int i=0; i<1000; i++) state.removeAttributeValue(tests.get(0), TestWorld.test_has_testslist, tests.get(i)); Collection coll = state.getAttributeValues(tests.get(0), TestWorld.test_has_testslist); // Do we need a clear contract preferring null or size==0 allowing only only option? assertTrue(coll==null || coll.size()==0); } /** * Test if adding values to set attribute works. */ public void testAddValuesToSetAttribute() { List tests = new ArrayList(); for(int i=0; i<1000; i++) tests.add(state.createRootObject(TestWorld.test_type)); for(int i=0; i<1000; i++) state.addAttributeValue(tests.get(0), TestWorld.test_has_testsset, tests.get(i)); Collection coll = state.getAttributeValues(tests.get(0), TestWorld.test_has_testsset); assertTrue(coll.containsAll(tests)); } /** * Test if adding identical values to set attribute works. */ public void testAddSameValuesToSetAttribute() { Object test = state.createRootObject(TestWorld.test_type); state.addAttributeValue(test, TestWorld.test_has_testsset, test); try { state.addAttributeValue(test, TestWorld.test_has_testsset, test); assertTrue(false); } catch(Exception e) { assertTrue(true); } } /** * Test if removing values from set attribute works. */ public void testRemoveValuesFromSetAttribute() { List tests = new ArrayList(); for(int i=0; i<1000; i++) tests.add(state.createRootObject(TestWorld.test_type)); for(int i=0; i<1000; i++) state.addAttributeValue(tests.get(0), TestWorld.test_has_testsset, tests.get(i)); for(int i=0; i<1000; i++) state.removeAttributeValue(tests.get(0), TestWorld.test_has_testsset, tests.get(i)); Collection coll = state.getAttributeValues(tests.get(0), TestWorld.test_has_testsset); // Do we need a clear contract preferring null or size==0 allowing only only option? assertTrue(coll==null || coll.size()==0); } }