packages feed

unicode-data-names-0.3.0: test/Unicode/Char/General/Names/ByteStringSpec.hs

{-# LANGUAGE CPP, BlockArguments #-}

module Unicode.Char.General.Names.ByteStringSpec
  ( spec
  ) where

import Data.Foldable (traverse_)
import qualified Data.ByteString.Char8 as BS8
import qualified Unicode.Char.General.Names as String
import qualified Unicode.Char.General.Names.ByteString as BS
import Test.Hspec ( Spec, it, shouldBe, Expectation )

spec :: Spec
spec = do
    it "name" do
        traverse_ ((fmap BS8.unpack . BS.name) `shouldBeEqualTo` String.name)
            [minBound..maxBound]
    it "nameOrAlias" do
        traverse_
            ((fmap BS8.unpack . BS.nameOrAlias)
                `shouldBeEqualTo` String.nameOrAlias)
            [minBound..maxBound]
    it "correctedName" do
        traverse_
            ((fmap BS8.unpack . BS.correctedName)
                `shouldBeEqualTo` String.correctedName)
            [minBound..maxBound]
    it "nameAliases" do
        traverse_
            ((fmap BS8.unpack . BS.nameAliases)
                `shouldBeEqualTo` String.nameAliases)
            [minBound..maxBound]
    it "nameAliasesByType" do
        let check ty = traverse_
                        ((fmap BS8.unpack . BS.nameAliasesByType ty)
                            `shouldBeEqualTo` String.nameAliasesByType ty)
                        [minBound..maxBound]
        traverse_ check [minBound..maxBound]
    it "nameAliasesWithTypes" do
        traverse_
            ((fmap (fmap (fmap BS8.unpack)) . BS.nameAliasesWithTypes)
                `shouldBeEqualTo` String.nameAliasesWithTypes)
            [minBound..maxBound]
    where
    shouldBeEqualTo
        :: forall a. (Eq a, Show a)
        => (Char -> a)
        -> (Char -> a)
        -> Char
        -> Expectation
    shouldBeEqualTo f fRef c = f c `shouldBe` fRef c