interpolate-0.1.1: test/Data/String/Interpolate/Internal/UtilSpec.hs
{-# LANGUAGE CPP #-}
module Data.String.Interpolate.Internal.UtilSpec where
import Test.Hspec
import Test.QuickCheck
import Test.QuickCheck.Instances ()
import qualified Data.Text as T
import qualified Data.Text.Lazy as LT
import qualified Data.ByteString.Char8 as B
import qualified Data.ByteString.Lazy.Char8 as LB
import Data.String.Interpolate.Internal.Util
main :: IO ()
main = hspec spec
spec :: Spec
spec = do
describe "toString" $ do
it "behaves like `show`" $ do
property $ \n -> toString (n :: Int) `shouldBe` show n
context "when used with String" $ do
it "behaves like `id`" $ do
property $ \s -> toString s `shouldBe` s
context "when used with Text" $ do
it "behaves like `unpack`" $ do
property $ \s -> toString s `shouldBe` T.unpack s
context "when used with lazy Text" $ do
it "behaves like `unpack`" $ do
property $ \s -> toString s `shouldBe` LT.unpack s
context "when used with ByteString" $ do
it "behaves like `unpack`" $ do
property $ \s -> toString s `shouldBe` B.unpack s
context "when used with lazy ByteString" $ do
it "behaves like `unpack`" $ do
property $ \s -> do
#if __GLASGOW_HASKELL__ < 706
pendingWith "Does not work with GHC < 7.6"
#endif
toString s `shouldBe` LB.unpack s
describe "unescape" $ do
it "unescapes single-character escape codes" $ do
unescape "\\n" `shouldBe` "\n"
it "unescapes ASCII control code abbreviations" $ do
unescape "\\BEL" `shouldBe` "\BEL"
it "unescapes decimal character literals" $ do
unescape "\\955" `shouldBe` "\955"
it "unescapes hexadecimal character literals" $ do
unescape "\\xbeef" `shouldBe` "\xbeef"
it "unescapes octal character literals" $ do
unescape "\\o1234" `shouldBe` "\o1234"
context "with control escape sequences" $ do
it "unescapes null character" $ do
unescape "\\^@" `shouldBe` "\^@"
it "unescapes control codes" $ do
unescape "\\^A" `shouldBe` "\^A"
it "unescapes escape" $ do
unescape "\\^[" `shouldBe` "\^["
it "unescapes file separator" $ do
unescape "\\^\\ x" `shouldBe` "\^\ x"
it "unescapes group separator" $ do
unescape "\\^]" `shouldBe` "\^]"
it "unescapes record separator" $ do
unescape "\\^^" `shouldBe` "\^^"
it "unescapes unit separator" $ do
unescape "\\^_" `shouldBe` "\^_"