packages feed

esqueleto-postgis-2.0.0: test/Wkb/EndianSpec.hs

{-# LANGUAGE OverloadedStrings #-}

module Wkb.EndianSpec where

import qualified Data.Binary.Get          as BinaryGet
import qualified Data.ByteString.Builder  as ByteStringBuilder
import           Test.Hspec               (Spec, describe, it, shouldBe)

import qualified Database.Esqueleto.Postgis.Wkb as Endian

spec :: Spec
spec =
  testGetEndian

testGetEndian :: Spec
testGetEndian =
  describe "get endian" $ do
    it "Returns BigEndian for 0" $
      roundTrip Endian.BigEndian `shouldBe` Endian.BigEndian
    it "Returns LittleEndian for 1" $
      roundTrip Endian.LittleEndian `shouldBe` Endian.LittleEndian
    it "Returns fail for other" $
      BinaryGet.runGetOrFail Endian.getEndianType (ByteStringBuilder.toLazyByteString $ ByteStringBuilder.word8 5) `shouldBe` Left ("", 1, "Invalid EndianType")

roundTrip :: Endian.EndianType -> Endian.EndianType
roundTrip endianType =
  BinaryGet.runGet Endian.getEndianType encodedEndianType
  where encodedEndianType = ByteStringBuilder.toLazyByteString $ Endian.builderEndianType endianType