packages feed

path-pieces-0.1.0: test/main.hs

{-# 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