packages feed

pipes-key-value-csv-0.2.0.0: test/Test/Types.hs

module Test.Types where

import Pipes.KeyValueCsv.Cell

import Data.Char
import Test.QuickCheck

newtype Alphabetic = Alphabetic { getAlphabetic :: String }
  deriving (Eq)

instance Show Alphabetic where
  show (Alphabetic a) = show a

alphabetLower :: String
alphabetLower = "abcdefghijklmnopqrstuvwxyz"

alphabet :: String
alphabet = alphabetLower ++ map toUpper alphabetLower

instance FromCell Alphabetic where
  fromCell = fmap Alphabetic <$> fromCell

instance Arbitrary Alphabetic where
  arbitrary = Alphabetic <$> listOf1 (elements alphabet)
  shrink (Alphabetic a) = Alphabetic <$> shrink a

newtype Quoted = Quoted { quoted :: String }
  deriving (Eq)

instance Show Quoted where
  show (Quoted q) = q

quote :: String -> String 
quote s = "\"" ++ s ++ "\"" 

instance Arbitrary Quoted where
  arbitrary = Quoted . quote <$> listOf1 (elements $ alphabet ++ " ")
  shrink (Quoted q) = Quoted . quote <$> shrink contents
    where contents = init $ tail q

instance FromCell Quoted where
  fromCell = fmap (Quoted . quote) <$> fromCell