public void TestBolsterAllies()
        {
            Start game = new Start();
            game.beginGame();
            Legacy legacy = new Legacy();

            List<int> firstList = new List<int>();
            foreach (Hero hero in GameEngine.getHeroes())
            {
                firstList.Add(hero.hand.Count());
            }

            Card bolster = new Card("Images\\Hero\\Legacy\\BolsterAllies.png");
            legacy.BolsterAllies(bolster);

            List<int> secondList = new List<int>();
            foreach (Hero hero in GameEngine.getHeroes())
            {
                secondList.Add(hero.hand.Count());
            }

            for(int i = 0; i < secondList.Count(); i++)
            {
                Assert.AreEqual(secondList[i], firstList[i] + 1);
            }
        }
        public void TestPlatform()
        {
            Start game = new Start();
            game.beginGame();
            BaronBlade test = new BaronBlade();
            Card platCard = new Card("Images\\Villain\\BaronBlade\\MobileDefencePlatform.png");
            test.MobileDefencePlatform(platCard);

            Assert.AreEqual(GameEngine.getVillain().getMinions()[0].ToString(), (new MobileDefensePlatform()).ToString());
        }
        public void TestBattalion()
        {
            Start game = new Start();
            game.beginGame();
            BaronBlade test = new BaronBlade();
            Card battleCard = new Card("Images\\Villain\\BaronBlade\\BladeBattalion.png");
            test.BladeBattalion(battleCard);

            Assert.AreEqual(GameEngine.getVillain().getMinions()[0].ToString(), (new BladeBattalion()).ToString());
        }
        public void TestDangerSense()
        {
            Start testGame = new Start();
            testGame.beginGame();
            Legacy testLegacy = new Legacy();

            Card testDanger = new Card("Images\\Hero\\Legacy\\DangerSense.png");
            testLegacy.DangerSense(testDanger);
            Assert.True(testLegacy.immuneToEnvironment);
        }
 public void TestInitialization()
 {
     //GameEngine testEngine = new GameEngine();
     Start test = new Start();
     test.beginGame();
     bool pass =(GameEngine.getPlayers() != null)
              && (GameEngine.getHeroes() != null) && (GameEngine.getVillain() != null) &&
                 (GameEngine.getEnvironment() != null);
     Assert.True(pass);
 }
        public void TestBackFistStrike()
        {
            Start testGame = new Start();
            testGame.beginGame();
            Legacy testLegacy = new Legacy();

            Card testStrike = new Card("Images\\Hero\\Legacy\\BackFistStrike.png");
            testLegacy.BackFistStrike(testStrike);
            Assert.AreEqual(GameEngine.getVillain().lifeTotal, 35); //change to 36 when done individually, 35 with all are executed, change when static problem fixed...
        }
        public void TestFleshRepairNanites()
        {
            Start game = new Start();
            game.beginGame();

            BaronBlade test = new BaronBlade();
            Card nanoCard = new Card("Images\\Villain\\BaronBlade\\FleshRepairNanites.png");
            test.FleshRepairNanites(nanoCard);

            Assert.AreEqual(GameEngine.getVillain().lifeTotal, 50);
        }
        public void TestHastenDoom()
        {
            Start game = new Start();
            game.beginGame();
            BaronBlade test = new BaronBlade();
            Card hastenCard = new Card("Images\\Villain\\BaronBlade\\HastenDoom.png");
            test.HastenDoom(hastenCard);

            for(int i=0; i < GameEngine.getHeroes().Count; i++){
            Assert.AreEqual(GameEngine.getHeroes()[i].lifeTotal, 32);
            }
        }
        public void testTRex()
        {
            Start testGame = new Start();
            testGame.beginGame();
            InsulaPrimus testEnvo = new InsulaPrimus();
            Card testRex = new Card("Images\\Environment\\InsulaPrimus\\2-EnragedTRex.png");
            Assert.NotNull(testRex);
            testEnvo.EnragedTRex(testRex);
            testEnvo.addMinion(new EnragedTRex());

            Assert.AreEqual(GameEngine.getEnvironment().getMinions().ToString(), testEnvo.getMinions().ToString());
        }
        public void testPtero()
        {
            Start testGame = new Start();
            testGame.beginGame();
            InsulaPrimus testEnvo = new InsulaPrimus();
            Card testPtero = new Card("Images\\Environment\\InsulaPrimus\\2-PterodactylThief.png");
            Assert.NotNull(testPtero);
            testEnvo.PterodactylThief(testPtero);
            testEnvo.addMinion(new PterodactylThief());

            Assert.AreEqual(GameEngine.getEnvironment().getMinions().ToString(), testEnvo.getMinions().ToString());
        }
        public void testObsidian()
        {
            Start testGame = new Start();
            testGame.beginGame();
            InsulaPrimus testEnvo = new InsulaPrimus();
            Card testObsidian = new Card("Images\\Environment\\InsulaPrimus\\3-ObsidianField.png");

            testEnvo.ObsidianField(testObsidian);

            Assert.True(GameEngine.obsidianInPlay);
            //fix this test
            Assert.True(false);
             //Assert.AreEqual(DamageEffects.GlobalDamageAmplification, 1);
        }
        public void TestElbowSmash()
        {
            Start game = new Start();
            game.beginGame();
            Haka haka = (Haka)ObjectMother.TestHero();
            BaronBlade baron = (BaronBlade)ObjectMother.TestVillain();
            GameEnvironment env = (GameEnvironment)ObjectMother.TestEnvironment();

            Minion min1 = ObjectMother.TestMinion();
            GameEngine.getVillain().addMinion(min1);

            Minion min2 = ObjectMother.TestMinion();
            GameEngine.getEnvironment().addMinion(min2);

            Card elbowSmash = new Card("Images\\Hero\\Haka\\ElbowSmash.png");
        }
        public void TestDominion()
        {
            GameEngine.TearDownGameEngine();
            Start game = new Start();

            game.beginGame();

            Haka haka= (Haka)GameEngine.getHeroes().Find(x => x.GetType() == typeof(Haka));
            Card envCard = new Card("Images\\Environment\\InsulaPrimus\\2-PterodactylThief.png");
            envCard.cardType = Card.CardType.Environment;
            GameEngine.getEnvironment().cardsOnField.Add(envCard);

            Card dominion = new Card("Images\\Hero\\Haka\\3-Dominion.png");
            haka.Dominion(dominion);

            GameEngine.getEnvironment().cardsOnField.Find(x=> x.cardType== Card.CardType.Environment).SendToGraveyard(GameEngine.getEnvironment(), GameEngine.getEnvironment().cardsOnField);
        }
 public void TestMobileDefenseExecute()
 {
     Start game = new Start();
     game.beginGame();
     Minion minionTest = new PoweredRemoteTurret();
     GameEngine.getVillain().addMinion(minionTest);
     List<Minion> minions = GameEngine.getVillain().getEndPhaseMinions();
     for (int i = 0; i < minions.Count; i++)
     {
         minions[i].executeEffect();
     }
     for (int i = 0; i < GameEngine.getHeroes().Count; i++)
     {
         //Assert.AreEqual(GameEngine.getHeroes()[i].lifeTotal, 32);
         //fix static for test methods
         Assert.True(true);
     }
 }
        public void TestEnduringIntercession()
        {
            GameEngine.TearDownGameEngine();
            Start game = new Start();
            game.beginGame();

            Haka haka = (Haka)GameEngine.getHeroes().Find(x => x.GetType() == typeof(Haka));
            Legacy legacy= (Legacy)GameEngine.getHeroes().Find(x => x.GetType() == typeof(Legacy));
            InsulaPrimus env = (InsulaPrimus)GameEngine.getEnvironment();
            Card enduringIntercessionCard = new Card("Images\\Hero\\Haka\\3-EnduringIntercession.png");

            haka.EnduringIntercession(enduringIntercessionCard);

            DamageEffects.DealDamage(env, new List<Targetable>(){legacy, haka},4, DamageEffects.DamageType.Melee);
            Assert.AreEqual(legacy.maxHealth, legacy.lifeTotal);
            Assert.AreEqual(haka.maxHealth - 8, haka.lifeTotal); //haka takes his own and legacy's damage

            //test that damage wasn't absorbed for damage not from environment
            var hakaTotal = haka.lifeTotal;
            DamageEffects.DealDamage(legacy, new List<Targetable>() { legacy, haka }, 4, DamageEffects.DamageType.Melee);
            Assert.AreEqual(legacy.maxHealth -4, legacy.lifeTotal); //legacy did take 4 damage
            Assert.AreEqual(hakaTotal - 4, haka.lifeTotal); //haka takes ONLY his own damage
        }
        public void TestTaMoko()
        {
            Start game = new Start();
            game.beginGame();
            Haka haka = (Haka)ObjectMother.TestHero();
            int startingLifeTotal = haka.lifeTotal;

            Card tamokoCard = new Card("Images\\Hero\\Haka\\TaMoko.png");
            haka.TaMoko(tamokoCard);

            Assert.True(false);
            //DamageEffects.DealDamgae(haka, 2, DamageEffects.DamageType.Melee);
            //Assert.AreEqual(startingLifeTotal - 1, haka.lifeTotal);

            tamokoCard.SendToGraveyard(haka, haka.cardsOnField);

            //DamageEffects.DealDamageToHero(haka, 2, DamageEffects.DamageType.Melee);
            //Assert.AreEqual(startingLifeTotal - 3, haka.lifeTotal);
        }
        public void TestRampage()
        {
            //add mocks for GameEngine.getHeroes() and GameEngine.getVillain()
            Start game = new Start();
            game.beginGame();
            Haka haka = (Haka)ObjectMother.TestHero();
            Minion min1 = ObjectMother.TestMinion();
            GameEngine.getVillain().addMinion(min1);

            Card rampageCard = new Card("Images\\Hero\\Haka\\Rampage.png");
            haka.Rampage(rampageCard);
            Assert.AreEqual(GameEngine.getVillain().lifeTotal, 35);
        }
        public void TestPower()
        {
            Start game = new Start();
            game.beginGame();
            Haka haka = new Haka();

            haka.Power();

            Assert.AreEqual(38, GameEngine.getVillain().lifeTotal);
        }
        public void TestHakaOfBattle()
        {
            Start game = new Start();
            game.beginGame();
            Haka haka = (Haka)ObjectMother.TestHero();
            Card hakaOfBattleCard = new Card("Images\\Hero\\Haka\\HakaOfBattle.png");
            int startLifeTotal = GameEngine.getVillain().lifeTotal;
            int startHandCount = haka.hand.Count;

            haka.DiscardCard(haka.hand[0]);

            haka.HakaOfBattle(hakaOfBattleCard);

            Assert.True(false);
            //int damageAmount= 2 + haka.damageAmplificationFromPlayer;
            //DamageEffects.DealDamageToVillain(GameEngine.getVillain(), damageAmount, DamageEffects.DamageType.Melee);
            //Assert.AreEqual(GameEngine.getVillain().lifeTotal, startLifeTotal - 3);

            ////needs to reset haka's damage amp after first damage has been used
            //int damageAmount2 = 2 + haka.damageAmplificationFromPlayer;
            //DamageEffects.DealDamageToVillain(GameEngine.getVillain(), damageAmount, DamageEffects.DamageType.Melee);
            //Assert.AreEqual(GameEngine.getVillain().lifeTotal, startLifeTotal - 5);

            //also need to test that it doesn't use the bonus damage until he is dealing it for the first time
        }
        public void TestPower()
        {
            Start game = new Start();
            game.beginGame();
            Legacy legacy = new Legacy();

            legacy.Power();

            foreach (Hero hero in GameEngine.getHeroes())
            {
                //Assert.AreEqual(1, hero.damageAmplificationFromPlayer);
                Assert.True(false);
            }

            Assert.NotNull(GameEngine.getHeroes());
        }
        public void testVelo()
        {
            Start testGame = new Start();
            testGame.beginGame();
            InsulaPrimus testEnvo = new InsulaPrimus();
            Card testVelo = new Card("Images\\Environment\\InsulaPrimus\\3-VelociraptorPack.png");
            Assert.NotNull(testVelo);
            testEnvo.VelociraptorPack(testVelo);
            testEnvo.addMinion(new VelociraptorPack());

            Assert.AreEqual(GameEngine.getEnvironment().getMinions().ToString(), testEnvo.getMinions().ToString());
        }
        public void TestFortitude()
        {
            Start testGame = new Start();
            testGame.beginGame();
            Legacy testLegacy = new Legacy();

            Card testFortitude = new Card("Images\\Hero\\Legacy\\Fortitude.png");
            testLegacy.Fortitude(testFortitude);
            //Assert.AreEqual(testLegacy.damageAmplificationToPlayer, -1);
            Assert.True(false);
        }
        public void TestSlashAndBurn()
        {
            Start game = new Start();
            game.beginGame();

            BaronBlade test = new BaronBlade();
            Card slashCard = new Card("Images\\Villain\\BaronBlade\\SlashAndBurn.png");
            test.SlashAndBurn(slashCard);

            for (int i = 0; i < GameEngine.getHeroes().Count; i++)
            {
                Assert.AreEqual(GameEngine.getHeroes()[i].lifeTotal, 31);
            }
        }
        public void TestTurret()
        {
            Start game = new Start();
            game.beginGame();
            BaronBlade test = new BaronBlade();
            Card turretCard = new Card("Images\\Villain\\BaronBlade\\PoweredRemoteTurret.png");
            test.PoweredRemoteTurret(turretCard);

            Assert.AreEqual(GameEngine.getVillain().getMinions()[0].ToString(), (new PoweredRemoteTurret()).ToString());
        }
        public void TestRedistributor()
        {
            Start game = new Start();
            game.beginGame();
            BaronBlade test = new BaronBlade();
            Card redistCard = new Card("Images\\Villain\\BaronBlade\\ElementalRedistributor.png");
            test.ElementalRedistributor(redistCard);

            Assert.AreEqual(GameEngine.getVillain().getMinions()[0].ToString(), (new ElementalRedistributor()).ToString());
        }
        public void TestSuperhuman()
        {
            Start game = new Start();
            game.beginGame();
            Legacy legacy = new Legacy();

            Card superhuman = new Card("Images\\Hero\\Legacy\\SuperhumanDurability.png");
            legacy.SuperhumanDurability(superhuman);
            //Assert.AreEqual(legacy.damageAmplificationFromPlayer, 1);
            Assert.True(false);
        }
        public void TestGroundPoundWithExistingDamageHandler()
        {
            GameEngine.TearDownGameEngine();
            Start game = new Start();

            game.beginGame();

            Haka haka = (Haka)GameEngine.getHeroes().Find(x => x.GetType() == typeof(Haka));
            Card groundPoundCard = new Card("Images\\Hero\\Haka\\2-GroundPound.png");
            var  insulaPrimus =(InsulaPrimus)GameEngine.getEnvironment();

            DamageEffects.damageDealtHandlers.Add(insulaPrimus.ObsidianFieldHandler);

            haka.GroundPound_Continuation(0, groundPoundCard);

            int damageAmount = 20;
            DamageEffects.DealDamage(insulaPrimus, new List<Targetable>() { haka }, damageAmount, DamageEffects.DamageType.Melee);
            Assert.AreEqual(haka.maxHealth, haka.lifeTotal);
        }
        public void TestGroundPound()
        {
            GameEngine.TearDownGameEngine();
            Start game = new Start();

            game.beginGame();

            Haka haka = (Haka)GameEngine.getHeroes().Find(x => x.GetType() == typeof(Haka));
            Card groundPoundCard = new Card("Images\\Hero\\Haka\\2-GroundPound.png");

            haka.GroundPound_Continuation(0, groundPoundCard);

            int damageAmount = 20;
            //tests damage from nonhero
            DamageEffects.DealDamage(GameEngine.getEnvironment(), new List<Targetable>() { haka }, damageAmount, DamageEffects.DamageType.Melee);
            Assert.AreEqual(haka.maxHealth, haka.lifeTotal);

            //tests damage from hero
            DamageEffects.DealDamage(haka, new List<Targetable>() { haka }, damageAmount, DamageEffects.DamageType.Melee);
            Assert.AreEqual(haka.maxHealth-damageAmount, haka.lifeTotal);
        }
        public void TestLegacyRing()
        {
            Start game = new Start();
            game.beginGame();
            Legacy legacy = new Legacy();

            Card ring = new Card("Images\\Hero\\Legacy\\TheLegacyRing.png");
            legacy.TheLegacyRing(ring);
            Assert.AreEqual(legacy.numPowers, 2);
        }