packages feed

utf8-conversions-0.1.0.2: test/Data/Convertible/Utf8Spec.hs

module Data.Convertible.Utf8Spec where

import           Codec.Text.Detect     (detectEncodingName)
import           Data.Convertible.Utf8
import           Test.Hspec

spec :: Spec
spec =
  describe "convert to LBS" $
    context "from String" $ do
      let string = convert "これはマルチバイト文字列です" :: String
      let lbs = convert string
      it "is UTF-8" $
        detectEncodingName lbs `shouldBe` utf8
      it "is not truncated" $
        "これはマルチバイト文字列です" `shouldBe` convert string

      context "via Text" $ do
        let text = convert "これはマルチバイト文字列です" :: Text
        let lbs = convert text
        it "is UTF-8" $
          detectEncodingName lbs `shouldBe` utf8
        it "is not truncated" $
          "これはマルチバイト文字列です" `shouldBe` convert text

      context "via LazyText" $ do
        let lazyText = convert "これはマルチバイト文字列です" :: LazyText
        let lbs = convert lazyText
        it "is UTF-8" $
          detectEncodingName lbs `shouldBe` utf8
        it "is not truncated" $
          "これはマルチバイト文字列です" `shouldBe` convert lazyText

      context "via TextBuilder" $ do
        let textBuilder = convert "これはマルチバイト文字列です" :: TextBuilder
        let lbs = convert textBuilder
        it "is UTF-8" $
          detectEncodingName lbs `shouldBe` utf8
        it "is not truncated" $
          "これはマルチバイト文字列です" `shouldBe` convert textBuilder

      context "via ShortText" $ do
        let shortText = convert "これはマルチバイト文字列です" :: ShortText
        let lbs = convert shortText
        it "is UTF-8" $
          detectEncodingName lbs `shouldBe` utf8
        it "is not truncated" $
          "これはマルチバイト文字列です" `shouldBe` convert shortText

      context "via StrictByteString" $ do
        let strictByteString = convert "これはマルチバイト文字列です" :: ByteString
        let lbs = convert strictByteString
        it "is UTF-8" $
          detectEncodingName lbs `shouldBe` utf8
        it "is not truncated" $
          "これはマルチバイト文字列です" `shouldBe` convert strictByteString

      context "via ByteStringBuilder" $ do
        let byteStringBuilder = convert "これはマルチバイト文字列です" :: ByteStringBuilder
        let lbs = convert byteStringBuilder
        it "is UTF-8" $
          detectEncodingName lbs `shouldBe` utf8
        it "is not truncated" $
          "これはマルチバイト文字列です" `shouldBe` convert byteStringBuilder

      context "via ShortByteString" $ do
        let shortByteString = convert "これはマルチバイト文字列です" :: ShortByteString
        let lbs = convert shortByteString
        it "is UTF-8" $
          detectEncodingName lbs `shouldBe` utf8
        it "is not truncated" $
          "これはマルチバイト文字列です" `shouldBe` convert shortByteString

utf8 :: Maybe String
utf8 = Just "UTF-8"