module Parser.DT (spec) where
import GHC.Base (error)
import Helpers
import Puppet.Parser.Internal
import Test.Hspec.Megaparsec
import Text.Megaparsec (parse)
import qualified Text.Regex.PCRE.ByteString.Utils as Regex
spec :: Spec
spec = do
let parsed s r = it ("accepts " <> toS s) $ parse datatype "?" s `shouldParse` r
failed s = it ("rejects " <> toS s) $ shouldFailOn (parse datatype "?") s
describe "String" $ do
"String" `parsed` UDTString Nothing Nothing
failed "String[]"
failed "String[4,5,6]"
"String[5]" `parsed` UDTString (Just 5) Nothing
"String[5,8]" `parsed` UDTString (Just 5) (Just 8)
"Regexp" `parsed` UDTRegexp Nothing
let foore = case Regex.compile' Regex.compBlank Regex.execBlank "foo" of
Right ok -> ok
Left rr -> error (show rr)
"Regexp[/foo/]" `parsed` UDTRegexp (Just (CompRegex "foo" foore))
it "accepts variables" $ pendingWith "to be fixed" *> parse datatype "?" "String[$var]" `shouldParse` UDTString (Just 5) Nothing
describe "Stdlib::" $ do
"Stdlib::HTTPUrl" `parsed` UDTData