zenacy-unicode-1.0.0: test/Zenacy/Unicode/Tests.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE LambdaCase #-}
module Zenacy.Unicode.Tests
( testUnicode
) where
import Zenacy.Unicode
import Data.Monoid
( (<>)
)
import Test.Framework
( Test
, testGroup
)
import Test.Framework.Providers.HUnit
( testCase
)
import Test.HUnit
( assertBool
, assertEqual
, assertFailure
)
testUnicode :: Test
testUnicode = testGroup "Zenacy.Unicode"
[ testBom
, testClean
]
testBom :: Test
testBom = testCase "unicode bom" $ do
assertEqual "TEST 1" (Nothing, "a") $ bomStrip "a"
assertEqual "TEST 2" (Just BOM_UTF8, "abc") $ bomStrip (utf8 <> "abc")
assertEqual "TEST 3" (Just BOM_UTF16_BE, "abc") $ bomStrip (utf16be <> "abc")
assertEqual "TEST 4" (Just BOM_UTF16_LE, "abc") $ bomStrip (utf16le <> "abc")
assertEqual "TEST 5" (Just BOM_UTF32_BE, "abc") $ bomStrip (utf32be <> "abc")
assertEqual "TEST 6" (Just BOM_UTF32_LE, "abc") $ bomStrip (utf32le <> "abc")
where
utf8 = "\xEF\xBB\xBF"
utf16be = "\xFE\xFF"
utf16le = "\xFF\xFE"
utf32be = "\x00\x00\xFE\xFF"
utf32le = "\xFF\xFE\x00\x00"
testClean :: Test
testClean = testCase "unicode clean" $ do
assertEqual "TEST 1" "a" $ unicodeCleanUTF8 "a"
assertEqual "TEST 2" "abc" $ unicodeCleanUTF8 "abc"
assertEqual "TEST 3" "\xEF\xBF\xBD" $ unicodeCleanUTF8 "\x00"
assertEqual "TEST 4" "\xEF\xBF\xBD" $ unicodeCleanUTF8 "\x92"
assertEqual "TEST 5"
"government\xEF\xBF\xBDs arguments" $
unicodeCleanUTF8 "government\x92s arguments"