packages feed

zxcvbn-hs-0.2.0.0: test/Zxcvbn/Repeat.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TupleSections     #-}

{-|

Copyright:
  This file is part of the package zxcvbn-hs. It is subject to the
  license terms in the LICENSE file found in the top-level directory
  of this distribution and at:

    https://code.devalot.com/sthenauth/zxcvbn-hs

  No part of this package, including this file, may be copied,
  modified, propagated, or distributed except according to the terms
  contained in the LICENSE file.

License: MIT

-}
module Zxcvbn.Repeat
  ( test
  ) where

--------------------------------------------------------------------------------
import Data.Map (Map)
import qualified Data.Map as Map
import Data.Text (Text)
import qualified Data.Text as Text
import Test.Tasty
import Test.Tasty.HUnit

--------------------------------------------------------------------------------
import Text.Password.Strength.Internal

--------------------------------------------------------------------------------
test :: TestTree
test = testGroup "Repeat"
  [ tc "wordword"      "word" $ Just (2, Token "wordword" "wordword" 0 7)
  , tc "wordword@word" "word" $ Just (2, Token "wordword" "wordword" 0 7)
  , tc "word@wordword" "word" $ Just (2, Token "wordword" "wordword" 5 12)
  , tc "word2word"     "word" Nothing
  , tc "word"          "word" Nothing
  , tc "abcdefg"       "abc"  Nothing
  ]

  where
    tc :: Text -> Text -> Maybe (Int, Token) -> TestTree
    tc p t r = testCase (Text.unpack p) $
      repeatMatch (rmap p) (Token t (Text.toLower t) 0 0) @?= r

    tmap :: Text -> Map Token ()
    tmap = Map.fromList . map (,()) . allTokens

    rmap :: Text -> RepeatMap
    rmap = mkRepeatMap . tmap