module Data.GenValidity.Text where
import Data.GenValidity
import Test.QuickCheck
import Data.Text (Text)
import qualified Data.Text as T
genUncheckedText :: Gen Text
genUncheckedText = sized $ \n -> do
size <- upTo n
chars <- resize size $ genListOf arbitrary
return $ T.pack chars
textStartingWith :: Char -> Gen Text
textStartingWith c = sized $ \n ->
case n of
0 -> pure $ T.singleton c
1 -> pure $ T.singleton c
_ -> do
rest <- resize (n 1) genUncheckedText
return $ T.cons c rest
textWith :: Gen Text -> Gen Text
textWith gen = sized $ \n -> do
(b, m, a) <- genSplit3 n
before <- resize b genUncheckedText
middle <- resize m gen
after <- resize a genUncheckedText
return $ T.concat [before, middle, after]
textWithA :: Char -> Gen Text
textWithA c = textWith $ T.singleton <$> pure c
textWithoutAny :: Char -> Gen Text
textWithoutAny c = textWithoutAnyOf [c]
textWithoutAnyOf :: [Char] -> Gen Text
textWithoutAnyOf cs = T.pack <$> genListOf (arbitrary `suchThat` (`notElem` cs))
textAllCaps :: Gen Text
textAllCaps = T.toUpper <$> genUncheckedText