module Main (main) where import Test.Hspec import Control.Applicative (liftA2) import Data.Attoparsec.Combinator (()) import Data.Attoparsec.Run (ParseError (ParseError)) import qualified Data.ByteString.Lazy as BS.Lazy import qualified Data.Text.Lazy as Text.Lazy import qualified Data.Attoparsec.ByteString as P.BS import qualified Data.Attoparsec.ByteString.Run as Run.BS import qualified Data.Attoparsec.Text as P.Text import qualified Data.Attoparsec.Text.Run as Run.Text main :: IO () main = hspec $ do describe "ByteString" $ do describe "parseOnlyStrict" $ do specify "success" $ Run.BS.parseOnlyStrict "abc" (P.BS.anyWord8 "1") `shouldBe` Right 97 specify "failure" $ Run.BS.parseOnlyStrict ("abc") (P.BS.satisfy (< 97) "1") `shouldBe` Left (ParseError ["1"] "Failed reading: satisfy") describe "parseOnlyLazy" $ do specify "two chunks" $ Run.BS.parseOnlyLazy (BS.Lazy.fromChunks ["a", "b"]) (liftA2 (,) P.BS.anyWord8 P.BS.anyWord8) `shouldBe` Right (97, 98) describe "Text" $ do describe "parseOnlyStrict" $ do specify "success" $ Run.Text.parseOnlyStrict "abc" P.Text.anyChar `shouldBe` Right 'a' specify "failure" $ Run.Text.parseOnlyStrict ("abc") (P.Text.satisfy (< 'a') "1") `shouldBe` Left (ParseError ["1"] "Failed reading: satisfy") describe "parseOnlyLazy" $ do specify "two chunks" $ Run.Text.parseOnlyLazy (Text.Lazy.fromChunks ["a", "b"]) (liftA2 (,) P.Text.anyChar P.Text.anyChar) `shouldBe` Right ('a', 'b')