|
|
|
@ -1,4 +1,5 @@ |
|
|
|
{-# LANGUAGE TemplateHaskell #-} |
|
|
|
{-# LANGUAGE TemplateHaskell #-} |
|
|
|
|
|
|
|
{-# LANGUAGE OverloadedStrings #-} |
|
|
|
module Tests.Arbitrary.Xmpp where |
|
|
|
module Tests.Arbitrary.Xmpp where |
|
|
|
|
|
|
|
|
|
|
|
import Control.Applicative ((<$>), (<*>)) |
|
|
|
import Control.Applicative ((<$>), (<*>)) |
|
|
|
@ -30,29 +31,31 @@ instance Arbitrary Jid where |
|
|
|
Just jid <- tryJid `suchThat` isJust |
|
|
|
Just jid <- tryJid `suchThat` isJust |
|
|
|
return jid |
|
|
|
return jid |
|
|
|
where |
|
|
|
where |
|
|
|
tryJid = jidFromTexts <$> maybeGen (genString nodeprepProfile) |
|
|
|
tryJid = jidFromTexts <$> maybeGen (genString nodeprepProfile False) |
|
|
|
<*> genString (SP.namePrepProfile False) |
|
|
|
<*> genString (SP.namePrepProfile False) False |
|
|
|
<*> maybeGen (genString resourceprepProfile) |
|
|
|
<*> maybeGen (genString resourceprepProfile True) |
|
|
|
|
|
|
|
|
|
|
|
genString profile = Text.pack . take 1024 <$> listOf1 genChar |
|
|
|
genString profile node = Text.pack . take 1024 <$> listOf1 genChar |
|
|
|
where |
|
|
|
where |
|
|
|
genChar = arbitrary `suchThat` (not . isProhibited) |
|
|
|
genChar = arbitrary `suchThat` (not . isProhibited) |
|
|
|
prohibited = Ranges.toSet $ concat (SP.prohibited profile) |
|
|
|
prohibited = Ranges.toSet $ concat (SP.prohibited profile) |
|
|
|
isProhibited x = Ranges.member x prohibited |
|
|
|
isProhibited x = Ranges.member x prohibited |
|
|
|
|| x `elem` "@/" |
|
|
|
|| if node |
|
|
|
|
|
|
|
then False |
|
|
|
|
|
|
|
else x `elem` ['@','/'] |
|
|
|
|
|
|
|
|
|
|
|
shrink (Jid lp dp rp) = [ Jid lp' dp rp | lp' <- shrinkMaybe shrink lp] |
|
|
|
shrink (Jid lp dp rp) = [ Jid lp' dp rp | lp' <- shrinkMaybe shrink lp] |
|
|
|
++ [ Jid lp dp' rp | dp' <- shrink dp] |
|
|
|
++ [ Jid lp dp' rp | dp' <- shrink dp] |
|
|
|
++ [ Jid lp dp rp' | rp' <- shrinkMaybe shrink rp] |
|
|
|
++ [ Jid lp dp rp' | rp' <- shrinkMaybe shrink rp] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
string :: SP.StringPrepProfile -> Gen [Char] |
|
|
|
-- string :: SP.StringPrepProfile -> Gen [Char] |
|
|
|
string profile = take 1024 <$> listOf1 genChar |
|
|
|
-- string profile = take 1024 <$> listOf1 genChar |
|
|
|
where |
|
|
|
-- where |
|
|
|
genChar = arbitrary `suchThat` (not . isProhibited) |
|
|
|
-- genChar = arbitrary `suchThat` (not . isProhibited) |
|
|
|
prohibited = Ranges.toSet $ concat (SP.prohibited profile) |
|
|
|
-- prohibited = Ranges.toSet $ concat (SP.prohibited profile) |
|
|
|
isProhibited x = Ranges.member x prohibited |
|
|
|
-- isProhibited x = Ranges.member x prohibited |
|
|
|
|| x `elem` "@/" |
|
|
|
-- || x `elem` "@/" |
|
|
|
|
|
|
|
|
|
|
|
instance Arbitrary LangTag where |
|
|
|
instance Arbitrary LangTag where |
|
|
|
arbitrary = LangTag <$> genTag <*> listOf genTag |
|
|
|
arbitrary = LangTag <$> genTag <*> listOf genTag |
|
|
|
|