/* * Copyright (c) 2010 Tom Parker <thpr@users.sourceforge.net> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY 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 along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package pcgen.cdom.facet.analysis; import junit.framework.TestCase; import org.junit.Test; import pcgen.cdom.base.CDOMObject; import pcgen.cdom.base.FormulaFactory; import pcgen.cdom.enumeration.CharID; import pcgen.cdom.enumeration.DataSetID; import pcgen.cdom.enumeration.VariableKey; import pcgen.cdom.facet.event.DataFacetChangeEvent; import pcgen.core.PCTemplate; public class VariableFacetTest extends TestCase { private VariableFacet facet = new VariableFacet(); private CharID id; private CharID altid; @Override protected void setUp() throws Exception { super.setUp(); DataSetID cid = DataSetID.getID(); id = CharID.getID(cid); altid = CharID.getID(cid); } @Test public void testAddEmptyObject() { Object source = new Object(); CDOMObject t1 = new PCTemplate(); DataFacetChangeEvent<CharID, CDOMObject> dfce = new DataFacetChangeEvent<>(id, t1, source, DataFacetChangeEvent.DATA_ADDED); getFacet().dataAdded(dfce); VariableKey vk = VariableKey.getConstant("Var1"); assertFalse(getFacet().contains(id, vk)); } @Test public void testAddSimple() { Object source = new Object(); CDOMObject t1 = new PCTemplate(); VariableKey vk = VariableKey.getConstant("Var1"); t1.put(vk, FormulaFactory.getFormulaFor(2)); DataFacetChangeEvent<CharID, CDOMObject> dfce = new DataFacetChangeEvent<>(id, t1, source, DataFacetChangeEvent.DATA_ADDED); getFacet().dataAdded(dfce); assertTrue(getFacet().contains(id, vk)); assertFalse(getFacet().contains(altid, vk)); assertFalse(getFacet().contains(id, VariableKey.getConstant("Var2"))); } @Test public void testAddSameTwice() { Object source = new Object(); CDOMObject t1 = new PCTemplate(); CDOMObject t2 = new PCTemplate(); VariableKey vk = VariableKey.getConstant("Var1"); t1.put(vk, FormulaFactory.getFormulaFor(2)); t2.put(vk, FormulaFactory.getFormulaFor(4)); DataFacetChangeEvent<CharID, CDOMObject> dfce = new DataFacetChangeEvent<>(id, t1, source, DataFacetChangeEvent.DATA_ADDED); getFacet().dataAdded(dfce); assertTrue(getFacet().contains(id, vk)); assertFalse(getFacet().contains(altid, vk)); assertFalse(getFacet().contains(id, VariableKey.getConstant("Var2"))); dfce = new DataFacetChangeEvent<>(id, t2, source, DataFacetChangeEvent.DATA_ADDED); getFacet().dataAdded(dfce); assertTrue(getFacet().contains(id, vk)); assertFalse(getFacet().contains(altid, vk)); assertFalse(getFacet().contains(id, VariableKey.getConstant("Var2"))); } @Test public void testAddSameTwo() { Object source = new Object(); CDOMObject t1 = new PCTemplate(); VariableKey vk1 = VariableKey.getConstant("Var1"); VariableKey vk2 = VariableKey.getConstant("Var2"); t1.put(vk1, FormulaFactory.getFormulaFor(2)); t1.put(vk2, FormulaFactory.getFormulaFor(4)); DataFacetChangeEvent<CharID, CDOMObject> dfce = new DataFacetChangeEvent<>(id, t1, source, DataFacetChangeEvent.DATA_ADDED); getFacet().dataAdded(dfce); assertTrue(getFacet().contains(id, vk1)); assertTrue(getFacet().contains(id, vk2)); assertFalse(getFacet().contains(altid, vk1)); assertFalse(getFacet().contains(id, VariableKey.getConstant("Var3"))); } @Test public void testAddRemove() { Object source = new Object(); CDOMObject t1 = new PCTemplate(); VariableKey vk1 = VariableKey.getConstant("Var1"); VariableKey vk2 = VariableKey.getConstant("Var2"); t1.put(vk1, FormulaFactory.getFormulaFor(2)); t1.put(vk2, FormulaFactory.getFormulaFor(4)); DataFacetChangeEvent<CharID, CDOMObject> dfce = new DataFacetChangeEvent<>(id, t1, source, DataFacetChangeEvent.DATA_ADDED); getFacet().dataAdded(dfce); assertTrue(getFacet().contains(id, vk1)); assertTrue(getFacet().contains(id, vk2)); assertFalse(getFacet().contains(altid, vk1)); assertFalse(getFacet().contains(id, VariableKey.getConstant("Var3"))); dfce = new DataFacetChangeEvent<>(id, t1, source, DataFacetChangeEvent.DATA_REMOVED); getFacet().dataRemoved(dfce); assertFalse(getFacet().contains(id, vk1)); assertFalse(getFacet().contains(id, vk2)); assertFalse(getFacet().contains(altid, vk1)); assertFalse(getFacet().contains(id, VariableKey.getConstant("Var3"))); } @Test public void testUselessRemove() { Object source = new Object(); CDOMObject t1 = new PCTemplate(); VariableKey vk1 = VariableKey.getConstant("Var1"); DataFacetChangeEvent<CharID, CDOMObject> dfce = new DataFacetChangeEvent<>(id, t1, source, DataFacetChangeEvent.DATA_REMOVED); getFacet().dataRemoved(dfce); assertFalse(getFacet().contains(id, vk1)); } @Test public void testAddRemove1First() { Object source = new Object(); CDOMObject t1 = new PCTemplate(); CDOMObject t2 = new PCTemplate(); VariableKey vk = VariableKey.getConstant("Var1"); t1.put(vk, FormulaFactory.getFormulaFor(2)); t2.put(vk, FormulaFactory.getFormulaFor(4)); DataFacetChangeEvent<CharID, CDOMObject> dfce = new DataFacetChangeEvent<>(id, t1, source, DataFacetChangeEvent.DATA_ADDED); getFacet().dataAdded(dfce); assertTrue(getFacet().contains(id, vk)); assertFalse(getFacet().contains(altid, vk)); assertFalse(getFacet().contains(id, VariableKey.getConstant("Var2"))); dfce = new DataFacetChangeEvent<>(id, t2, source, DataFacetChangeEvent.DATA_ADDED); getFacet().dataAdded(dfce); assertTrue(getFacet().contains(id, vk)); assertFalse(getFacet().contains(altid, vk)); assertFalse(getFacet().contains(id, VariableKey.getConstant("Var2"))); dfce = new DataFacetChangeEvent<>(id, t1, source, DataFacetChangeEvent.DATA_REMOVED); getFacet().dataRemoved(dfce); assertTrue(getFacet().contains(id, vk)); dfce = new DataFacetChangeEvent<>(id, t2, source, DataFacetChangeEvent.DATA_REMOVED); getFacet().dataRemoved(dfce); assertFalse(getFacet().contains(id, vk)); } @Test public void testAddRemove2First() { Object source = new Object(); CDOMObject t1 = new PCTemplate(); CDOMObject t2 = new PCTemplate(); VariableKey vk = VariableKey.getConstant("Var1"); t1.put(vk, FormulaFactory.getFormulaFor(2)); t2.put(vk, FormulaFactory.getFormulaFor(4)); DataFacetChangeEvent<CharID, CDOMObject> dfce = new DataFacetChangeEvent<>(id, t1, source, DataFacetChangeEvent.DATA_ADDED); getFacet().dataAdded(dfce); assertTrue(getFacet().contains(id, vk)); assertFalse(getFacet().contains(altid, vk)); assertFalse(getFacet().contains(id, VariableKey.getConstant("Var2"))); dfce = new DataFacetChangeEvent<>(id, t2, source, DataFacetChangeEvent.DATA_ADDED); getFacet().dataAdded(dfce); assertTrue(getFacet().contains(id, vk)); assertFalse(getFacet().contains(altid, vk)); assertFalse(getFacet().contains(id, VariableKey.getConstant("Var2"))); dfce = new DataFacetChangeEvent<>(id, t2, source, DataFacetChangeEvent.DATA_REMOVED); getFacet().dataRemoved(dfce); assertTrue(getFacet().contains(id, vk)); dfce = new DataFacetChangeEvent<>(id, t1, source, DataFacetChangeEvent.DATA_REMOVED); getFacet().dataRemoved(dfce); assertFalse(getFacet().contains(id, vk)); } private VariableFacet getFacet() { return facet; } }