package mage; import static junit.framework.TestCase.assertFalse; import mage.constants.ColoredManaSymbol; import mage.constants.ManaType; import mage.filter.FilterMana; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertNotSame; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import java.util.Objects; /** * Custom unit tests for {link Mana}. * * @author githubpoixen@github.com */ public class ManaTest { @Rule public ExpectedException expectedException = ExpectedException.none(); @Test public void shouldNotAllowNullCopyConstructor() { // given expectedException.expect(NullPointerException.class); expectedException.expectMessage("The passed in mana can not be null"); // when Mana nullMana = null; new Mana(nullMana); } @Test public void shouldCreateManaFromCopy() { // given Mana original = new Mana(); original.increaseBlack(); // when Mana copy = new Mana(original); // then assertEquals(0, copy.getGreen()); assertEquals(0, copy.getRed()); assertEquals(1, copy.getBlack()); assertEquals(0, copy.getBlue()); assertEquals(0, copy.getWhite()); } @Test public void shouldCreateManaFromGreenColoredManaSymbol() { // given ColoredManaSymbol symbol = ColoredManaSymbol.G; // when Mana mana = new Mana(symbol); // then assertEquals(1, mana.getGreen()); assertEquals(0, mana.getRed()); assertEquals(0, mana.getBlack()); assertEquals(0, mana.getBlue()); assertEquals(0, mana.getWhite()); } @Test public void shouldCreateManaFromRedColoredManaSymbol() { // given ColoredManaSymbol symbol = ColoredManaSymbol.R; // when Mana mana = new Mana(symbol); // then assertEquals(0, mana.getGreen()); assertEquals(1, mana.getRed()); assertEquals(0, mana.getBlack()); assertEquals(0, mana.getBlue()); assertEquals(0, mana.getWhite()); } @Test public void shouldCreateManaFromBlackColoredManaSymbol() { // given ColoredManaSymbol symbol = ColoredManaSymbol.B; // when Mana mana = new Mana(symbol); // then assertEquals(0, mana.getGreen()); assertEquals(0, mana.getRed()); assertEquals(1, mana.getBlack()); assertEquals(0, mana.getBlue()); assertEquals(0, mana.getWhite()); } @Test public void shouldCreateManaFromBlueColoredManaSymbol() { // given ColoredManaSymbol symbol = ColoredManaSymbol.U; // when Mana mana = new Mana(symbol); // then assertEquals(0, mana.getGreen()); assertEquals(0, mana.getRed()); assertEquals(0, mana.getBlack()); assertEquals(1, mana.getBlue()); assertEquals(0, mana.getWhite()); } @Test public void shouldCreateManaFromWhiteColoredManaSymbol() { // given ColoredManaSymbol symbol = ColoredManaSymbol.W; // when Mana mana = new Mana(symbol); // then assertEquals(0, mana.getGreen()); assertEquals(0, mana.getRed()); assertEquals(0, mana.getBlack()); assertEquals(0, mana.getBlue()); assertEquals(1, mana.getWhite()); } @Test public void shouldNotCreateManaFromNullColoredManaSymbol() { // given ColoredManaSymbol nullSymbol = null; expectedException.expect(NullPointerException.class); expectedException.expectMessage("The passed in ColoredManaSymbol can not be null"); // when new Mana(nullSymbol); } @Test public void shouldCreateManaFromIntegers() { // when Mana mana = new Mana(1, 2, 3, 4, 5, 6, 7, 8); // then assertEquals(1, mana.getRed()); assertEquals(2, mana.getGreen()); assertEquals(3, mana.getBlue()); assertEquals(4, mana.getWhite()); assertEquals(5, mana.getBlack()); assertEquals(6, mana.getGeneric()); assertEquals(7, mana.getAny()); assertEquals(8, mana.getColorless()); } @Test public void shouldNotAllowNegativeIntegers() { // given // when Mana mana = new Mana(-1, 2, 3, 4, 5, 6, 7, 0); // then assertEquals(0, mana.getRed()); } @Test public void shouldCreateRedMana() { // when Mana mana = Mana.RedMana(1); // then assertEquals(1, mana.getRed()); } @Test public void shouldCreateGreenMana() { // when Mana mana = Mana.GreenMana(1); // then assertEquals(1, mana.getGreen()); } @Test public void shouldCreateBlueMana() { // when Mana mana = Mana.BlueMana(1); // then assertEquals(1, mana.getBlue()); } @Test public void shouldCreateWhiteMana() { // when Mana mana = Mana.WhiteMana(1); // then assertEquals(1, mana.getWhite()); } @Test public void shouldCreateBlackMana() { // when Mana mana = Mana.BlackMana(1); // then assertEquals(1, mana.getBlack()); } @Test public void shouldCreateGenericMana() { // when Mana mana = Mana.GenericMana(1); // then assertEquals(1, mana.getGeneric()); } @Test public void shouldCreateColorlessMana() { // when Mana mana = Mana.ColorlessMana(1); // then assertEquals(1, mana.getColorless()); } @Test public void shouldNotAllowNegativeRedMana() { // given // when Mana mana = Mana.RedMana(-1); //then assertEquals(0, mana.getRed()); } @Test public void shouldNotAllowNegativeGreenMana() { // given // when Mana mana = Mana.GreenMana(-1); //then assertEquals(0, mana.getGreen()); } @Test public void shouldNotAllowNegativeBlueMana() { // given // when Mana mana = Mana.BlueMana(-1); //then assertEquals(0, mana.getBlue()); } @Test public void shouldNotAllowNegativeWhiteMana() { // given // when Mana mana = Mana.WhiteMana(-1); //then assertEquals(0, mana.getWhite()); } @Test public void shouldNotAllowNegativeBlackMana() { // given // when Mana mana = Mana.BlackMana(-1); //then assertEquals(0, mana.getBlack()); } @Test public void shouldNotAllowNegativeColorlessMana() { // given // when Mana mana = Mana.GenericMana(-1); //then assertEquals(0, mana.getGeneric()); } @Test public void shouldAddMana() { // given Mana thisMana = new Mana(1, 2, 3, 4, 5, 6, 7, 0); Mana thatMana = new Mana(1, 2, 3, 4, 5, 6, 7, 0); // when thisMana.add(thatMana); // then assertEquals(2, thisMana.getRed()); assertEquals(4, thisMana.getGreen()); assertEquals(6, thisMana.getBlue()); assertEquals(8, thisMana.getWhite()); assertEquals(10, thisMana.getBlack()); assertEquals(12, thisMana.getGeneric()); assertEquals(14, thisMana.getAny()); } @Test public void shouldIncreaseRedMana() { // given Mana mana = new Mana(); // when mana.increaseRed(); // then assertEquals(1, mana.getRed()); } @Test public void shouldIncreaseGreenMana() { // given Mana mana = new Mana(); // when mana.increaseGreen(); // then assertEquals(1, mana.getGreen()); } @Test public void shouldIncreaseBlueMana() { // given Mana mana = new Mana(); // when mana.increaseBlue(); // then assertEquals(1, mana.getBlue()); } @Test public void shouldIncreaseWhiteMana() { // given Mana mana = new Mana(); // when mana.increaseWhite(); // then assertEquals(1, mana.getWhite()); } @Test public void shouldIncreaseBlackMana() { // given Mana mana = new Mana(); // when mana.increaseBlack(); // then assertEquals(1, mana.getBlack()); } @Test public void shouldIncreaseColorlessMana() { // given Mana mana = new Mana(); // when mana.increaseGeneric(); // then assertEquals(1, mana.getGeneric()); } @Test public void shouldSubtractMana() { // given Mana thisMana = new Mana(2, 2, 2, 2, 2, 2, 2, 2); Mana thatMana = new Mana(1, 1, 1, 1, 1, 1, 1, 1); // when thisMana.subtract(thatMana); // then assertEquals(1, thisMana.getRed()); assertEquals(1, thisMana.getGreen()); assertEquals(1, thisMana.getBlue()); assertEquals(1, thisMana.getWhite()); assertEquals(1, thisMana.getBlack()); assertEquals(1, thisMana.getGeneric()); assertEquals(1, thisMana.getAny()); assertEquals(1, thisMana.getColorless()); } @Test public void shouldSubtractCost() { // given Mana thisMana = new Mana(2, 2, 2, 2, 2, 2, 2, 0); Mana thatMana = new Mana(10, 1, 1, 1, 10, 1, 1, 0); // when thisMana.subtractCost(thatMana); // then assertEquals(-8, thisMana.getRed()); assertEquals(1, thisMana.getGreen()); assertEquals(1, thisMana.getBlue()); assertEquals(1, thisMana.getWhite()); assertEquals(-8, thisMana.getBlack()); assertEquals(1, thisMana.getGeneric()); assertEquals(1, thisMana.getAny()); } @Test public void shouldUseExistingManaToPayColorless() { // given Mana available = new Mana(); available.setRed(7); Mana cost = new Mana(); cost.setRed(4); cost.setGeneric(2); // when available.subtractCost(cost); // then assertEquals(1, available.getRed()); } @Test public void shouldThrowExceptionOnUnavailableColorless() { // given expectedException.expect(ArithmeticException.class); expectedException.expectMessage("Not enough mana to pay colorless"); Mana available = new Mana(); available.setRed(4); Mana cost = new Mana(); cost.setRed(4); cost.setGeneric(2); // when available.subtractCost(cost); } @Test public void shouldReturnCount() { // given Mana mana = new Mana(1, 2, 3, 4, 5, 6, 7, 0); FilterMana filter = new FilterMana(); filter.setBlack(true); // when int totalCount = mana.count(); int coloredCount = mana.countColored(); int filteredMana = mana.count(filter); // then assertEquals(28, totalCount); assertEquals(22, coloredCount); assertEquals(5, filteredMana); } @Test public void shouldReturnString() { // given Mana mana = new Mana(1, 2, 3, 0, 3, 6, 2, 0); // when String ret = mana.toString(); // then assertEquals("{6}{R}{G}{G}{U}{U}{U}{B}{B}{B}{Any}{Any}", ret); } @Test public void shouldClearMana() { // given Mana mana = new Mana(1, 2, 3, 4, 5, 6, 7, 0); // when mana.clear(); // then assertEquals(0, mana.getRed()); assertEquals(0, mana.getGreen()); assertEquals(0, mana.getBlue()); assertEquals(0, mana.getWhite()); assertEquals(0, mana.getBlack()); assertEquals(0, mana.getGeneric()); assertEquals(0, mana.getAny()); } @Test public void shouldReturnCopy() { // given Mana mana = new Mana(1, 2, 3, 4, 5, 6, 7, 0); // when Mana copy = mana.copy(); // then assertEquals(mana, copy); // are equal assertNotSame(mana, copy); // are not the same object } @Test public void shouldGetColorByColoredManaSymbol() { // given Mana mana = new Mana(1, 1, 1, 1, 1, 1, 1, 0); // when int redMana = mana.getColor(ColoredManaSymbol.R); int greenMana = mana.getColor(ColoredManaSymbol.G); int blueMana = mana.getColor(ColoredManaSymbol.U); int blackMana = mana.getColor(ColoredManaSymbol.B); int whiteMana = mana.getColor(ColoredManaSymbol.W); // then assertEquals(1, redMana); assertEquals(1, greenMana); assertEquals(1, blueMana); assertEquals(1, blackMana); assertEquals(1, whiteMana); } @Test public void shouldGetColorByManaType() { // given Mana mana = new Mana(1, 1, 1, 1, 1, 1, 1, 0); // when int redMana = mana.get(ManaType.RED); int greenMana = mana.get(ManaType.GREEN); int blueMana = mana.get(ManaType.BLUE); int blackMana = mana.get(ManaType.BLACK); int whiteMana = mana.get(ManaType.WHITE); int colorlessMana = mana.get(ManaType.COLORLESS); // then assertEquals(1, redMana); assertEquals(1, greenMana); assertEquals(1, blueMana); assertEquals(1, blackMana); assertEquals(1, whiteMana); assertEquals(1, colorlessMana); } @Test public void shouldSetManaFromType() { // given Mana mana = new Mana(); // when mana.set(ManaType.BLACK, 3); mana.set(ManaType.BLUE, 4); mana.set(ManaType.RED, 5); mana.set(ManaType.GREEN, 6); mana.set(ManaType.WHITE, 7); mana.set(ManaType.COLORLESS, 8); // then assertEquals(3, mana.getBlack()); assertEquals(4, mana.getBlue()); assertEquals(5, mana.getRed()); assertEquals(6, mana.getGreen()); assertEquals(7, mana.getWhite()); assertEquals(8, mana.getColorless()); } @Test public void shouldSetToMana() { // given Mana mana = new Mana(); Mana newMana = new Mana(1, 2, 3, 4, 5, 6, 7, 0); // when mana.setToMana(newMana); // then assertEquals(mana, newMana); assertNotSame(mana, newMana); } @Test public void shouldHaveEqualManaValue() { // given Mana mana = new Mana(1, 2, 3, 4, 5, 6, 7, 0); Mana newMana = new Mana(1, 2, 3, 4, 5, 6, 7, 0); // when boolean equalMana = mana.equalManaValue(newMana); // then assertTrue(equalMana); } @Test public void shouldGetDifferentColors() { // given Mana mana = new Mana(); mana.setRed(3); mana.setGreen(2); // when int colors = mana.getDifferentColors(); // then assertEquals(2, colors); } @Test public void shouldNotSetManaLessThanZero() { // given Mana mana = new Mana(); // when mana.setRed(-4); mana.setGreen(-4); mana.setBlue(-4); mana.setWhite(-4); mana.setBlack(-4); mana.setGeneric(-4); mana.setAny(-4); // then assertEquals(0, mana.getRed()); assertEquals(0, mana.getGreen()); assertEquals(0, mana.getBlue()); assertEquals(0, mana.getWhite()); assertEquals(0, mana.getBlack()); assertEquals(0, mana.getGeneric()); assertEquals(0, mana.getAny()); } }