{-# LANGUAGE OverloadedStrings #-} module Potato.Data.Text.UnicodeSpec ( spec ) where import Prelude import Test.Hspec import Control.Monad import Potato.Data.Text.Unicode spec :: Spec spec = describe "Unicode" $ do it "isSingleGraphemeCluster" $ do isSingleGraphemeCluster "πŸ‘ŽπŸΌ" `shouldBe` True isSingleGraphemeCluster "πŸ‘Ž" `shouldBe` False isSingleGraphemeCluster "" `shouldBe` False isSingleGraphemeCluster "a" `shouldBe` False isSingleGraphemeCluster "πŸ‘ŽπŸ»πŸ‘ŽπŸΌπŸ‘ŽπŸ½πŸ‘ŽπŸΎπŸ‘ŽπŸΏ" `shouldBe` False isSingleGraphemeCluster "πŸ§‘\8205🍳" `shouldBe` True -- zwidges can't be used directly https://gitlab.haskell.org/ghc/ghc/-/issues/21228 it "endsInGraphemeCluster" $ do endsInGraphemeCluster "πŸ‘ŽπŸΌ" `shouldBe` True endsInGraphemeCluster "πŸ‘ŽπŸΏ" `shouldBe` True endsInGraphemeCluster "" `shouldBe` False endsInGraphemeCluster "a" `shouldBe` False endsInGraphemeCluster "πŸ‘ŽπŸ»πŸ‘ŽπŸΌπŸ‘ŽπŸ½πŸ‘ŽπŸΎπŸ‘ŽπŸΏ" `shouldBe` True endsInGraphemeCluster "πŸ‘ŽπŸ»πŸ‘ŽπŸΌπŸ‘ŽπŸ½πŸ‘ŽπŸΎπŸ‘ŽπŸΏπŸ˜±" `shouldBe` False endsInGraphemeCluster "goop😱dedoopπŸ‘ŽπŸΏ" `shouldBe` True it "removeGraphemeCluster" $ do removeGraphemeCluster "πŸ‘ŽπŸ»πŸ‘ŽπŸΌπŸ‘ŽπŸ½πŸ‘ŽπŸΎπŸ‘ŽπŸΏ" `shouldBe` "πŸ‘ŽπŸ‘ŽπŸ‘ŽπŸ‘ŽπŸ‘Ž" it "containsGraphemeCluster" $ do containsGraphemeCluster "πŸ‘ŽπŸ‘ŽπŸ‘ŽπŸ‘ŽπŸ‘Ž" `shouldBe` False containsGraphemeCluster "πŸ‘ŽπŸ‘ŽπŸ‘ŽπŸΏπŸ‘ŽπŸ‘ŽπŸ‘Ž" `shouldBe` True