packages feed

path-0.5.12: test/Path/Gen.hs

{-# LANGUAGE FlexibleInstances #-}
module Path.Gen where

import           Path
import           Path.Internal

import qualified System.FilePath as FilePath

import           Data.List (isInfixOf)
import           Data.Validity
import           Data.GenValidity

import           Test.QuickCheck


instance Validity (Path Abs File) where
  isValid p@(Path fp)
    =  FilePath.isAbsolute fp
    && not (FilePath.hasTrailingPathSeparator fp)
    && FilePath.isValid fp
    && not (".." `isInfixOf` fp)
    && not (containsLineBreaks fp)
    && (parseAbsFile fp == Just p)

instance Validity (Path Rel File) where
  isValid p@(Path fp)
    =  FilePath.isRelative fp
    && not (FilePath.hasTrailingPathSeparator fp)
    && FilePath.isValid fp
    && fp /= "."
    && fp /= ".."
    && not (".." `isInfixOf` fp)
    && not (containsLineBreaks fp)
    && (parseRelFile fp == Just p)

instance Validity (Path Abs Dir) where
  isValid p@(Path fp)
    =  FilePath.isAbsolute fp
    && FilePath.hasTrailingPathSeparator fp
    && FilePath.isValid fp
    && not (".." `isInfixOf` fp)
    && not (containsLineBreaks fp)
    && (parseAbsDir fp == Just p)

instance Validity (Path Rel Dir) where
  isValid p@(Path fp)
    =  FilePath.isRelative fp
    && FilePath.hasTrailingPathSeparator fp
    && FilePath.isValid fp
    && not (null fp)
    && fp /= "."
    && fp /= ".."
    && not (".." `isInfixOf` fp)
    && not (containsLineBreaks fp)
    && (parseRelDir fp == Just p)


containsLineBreaks :: String -> Bool
containsLineBreaks s = any (`elem` s) "\n\r"

instance GenUnchecked (Path Abs File) where
  genUnchecked = Path <$> arbitrary

instance GenValid (Path Abs File)

instance GenUnchecked (Path Rel File) where
  genUnchecked = Path <$> arbitrary

instance GenValid (Path Rel File)

instance GenUnchecked (Path Abs Dir) where
  genUnchecked = Path <$> arbitrary

instance GenValid (Path Abs Dir)

instance GenUnchecked (Path Rel Dir) where
  genUnchecked = Path <$> arbitrary

instance GenValid (Path Rel Dir)