packages feed

mercury-api-0.1.0.0: tests/unit.hs

{-# LANGUAGE OverloadedStrings #-}

import qualified Data.ByteString as B ( ByteString )
import Data.Monoid ((<>))
import qualified Data.Text as T ( Text )
import Test.HUnit ( Assertion, Test(..), runTestTT, assertEqual )

import qualified System.Hardware.MercuryApi as TMR

helloWorld :: B.ByteString
helloWorld = "Hello, World!"

defacedBadFacade :: T.Text
defacedBadFacade = "DefacedBadFacade"

defacedBadFacadeBin :: B.ByteString
defacedBadFacadeBin = "\222\250\206\219\173\250\202\222"

-- http://www.adafruit.com/datasheets/CSN-A2%20User%20Manual.pdf
phrase :: B.ByteString
phrase = "thoroughly remove the uncommon words of anguish"

testDataHelpers :: Assertion
testDataHelpers = do
  assertEqual "TMR.packBytesIntoWords helloWorld"
    [18533,27756,28460,8279,28530,27748,8448]
    (TMR.packBytesIntoWords helloWorld)
  assertEqual "TMR.passwordToWords 0xbeadead1"
    [0xbead, 0xead1]
    (TMR.passwordToWords 0xbeadead1)

testHex :: Assertion
testHex = do
  assertEqual "TMR.bytesToHex defacedBadFacadeBin"
    "DEFACEDBADFACADE"
    (TMR.bytesToHex defacedBadFacadeBin)
  assertEqual "TMR.bytesToHexWithSpaces defacedBadFacadeBin"
    "de fa ce db ad fa ca de"
    (TMR.bytesToHexWithSpaces defacedBadFacadeBin)
  assertEqual "TMR.hexToBytes defacedBadFacade"
    (Just defacedBadFacadeBin)
    (TMR.hexToBytes defacedBadFacade)
  assertEqual "TMR.hexToBytes $ \"0x\" <> defacedBadFacade"
    (Just defacedBadFacadeBin)
    (TMR.hexToBytes $ "0x" <> defacedBadFacade)
  assertEqual "TMR.hexToBytes \"XXYYZZ\""
    Nothing
    (TMR.hexToBytes "XXYYZZ")
  assertEqual "TMR.hexToBytes \"0dd\""
    Nothing
    (TMR.hexToBytes "0dd")

testTimestamp :: Assertion
testTimestamp = do
  assertEqual "TMR.displayTimestamp 0"
    "1970-01-01T00:00:00.000Z"
    (TMR.displayTimestamp 0)
  assertEqual "TMR.displayTimestamp 123456789"
    "1970-01-02T10:17:36.789Z"
    (TMR.displayTimestamp 123456789)
  assertEqual "TMR.displayTimestamp 1513728000000"
    "2017-12-20T00:00:00.000Z"
    (TMR.displayTimestamp 1513728000000)

testData :: Assertion
testData = do
  assertEqual "TMR.displayData phrase"
    [ "74 68 6f 72 6f 75 67 68  6c 79 20 72 65 6d 6f 76  |thoroughly remov|"
    , "65 20 74 68 65 20 75 6e  63 6f 6d 6d 6f 6e 20 77  |e the uncommon w|"
    , "6f 72 64 73 20 6f 66 20  61 6e 67 75 69 73 68     |ords of anguish|"
    ]
    (TMR.displayData phrase)

tests :: Test
tests = TestList
  [ TestLabel "testDataHelpers" (TestCase testDataHelpers)
  , TestLabel "testHex" (TestCase testHex)
  , TestLabel "testTimestamp" (TestCase testTimestamp)
  , TestLabel "testData" (TestCase testData)
  ]

main = runTestTT tests