package org.mafagafogigante.dungeon.entity.creatures; import org.mafagafogigante.dungeon.entity.TagSet; import org.mafagafogigante.dungeon.entity.creatures.Creature.Tag; import org.mafagafogigante.dungeon.entity.items.ItemPreset; import org.mafagafogigante.dungeon.game.Id; import org.mafagafogigante.dungeon.game.NameFactory; import org.junit.Assert; import org.junit.Test; import java.util.Collection; import java.util.Collections; public class CorpseItemPresetFactoryTest { @Test public void testCorpseItemPresetFactoryShouldProduceCorpsesForCreaturePresetsWithTheCorpseTag() { final CreaturePreset creaturePreset = new CreaturePreset(); creaturePreset.setId(new Id("TESTER")); creaturePreset.setType("Tester"); creaturePreset.setName(NameFactory.newInstance("Tester")); creaturePreset.setHealth(10); TagSet<Tag> tagSet = TagSet.makeEmptyTagSet(Creature.Tag.class); tagSet.addTag(Creature.Tag.CORPSE); creaturePreset.setTagSet(tagSet); CreatureFactory creatureFactory = new CreatureFactory(new CreaturePresetFactory() { @Override public Collection<CreaturePreset> getCreaturePresets() { return Collections.singleton(creaturePreset); } }); Assert.assertNotNull(new CorpseItemPresetFactory(creatureFactory).getItemPresets().iterator().next()); } @Test public void testCorpseItemPresetFactoryShouldNotProduceCorpsesForCreaturePresetsWithoutTheCorpseTag() { final CreaturePreset creaturePreset = new CreaturePreset(); creaturePreset.setId(new Id("TESTER")); creaturePreset.setType("Tester"); creaturePreset.setName(NameFactory.newInstance("Tester")); creaturePreset.setHealth(10); CreatureFactory creatureFactory = new CreatureFactory(new CreaturePresetFactory() { @Override public Collection<CreaturePreset> getCreaturePresets() { return Collections.singleton(creaturePreset); } }); Assert.assertTrue(new CorpseItemPresetFactory(creatureFactory).getItemPresets().isEmpty()); } @Test public void testCorpseItemPresetFactoryShouldProduceValidCorpsePresets() { final CreaturePreset creaturePreset = new CreaturePreset(); creaturePreset.setId(new Id("TESTER")); creaturePreset.setType("Tester"); creaturePreset.setName(NameFactory.newInstance("Tester")); creaturePreset.setHealth(10); TagSet<Tag> tagSet = TagSet.makeEmptyTagSet(Creature.Tag.class); tagSet.addTag(Creature.Tag.CORPSE); creaturePreset.setTagSet(tagSet); CreatureFactory creatureFactory = new CreatureFactory(new CreaturePresetFactory() { @Override public Collection<CreaturePreset> getCreaturePresets() { return Collections.singleton(creaturePreset); } }); ItemPreset corpsePreset = new CorpseItemPresetFactory(creatureFactory).getItemPresets().iterator().next(); Assert.assertEquals(new Id("TESTER_CORPSE"), corpsePreset.getId()); Assert.assertEquals("CORPSE", corpsePreset.getType()); Assert.assertEquals(NameFactory.newInstance("Tester Corpse"), corpsePreset.getName()); Assert.assertTrue(corpsePreset.getIntegrity().getMaximum() > 0); Assert.assertTrue(corpsePreset.getIntegrity().getCurrent() > 0); Assert.assertTrue(corpsePreset.getIntegrityDecrementOnHit() > 0); } @Test public void testCorpseItemPresetFactoryShouldProduceValidCorpsePresetsForExtremeCases() { final CreaturePreset creaturePreset = new CreaturePreset(); creaturePreset.setId(new Id("TESTER")); creaturePreset.setType("Tester"); creaturePreset.setName(NameFactory.newInstance("Tester")); creaturePreset.setHealth(1); // Extreme case that may bring up rounding issues. TagSet<Tag> tagSet = TagSet.makeEmptyTagSet(Creature.Tag.class); tagSet.addTag(Creature.Tag.CORPSE); creaturePreset.setTagSet(tagSet); CreatureFactory creatureFactory = new CreatureFactory(new CreaturePresetFactory() { @Override public Collection<CreaturePreset> getCreaturePresets() { return Collections.singleton(creaturePreset); } }); ItemPreset corpsePreset = new CorpseItemPresetFactory(creatureFactory).getItemPresets().iterator().next(); Assert.assertEquals(new Id("TESTER_CORPSE"), corpsePreset.getId()); Assert.assertEquals("CORPSE", corpsePreset.getType()); Assert.assertEquals(NameFactory.newInstance("Tester Corpse"), corpsePreset.getName()); Assert.assertTrue(corpsePreset.getIntegrity().getMaximum() > 0); Assert.assertTrue(corpsePreset.getIntegrity().getCurrent() > 0); Assert.assertTrue(corpsePreset.getIntegrityDecrementOnHit() > 0); } }