packages feed

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"