MazesOfMonad-1.0.2: 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
))