packages feed

wkt-geom-0.0.5: test/Data/Internal/Wkb/HexParsingSpec.hs

{-# LANGUAGE OverloadedStrings #-}

module Data.Internal.Wkb.HexParsingSpec where

import qualified Data.Geospatial as Geospatial
import           Test.Hspec      (Spec, describe, it, shouldBe)

import qualified Data.Hex        as Hex
import qualified Data.Wkb        as Wkb

spec :: Spec
spec =
  testWkbHexParsing

testWkbHexParsing :: Spec
testWkbHexParsing =
  describe "Test hex encoded wkb point" $ do
    it "Parse valid hex wkb" $
      Wkb.parseHexByteString exampleHexPoint `shouldBe` Right expectedPoint
    it "Not parse valid hex but invalid wkb" $
      Wkb.parseHexByteString (Hex.Hex "deadbeef") `shouldBe` Left "Could not parse wkb: Invalid EndianType"
    it "Some valid, some invalid hex" $
      Wkb.parseHexByteString (Hex.Hex "deadfish") `shouldBe` Left "Invalid hex representation: deadfish"
    it "All bad" $
      Wkb.parseHexByteString (Hex.Hex "cowboyx") `shouldBe` Left "Invalid hex representation: cowboyx"

exampleHexPoint :: Hex.Hex
exampleHexPoint = Hex.Hex "0101000000000000000000f03f0000000000000040"

expectedPoint :: Geospatial.GeospatialGeometry
expectedPoint = Geospatial.Point (Geospatial.GeoPoint (Geospatial.GeoPointXY (Geospatial.PointXY 1.0 2.0)))