{-# 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) && (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) && (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) && (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) && (parseRelDir fp == Just p) instance GenValidity (Path Abs File) where genUnchecked = Path <$> arbitrary instance GenValidity (Path Rel File) where genUnchecked = Path <$> arbitrary instance GenValidity (Path Abs Dir) where genUnchecked = Path <$> arbitrary instance GenValidity (Path Rel Dir) where genUnchecked = Path <$> arbitrary