content: module ItemKindUnitTests (itemKindUnitTests) where
  
  import Prelude ()
  
  import Game.LambdaHack.Core.Prelude
  
  import Test.Tasty
  import Test.Tasty.HUnit
  
  import qualified Content.RuleKind
  import           Game.LambdaHack.Common.Kind (emptyMultiGroupItem)
  import           Game.LambdaHack.Content.ItemKind
  import qualified Game.LambdaHack.Content.RuleKind as RK
  import qualified Game.LambdaHack.Definition.Ability as Ability
  
  itemKindUnitTests :: TestTree
  itemKindUnitTests = testGroup "itemKindUnitTests" $
    let standardSymbols = RK.ritemSymbols Content.RuleKind.standardRules
        customSymbols = emptyItemSymbolsUsedInEngine {rsymbolNecklace = '*'}
  
    in
    [ testCase "overlonginame_validateSingle_errs" $
        validateSingle standardSymbols
                       emptyMultiGroupItem { iname = "123456789012345678901234" }
        @?= ["iname longer than 23"]
    , testCase "shortEnoughiname_validateSingle_noErr" $
        validateSingle standardSymbols
                       emptyMultiGroupItem
        @?= []
    , testCase "equipableNoSlotxSymbol_validateSingle_errs" $
        validateSingle standardSymbols
                       emptyMultiGroupItem { iaspects = [ SetFlag Ability.Equipable ] }
        @?= ["EqpSlot not specified but Equipable or Meleeable and not a likely organ or necklace or template"]
    , testCase "equipableNoSlot,Symbol_validateSingle_noErr" $
        validateSingle standardSymbols
                       emptyMultiGroupItem { isymbol = ','
                                    , iaspects = [ SetFlag Ability.Equipable ] }
        @?= []
    , testCase "equipableNoSlot\"Symbol_validateSingle_noErr" $
        validateSingle standardSymbols
                       emptyMultiGroupItem { isymbol = '"'
                                    , iaspects = [ SetFlag Ability.Equipable ] }
        @?= []
    , testCase "equipableNoSlot/Symbol_validateSingle_noErr" $
        validateSingle standardSymbols
                       emptyMultiGroupItem { isymbol = '/'
                                    , iaspects = [ SetFlag Ability.Equipable ] }
        @?= []
    , testCase "equipableNoSlot*CustomRules_validateSingle_noErr" $
        validateSingle customSymbols
                       emptyMultiGroupItem { isymbol = '*'
                                    , iaspects = [ SetFlag Ability.Equipable ] }
        @?= []
    , testCase "equipableNoSlot\"CustomRules_validateSingle_errs" $
        validateSingle customSymbols
                       emptyMultiGroupItem { isymbol = '"'
                                    , iaspects = [ SetFlag Ability.Equipable ] }
        @?= ["EqpSlot not specified but Equipable or Meleeable and not a likely organ or necklace or template"]
    ]
  