/*
* Copyright (c) 2009 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;
import junit.framework.TestCase;
import org.junit.Test;
import pcgen.cdom.enumeration.CharID;
import pcgen.cdom.enumeration.DataSetID;
import pcgen.cdom.facet.SkillRankFacet.SkillRankChangeEvent;
import pcgen.cdom.facet.SkillRankFacet.SkillRankChangeListener;
import pcgen.core.PCClass;
import pcgen.core.Skill;
public class SkillRankFacetTest extends TestCase
{
private CharID id;
private CharID altid;
private SkillRankFacet facet = new SkillRankFacet();
private Skill s1, s2, s3;
private PCClass cl1, cl2;
private SRListener listener = new SRListener();
private static class SRListener implements SkillRankChangeListener
{
public int rankEventCount;
public SkillRankChangeEvent lastRankEvent;
@Override
public void rankChanged(SkillRankChangeEvent lce)
{
rankEventCount++;
lastRankEvent = lce;
}
}
@Override
public void setUp() throws Exception
{
super.setUp();
DataSetID cid = DataSetID.getID();
id = CharID.getID(cid);
altid = CharID.getID(cid);
facet.addSkillRankChangeListener(listener);
s1 = new Skill();
s1.setName("S1");
s2 = new Skill();
s2.setName("S2");
s3 = new Skill();
s3.setName("S3");
cl1 = new PCClass();
cl1.setName("Cl1");
cl2 = new PCClass();
cl2.setName("Cl2");
}
private void assertEventCount(int l)
{
assertEquals(l, listener.rankEventCount);
}
@Test
public void testRankUnsetZero()
{
assertEquals(0.0f, facet.getRank(id, s1));
}
@Test
public void testUnsetEmpty()
{
assertNull(facet.get(id, s1, cl1));
}
@Test
public void testAddCharIDNull()
{
try
{
facet.set(null, s1, cl1, 4.0);
fail();
}
catch (IllegalArgumentException e)
{
// Yep!
}
testRankUnsetZero();
testUnsetEmpty();
assertEventCount(0);
}
@Test
public void testAddSkillNull()
{
try
{
facet.set(id, null, cl1, 4.0);
fail();
}
catch (IllegalArgumentException e)
{
// Yep!
}
testRankUnsetZero();
testUnsetEmpty();
assertEventCount(0);
}
@Test
public void testAddClassNull()
{
testRankUnsetZero();
testUnsetEmpty();
assertEventCount(0);
facet.set(id, s1, null, 4.0);
assertEventCount(1);
assertEquals(4.0f, facet.get(id, s1, null).floatValue());
assertEquals(4.0f, facet.getRank(id, s1));
}
@Test
public void testAddSingleGet()
{
testRankUnsetZero();
testUnsetEmpty();
assertEventCount(0);
facet.set(id, s1, cl1, 4.0);
assertEventCount(1);
assertEquals(4.0f, facet.get(id, s1, cl1).floatValue());
assertEquals(4.0f, facet.getRank(id, s1));
}
@Test
public void testAddTwiceGet()
{
testRankUnsetZero();
testUnsetEmpty();
assertEventCount(0);
facet.set(id, s1, cl1, 4.0);
facet.set(id, s1, cl2, 2.0);
assertEventCount(2);
assertEquals(4.0f, facet.get(id, s1, cl1).floatValue());
assertEquals(2.0f, facet.get(id, s1, cl2).floatValue());
assertEquals(6.0f, facet.getRank(id, s1));
}
@Test
public void testAddRankEvent()
{
testRankUnsetZero();
testUnsetEmpty();
assertEventCount(0);
facet.set(id, s1, cl1, 4.0);
assertEventCount(1);
SkillRankChangeEvent event = listener.lastRankEvent;
assertEquals(s1, event.getSkill());
assertEquals(0.0f, event.getOldRank());
assertEquals(4.0f, event.getNewRank());
//More Ranks
facet.set(id, s1, cl2, 2.0);
event = listener.lastRankEvent;
assertEquals(s1, event.getSkill());
assertEquals(4.0f, event.getOldRank());
assertEquals(6.0f, event.getNewRank());
}
@Test
public void testRemoveRankEvent()
{
testRankUnsetZero();
testUnsetEmpty();
assertEventCount(0);
facet.set(id, s1, cl1, 4);
assertEventCount(1);
SkillRankChangeEvent event = listener.lastRankEvent;
assertEquals(s1, event.getSkill());
assertEquals(0.0f, event.getOldRank());
assertEquals(4.0f, event.getNewRank());
//Remove
facet.remove(id, s1, cl1);
event = listener.lastRankEvent;
assertEquals(s1, event.getSkill());
assertEquals(4.0f, event.getOldRank());
assertEquals(0.0f, event.getNewRank());
assertEquals(0.0f, facet.getRank(id, s1));
}
@Test
public void testRemoveNonEvent()
{
testRankUnsetZero();
testUnsetEmpty();
assertEventCount(0);
facet.remove(id, s1, cl1);
testRankUnsetZero();
testUnsetEmpty();
assertEventCount(0);
}
@Test
public void testRemoveUseless()
{
testRankUnsetZero();
testUnsetEmpty();
assertEventCount(0);
facet.set(id, s1, cl1, 4);
assertEventCount(1);
assertEquals(4.0f, facet.getRank(id, s1));
facet.remove(id, s1, cl2);
assertEventCount(1);
assertEquals(4.0f, facet.getRank(id, s1));
}
@Test
public void testRemoveUselessTwo()
{
testRankUnsetZero();
testUnsetEmpty();
assertEventCount(0);
facet.set(id, s2, cl1, 4);
assertEventCount(1);
assertEquals(4.0f, facet.getRank(id, s2));
facet.remove(id, s1, cl2);
assertEventCount(1);
assertEquals(4.0f, facet.getRank(id, s2));
}
@Test
public void testRemoveCharIDNull()
{
try
{
facet.remove(null, s1, cl1);
fail();
}
catch (IllegalArgumentException e)
{
// Yep!
}
testRankUnsetZero();
testUnsetEmpty();
assertEventCount(0);
}
@Test
public void testRemoveSkillNull()
{
try
{
facet.remove(id, null, cl1);
fail();
}
catch (IllegalArgumentException e)
{
// Yep!
}
testRankUnsetZero();
testUnsetEmpty();
assertEventCount(0);
}
@Test
public void testRemoveClassNull()
{
testRankUnsetZero();
testUnsetEmpty();
assertEventCount(0);
facet.set(id, s1, null, 4);
assertEventCount(1);
SkillRankChangeEvent event = listener.lastRankEvent;
assertEquals(s1, event.getSkill());
assertEquals(0.0f, event.getOldRank());
assertEquals(4.0f, event.getNewRank());
//Remove
facet.remove(id, s1, null);
event = listener.lastRankEvent;
assertEquals(s1, event.getSkill());
assertEquals(4.0f, event.getOldRank());
assertEquals(0.0f, event.getNewRank());
assertEquals(0.0f, facet.getRank(id, s1));
}
/*
* TODO What about negative NamedValue??
*/
@Test
public void testGetSetIndependence()
{
//TODO Not possible with NamedValue being mutable :(
}
@Test
public void testCopyContents()
{
facet.set(id, s1, cl1, 4);
facet.set(id, s2, cl2, 2);
assertEquals(0.0f, facet.getRank(altid, s1));
assertEquals(0.0f, facet.getRank(altid, s2));
facet.copyContents(id, altid);
assertEquals(4.0f, facet.getRank(altid, s1));
assertEquals(2.0f, facet.getRank(altid, s2));
}
@Test
public void testEmptyCopyContents()
{
facet.copyContents(id, altid);
assertEquals(0.0f, facet.getRank(altid, s1));
}
}