package pcgen.cdom.helper;
import pcgen.cdom.content.CNAbility;
import pcgen.cdom.content.CNAbilityFactory;
import pcgen.cdom.enumeration.Nature;
import pcgen.cdom.enumeration.ObjectKey;
import pcgen.cdom.reference.CDOMDirectSingleRef;
import pcgen.core.Ability;
import pcgen.core.AbilityCategory;
import org.junit.Before;
import org.junit.Test;
import static junit.framework.TestCase.assertFalse;
import static junit.framework.TestCase.assertTrue;
public class CNAbilitySelectionUtilitiesTest
{
AbilityCategory feat;
AbilityCategory fighterfeat;
AbilityCategory specialty;
Ability nomult;
Ability multyes;
Ability stackyes;
Ability othernomult;
@Before
public void setUp() throws Exception
{
CNAbilityFactory.reset();
feat = new AbilityCategory();
feat.setName("FEAT");
fighterfeat = new AbilityCategory();
fighterfeat.setName("Fighter Feat");
fighterfeat.setAbilityCategory(CDOMDirectSingleRef.getRef(feat));
specialty = new AbilityCategory();
specialty.setName("Specialty");
nomult = new Ability();
nomult.setName("NoMult");
nomult.setCDOMCategory(feat);
multyes = new Ability();
multyes.setName("MultYes");
multyes.setCDOMCategory(feat);
multyes.put(ObjectKey.MULTIPLE_ALLOWED, true);
stackyes = new Ability();
stackyes.setName("MultYes");
stackyes.setCDOMCategory(feat);
stackyes.put(ObjectKey.MULTIPLE_ALLOWED, true);
stackyes.put(ObjectKey.STACKS, true);
othernomult = new Ability();
othernomult.setName("OtherNoMult");
othernomult.setCDOMCategory(feat);
}
@Test
public void testDifferentCategory()
{
CNAbility nomultCNA = CNAbilityFactory.getCNAbility(feat, Nature.NORMAL, nomult);
Ability trickster = new Ability();
trickster.setName("NoMult");
trickster.setCDOMCategory(specialty);
CNAbility othernomultCNA =
CNAbilityFactory.getCNAbility(specialty, Nature.NORMAL, trickster);
CNAbilitySelection cnas1 = new CNAbilitySelection(nomultCNA);
CNAbilitySelection cnas2 = new CNAbilitySelection(othernomultCNA);
assertTrue(CNAbilitySelectionUtilities.canCoExist(cnas1, cnas2));
}
@Test
public void testDifferentAbility()
{
CNAbility nomultCNA = CNAbilityFactory.getCNAbility(feat, Nature.NORMAL, nomult);
CNAbility othernomultCNA =
CNAbilityFactory.getCNAbility(feat, Nature.NORMAL, othernomult);
CNAbilitySelection cnas1 = new CNAbilitySelection(nomultCNA);
CNAbilitySelection cnas2 = new CNAbilitySelection(othernomultCNA);
assertTrue(CNAbilitySelectionUtilities.canCoExist(cnas1, cnas2));
}
@Test
public void testDifferentNature()
{
CNAbility normal = CNAbilityFactory.getCNAbility(feat, Nature.NORMAL, nomult);
CNAbility virtual = CNAbilityFactory.getCNAbility(feat, Nature.VIRTUAL, nomult);
CNAbilitySelection cnas1 = new CNAbilitySelection(normal);
CNAbilitySelection cnas2 = new CNAbilitySelection(virtual);
assertFalse(CNAbilitySelectionUtilities.canCoExist(cnas1, cnas2));
}
@Test
public void testDetectSameParentCategory()
{
CNAbility n1 = CNAbilityFactory.getCNAbility(feat, Nature.NORMAL, nomult);
CNAbility n2 = CNAbilityFactory.getCNAbility(fighterfeat, Nature.NORMAL, nomult);
CNAbilitySelection cnas1 = new CNAbilitySelection(n1);
CNAbilitySelection cnas2 = new CNAbilitySelection(n2);
assertFalse(CNAbilitySelectionUtilities.canCoExist(cnas1, cnas2));
CNAbility virtual = CNAbilityFactory.getCNAbility(fighterfeat, Nature.VIRTUAL, nomult);
CNAbilitySelection cnas3 = new CNAbilitySelection(virtual);
assertFalse(CNAbilitySelectionUtilities.canCoExist(cnas1, cnas3));
}
@Test
public void testDetectSameSelection()
{
CNAbility n1 = CNAbilityFactory.getCNAbility(feat, Nature.NORMAL, multyes);
CNAbility n2 = CNAbilityFactory.getCNAbility(feat, Nature.NORMAL, multyes);
CNAbilitySelection cnas1 = new CNAbilitySelection(n1, "English");
CNAbilitySelection cnas2 = new CNAbilitySelection(n2, "English");
assertFalse(CNAbilitySelectionUtilities.canCoExist(cnas1, cnas2));
}
@Test
public void testDifferentSelection()
{
CNAbility n1 = CNAbilityFactory.getCNAbility(feat, Nature.NORMAL, multyes);
CNAbility n2 = CNAbilityFactory.getCNAbility(feat, Nature.NORMAL, multyes);
CNAbilitySelection cnas1 = new CNAbilitySelection(n1, "English");
CNAbilitySelection cnas2 = new CNAbilitySelection(n2, "German");
assertTrue(CNAbilitySelectionUtilities.canCoExist(cnas1, cnas2));
}
@Test
public void testDifferentSelectionAndNature()
{
CNAbility normal = CNAbilityFactory.getCNAbility(feat, Nature.NORMAL, multyes);
CNAbility virtual = CNAbilityFactory.getCNAbility(feat, Nature.VIRTUAL, multyes);
CNAbilitySelection cnas1 = new CNAbilitySelection(normal, "English");
CNAbilitySelection cnas2 = new CNAbilitySelection(virtual, "German");
assertTrue(CNAbilitySelectionUtilities.canCoExist(cnas1, cnas2));
}
@Test
public void testDifferentSelectionStack()
{
CNAbility n1 = CNAbilityFactory.getCNAbility(feat, Nature.NORMAL, stackyes);
CNAbility n2 = CNAbilityFactory.getCNAbility(feat, Nature.NORMAL, stackyes);
CNAbilitySelection cnas1 = new CNAbilitySelection(n1, "English");
CNAbilitySelection cnas2 = new CNAbilitySelection(n2, "German");
assertTrue(CNAbilitySelectionUtilities.canCoExist(cnas1, cnas2));
}
@Test
public void testStack()
{
CNAbility n1 = CNAbilityFactory.getCNAbility(feat, Nature.NORMAL, stackyes);
CNAbility n2 = CNAbilityFactory.getCNAbility(feat, Nature.NORMAL, stackyes);
CNAbilitySelection cnas1 = new CNAbilitySelection(n1, "English");
CNAbilitySelection cnas2 = new CNAbilitySelection(n2, "English");
assertTrue(CNAbilitySelectionUtilities.canCoExist(cnas1, cnas2));
}
}