waargonaut-0.6.0.0: test/Types/JChar.hs
module Types.JChar
( genJChar
, genHex4
, genJCharEscaped
, genJCharUnescaped
) where
import Hedgehog
import qualified Hedgehog.Gen as Gen
import Control.Lens (preview)
import Types.Common (genHeXaDeCiMaLDigit,
genWhitespace)
import Data.Digit (HeXDigit)
import Waargonaut.Types.JChar (JChar (..))
import Waargonaut.Types.JChar.Escaped (Escaped (..))
import Waargonaut.Types.JChar.HexDigit4 (HexDigit4 (..))
import Waargonaut.Types.JChar.Unescaped (AsUnescaped (..), Unescaped)
genJChar :: Gen (JChar HeXDigit)
genJChar = Gen.choice
[ EscapedJChar <$> genJCharEscaped
, UnescapedJChar <$> genJCharUnescaped
]
genJCharUnescaped :: Gen Unescaped
genJCharUnescaped = Gen.just $ preview _Unescaped <$> Gen.unicode
genJCharEscaped :: Gen (Escaped HeXDigit)
genJCharEscaped = do
h4 <- genHex4
ws <- genWhitespace
Gen.element
[ QuotationMark
, ReverseSolidus
, Solidus
, Backspace
, WhiteSpace ws
, Hex h4
]
genHex4 :: Gen (HexDigit4 HeXDigit)
genHex4 = HexDigit4
<$> genHeXaDeCiMaLDigit
<*> genHeXaDeCiMaLDigit
<*> genHeXaDeCiMaLDigit
<*> genHeXaDeCiMaLDigit