packages feed

tasty-autocollect-0.4.2: test/TestUtils/QuickCheck.hs

{-# LANGUAGE GeneralizedNewtypeDeriving #-}

module TestUtils.QuickCheck (
  PrintableText (..),
  genMixedCase,
) where

import Data.Char (toLower, toUpper)
import Data.String (IsString)
import Data.Text (Text)
import Data.Text qualified as Text
import Test.Tasty.QuickCheck

newtype PrintableText = PrintableText {getPrintableText :: Text}
  deriving (Show, IsString)

instance Arbitrary PrintableText where
  arbitrary = PrintableText . Text.pack . getPrintableString <$> arbitrary

genMixedCase :: Text -> Gen Text
genMixedCase s = withCases <$> infiniteList
  where
    withCases cases = Text.pack . zipWith setCase cases . Text.unpack $ s

    setCase False = toLower
    setCase True = toUpper