{-# LANGUAGE FlexibleInstances #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}

module Data.GenValidity.Path where

import Data.GenValidity
import Data.Validity.Path ()
import Path
import Path.Internal
import Test.QuickCheck.Gen

instance GenValid (Path Abs File) where
  genValid :: Gen (Path Abs File)
genValid = (FilePath -> Path Abs File
forall b t. FilePath -> Path b t
Path (FilePath -> Path Abs File)
-> (FilePath -> FilePath) -> FilePath -> Path Abs File
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char
'/' Char -> FilePath -> FilePath
forall a. a -> [a] -> [a]
:) (FilePath -> Path Abs File) -> Gen FilePath -> Gen (Path Abs File)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen FilePath
forall a. GenValid a => Gen a
genValid) Gen (Path Abs File)
-> (Path Abs File -> Bool) -> Gen (Path Abs File)
forall a. Gen a -> (a -> Bool) -> Gen a
`suchThat` Path Abs File -> Bool
forall a. Validity a => a -> Bool
isValid
  shrinkValid :: Path Abs File -> [Path Abs File]
shrinkValid (Path FilePath
s) = (Path Abs File -> Bool) -> [Path Abs File] -> [Path Abs File]
forall a. (a -> Bool) -> [a] -> [a]
filter Path Abs File -> Bool
forall a. Validity a => a -> Bool
isValid ([Path Abs File] -> [Path Abs File])
-> [Path Abs File] -> [Path Abs File]
forall a b. (a -> b) -> a -> b
$ FilePath -> Path Abs File
forall b t. FilePath -> Path b t
Path (FilePath -> Path Abs File) -> [FilePath] -> [Path Abs File]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> FilePath -> [FilePath]
forall a. GenValid a => a -> [a]
shrinkValid FilePath
s

instance GenValid (Path Abs Dir) where
  genValid :: Gen (Path Abs Dir)
genValid = (FilePath -> Path Abs Dir
forall b t. FilePath -> Path b t
Path (FilePath -> Path Abs Dir)
-> (FilePath -> FilePath) -> FilePath -> Path Abs Dir
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char
'/' Char -> FilePath -> FilePath
forall a. a -> [a] -> [a]
:) (FilePath -> FilePath)
-> (FilePath -> FilePath) -> FilePath -> FilePath
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (FilePath -> FilePath -> FilePath
forall a. [a] -> [a] -> [a]
++ FilePath
"/") (FilePath -> Path Abs Dir) -> Gen FilePath -> Gen (Path Abs Dir)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen FilePath
forall a. GenValid a => Gen a
genValid) Gen (Path Abs Dir) -> (Path Abs Dir -> Bool) -> Gen (Path Abs Dir)
forall a. Gen a -> (a -> Bool) -> Gen a
`suchThat` Path Abs Dir -> Bool
forall a. Validity a => a -> Bool
isValid
  shrinkValid :: Path Abs Dir -> [Path Abs Dir]
shrinkValid (Path FilePath
s) = (Path Abs Dir -> Bool) -> [Path Abs Dir] -> [Path Abs Dir]
forall a. (a -> Bool) -> [a] -> [a]
filter Path Abs Dir -> Bool
forall a. Validity a => a -> Bool
isValid ([Path Abs Dir] -> [Path Abs Dir])
-> [Path Abs Dir] -> [Path Abs Dir]
forall a b. (a -> b) -> a -> b
$ FilePath -> Path Abs Dir
forall b t. FilePath -> Path b t
Path (FilePath -> Path Abs Dir) -> [FilePath] -> [Path Abs Dir]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> FilePath -> [FilePath]
forall a. GenValid a => a -> [a]
shrinkValid FilePath
s

instance GenValid (Path Rel File) where
  genValid :: Gen (Path Rel File)
genValid = (FilePath -> Path Rel File
forall b t. FilePath -> Path b t
Path (FilePath -> Path Rel File) -> Gen FilePath -> Gen (Path Rel File)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen FilePath
forall a. GenValid a => Gen a
genValid) Gen (Path Rel File)
-> (Path Rel File -> Bool) -> Gen (Path Rel File)
forall a. Gen a -> (a -> Bool) -> Gen a
`suchThat` Path Rel File -> Bool
forall a. Validity a => a -> Bool
isValid
  shrinkValid :: Path Rel File -> [Path Rel File]
shrinkValid (Path FilePath
s) = (Path Rel File -> Bool) -> [Path Rel File] -> [Path Rel File]
forall a. (a -> Bool) -> [a] -> [a]
filter Path Rel File -> Bool
forall a. Validity a => a -> Bool
isValid ([Path Rel File] -> [Path Rel File])
-> [Path Rel File] -> [Path Rel File]
forall a b. (a -> b) -> a -> b
$ FilePath -> Path Rel File
forall b t. FilePath -> Path b t
Path (FilePath -> Path Rel File) -> [FilePath] -> [Path Rel File]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> FilePath -> [FilePath]
forall a. GenValid a => a -> [a]
shrinkValid FilePath
s

instance GenValid (Path Rel Dir) where
  genValid :: Gen (Path Rel Dir)
genValid = (FilePath -> Path Rel Dir
forall b t. FilePath -> Path b t
Path (FilePath -> Path Rel Dir)
-> (FilePath -> FilePath) -> FilePath -> Path Rel Dir
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (FilePath -> FilePath -> FilePath
forall a. [a] -> [a] -> [a]
++ FilePath
"/") (FilePath -> Path Rel Dir) -> Gen FilePath -> Gen (Path Rel Dir)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen FilePath
forall a. GenValid a => Gen a
genValid) Gen (Path Rel Dir) -> (Path Rel Dir -> Bool) -> Gen (Path Rel Dir)
forall a. Gen a -> (a -> Bool) -> Gen a
`suchThat` Path Rel Dir -> Bool
forall a. Validity a => a -> Bool
isValid
  shrinkValid :: Path Rel Dir -> [Path Rel Dir]
shrinkValid (Path FilePath
s) = (Path Rel Dir -> Bool) -> [Path Rel Dir] -> [Path Rel Dir]
forall a. (a -> Bool) -> [a] -> [a]
filter Path Rel Dir -> Bool
forall a. Validity a => a -> Bool
isValid ([Path Rel Dir] -> [Path Rel Dir])
-> [Path Rel Dir] -> [Path Rel Dir]
forall a b. (a -> b) -> a -> b
$ FilePath -> Path Rel Dir
forall b t. FilePath -> Path b t
Path (FilePath -> Path Rel Dir) -> [FilePath] -> [Path Rel Dir]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> FilePath -> [FilePath]
forall a. GenValid a => a -> [a]
shrinkValid FilePath
s