{-# Language ScopedTypeVariables #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Main where
import Test.Hspec.Monadic (Specs, describe, hspecX)
import Test.Hspec.HUnit()
import Test.Hspec.QuickCheck(prop)
import Test.QuickCheck
import Web.PathPieces
import qualified Data.Text as T
import Data.Maybe (fromJust)
-- import FileLocation (debug)
instance Arbitrary T.Text where
arbitrary = fmap T.pack arbitrary
main :: IO ()
main = hspecX specs
specs :: Specs
specs = do
describe "RoutePiece" $ do
prop "toRoutePiece <=> fromSinglePiece String" $ \(p::String) ->
case (fromRoutePiece . toSinglePiece) p of
Nothing -> null p
Just pConverted -> p == pConverted
prop "toRoutePiece <=> fromSinglePiece String" $ \(p::T.Text) ->
case (fromRoutePiece . toSinglePiece) p of
Nothing -> T.null p
Just pConverted -> p == pConverted
prop "toRoutePiece <=> fromSinglePiece String" $ \(p::Int) ->
case (fromRoutePiece . toSinglePiece) p of
Nothing -> p < 0
Just pConverted -> p == pConverted
describe "RouteMultiPiece" $ do
prop "toRouteMultiPiece <=> fromMultiPiece String" $ \(p::[String]) ->
p == (fromJust . fromRouteMultiPiece . toMultiPiece) p
prop "toRouteMultiPiece <=> fromMultiPiece String" $ \(p::[T.Text]) ->
p == (fromJust . fromRouteMultiPiece . toMultiPiece) p
describe "SinglePiece" $ do
prop "toSinglePiece <=> fromSinglePiece String" $ \(p::String) ->
case (fromSinglePiece . toSinglePiece) p of
Nothing -> null p
Just pConverted -> p == pConverted
prop "toSinglePiece <=> fromSinglePiece String" $ \(p::T.Text) ->
case (fromSinglePiece . toSinglePiece) p of
Nothing -> T.null p
Just pConverted -> p == pConverted
prop "toSinglePiece <=> fromSinglePiece String" $ \(p::Int) ->
case (fromSinglePiece . toSinglePiece) p of
Nothing -> p < 0
Just pConverted -> p == pConverted
describe "MultiPiece" $ do
prop "toMultiPiece <=> fromMultiPiece String" $ \(p::[String]) ->
p == (fromJust . fromMultiPiece . toMultiPiece) p
prop "toMultiPiece <=> fromMultiPiece String" $ \(p::[T.Text]) ->
p == (fromJust . fromMultiPiece . toMultiPiece) p