packages feed

MazesOfMonad-1.0.7: src/MoresmauJP/Rpg/MazeObjectsTests.hs

-- | Items and Mazes hunit tests
-- (c) JP Moresmau 2009
module MoresmauJP.Rpg.MazeObjectsTests where

import qualified Data.Map as M

import MoresmauJP.Maze1.Maze
import MoresmauJP.Rpg.Character
import MoresmauJP.Rpg.CharacterTests
import MoresmauJP.Rpg.Inventory
import MoresmauJP.Rpg.MazeObjects
import MoresmauJP.Rpg.NPC
import MoresmauJP.Rpg.NPCTests

import MoresmauJP.Util.Random

import System.Random

import Test.HUnit

mazeObjectsTests=TestList [testScrollFill,testKillNPC,testKillNPC2HandBag,testKillNPC2HandHand]

testScrollFill= TestLabel "Test filling scroll" (TestCase (do
        let sc=Scroll "" "" 5
        sc2<-evalRandT (generateScroll sc) (mkTestWrapper [2])
        assertEqual "not proper scroll" (Scroll "Scroll of Feel Better" "Feel Better" 5) sc2
        ))
        
testKillNPC=TestLabel "Test kill NPC" (TestCase (do
        std<-getStdGen
        gw0<-(evalRandT (generateGameWorld (2,2)) (ProductionRandom std)) 
        
        let 
                gw=gw0{position=(0,0)}
                jp=createTestChar "JP"
                item=Weapon "Sword" 2 6 1 10
                v1=(createTestNPC "Victim")
                vc1=(npcCharacter v1){inventory=makeFullInventory [(Bag 1,item)] 10 100}
                victim=v1{npcCharacter=vc1}
                mz=MazeObjects M.empty (M.fromList [((0,0),victim)])
                (mz2,jp2,g)=killNPC gw mz jp
                dropped=M.lookup (0,0) (items mz2)
        assertEqual "Gold in JP's pocket is not 100" 100 (getGold $ inventory jp2)
        assertEqual "Gold message is not 100" 100 g
        assertEqual "item not dropped" (Just [item]) dropped
        ))
        
testKillNPC2HandBag=TestLabel "Test kill NPC 2 Handed weapon in Bag" (TestCase (do
        std<-getStdGen
        gw0<-(evalRandT (generateGameWorld (2,2)) (ProductionRandom std)) 
        
        let 
                gw=gw0{position=(0,0)}
                jp=createTestChar "JP"
                item=Weapon "2 Handed Sword" 4 12 2 20
                v1=(createTestNPC "Victim")
                vc1=(npcCharacter v1){inventory=makeFullInventory [(Bag 1,item)] 10 100}
                victim=v1{npcCharacter=vc1}
                mz=MazeObjects M.empty (M.fromList [((0,0),victim)])
                (mz2,jp2,g)=killNPC gw mz jp
                dropped=M.lookup (0,0) (items mz2)
        assertEqual "Gold in JP's pocket is not 100" 100 (getGold $ inventory jp2)
        assertEqual "Gold message is not 100" 100 g
        assertEqual "item not dropped" (Just [item]) dropped
        ))        
        
testKillNPC2HandHand=TestLabel "Test kill NPC 2 Handed weapon in Hand" (TestCase (do
        std<-getStdGen
        gw0<-(evalRandT (generateGameWorld (2,2)) (ProductionRandom std)) 
        
        let 
                gw=gw0{position=(0,0)}
                jp=createTestChar "JP"
                item=Weapon "2 Handed Sword" 4 12 2 20
                v1=(createTestNPC "Victim")
                inv1=makeFullInventory [] 10 100
                Right (inv2,_)=MoresmauJP.Rpg.Inventory.takeItem inv1 item RightHand
                vc1=(npcCharacter v1){inventory=inv2}
                victim=v1{npcCharacter=vc1}
                mz=MazeObjects M.empty (M.fromList [((0,0),victim)])
                (mz2,jp2,g)=killNPC gw mz jp
                dropped=M.lookup (0,0) (items mz2)
        assertEqual "Gold in JP's pocket is not 100" 100 (getGold $ inventory jp2)
        assertEqual "Gold message is not 100" 100 g
        assertEqual "item not dropped" (Just [item]) dropped
        ))