packages feed

ribosome-0.2.0.0: test/u/MsgpackSpec.hs

{-# OPTIONS_GHC -F -pgmF htfpp #-}
{-# LANGUAGE DeriveAnyClass #-}

module MsgpackSpec(
  htf_thisModulesTests
) where

import GHC.Generics (Generic)
import Data.Either.Combinators (mapLeft)
import Data.Int (Int64)
import Data.Map.Strict (Map)
import qualified Data.Map.Strict as Map (fromList)
import Data.MessagePack (Object(..))
import Test.Framework
import Ribosome.Msgpack.Encode (MsgpackEncode(..))
import Ribosome.Msgpack.Decode (MsgpackDecode(..))
import qualified Ribosome.Msgpack.Util as Util (string)

data Blob =
  Blob {
    key4 :: [[Int]],
    key5 :: Map Int String
  }
  deriving (Eq, Show, Generic, MsgpackEncode, MsgpackDecode)

data Prod =
  Prod String Int
  deriving (Eq, Show, Generic, MsgpackEncode, MsgpackDecode)

data Dat =
  Dat {
    key1 :: Blob,
    key2 :: Int,
    key3 :: Prod
  }
  deriving (Eq, Show, Generic, MsgpackEncode, MsgpackDecode)

dat :: Dat
dat = Dat (Blob [[1, 2], [3]] (Map.fromList [(1, "1"), (2, "2")])) 13 (Prod "dat" 27)

os :: String -> Object
os = Util.string

i :: Int64 -> Object
i = ObjectInt

encodedBlob :: Object
encodedBlob =
  ObjectMap $ Map.fromList [
    (os "key4", ObjectArray [ObjectArray [i 1, i 2], ObjectArray [i 3]]),
    (os "key5", ObjectMap $ Map.fromList [(i 1, os "1"), (i 2, os "2")])
    ]

encoded :: Object
encoded =
  ObjectMap $ Map.fromList [(os "key1", encodedBlob), (os "key2", i 13), (os "key3", ObjectArray [os "dat", i 27])]

test_encode :: IO ()
test_encode =
  assertEqual encoded (toMsgpack dat)

test_decode :: IO ()
test_decode =
  assertEqual (Right dat) (mapLeft (const ()) $ fromMsgpack encoded)