packages feed

rainbox-0.10.0.0: test/Rainbow/QuickCheck.hs

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

-- | QuickCheck instances for all of Rainbow.  Currently Rainbow does
-- not use these instances itself; they are only here for
-- cut-and-paste for other libraries that may need them.  There is an
-- executable in Rainbow that is built solely to make sure this module
-- compiles without any errors.
--
-- To use these instances, just drop them into your own project
-- somewhere.  They are not packaged as a library because there are
-- orphan instances.

module Rainbow.QuickCheck where

import Test.QuickCheck
import Rainbow.Colors
import Rainbow.Types
import Data.Monoid
import Control.Monad
import qualified Data.Text as X

instance Arbitrary Enum8 where
  arbitrary = elements [E0, E1, E2, E3, E4, E5, E6, E7]

instance Arbitrary Color8 where
  arbitrary = fmap Color8 arbitrary

instance Arbitrary Color256 where
  arbitrary = fmap Color256 arbitrary

instance Arbitrary (Last Color8) where
  arbitrary = fmap Last arbitrary

instance Arbitrary (Last Color256) where
  arbitrary = fmap Last arbitrary

instance Arbitrary StyleCommon where
  arbitrary
    = liftM4 StyleCommon g g g g
    where
      g = fmap Last arbitrary

instance Arbitrary Style256 where
  arbitrary = liftM3 Style256 arbitrary arbitrary arbitrary

instance Arbitrary Style8 where
  arbitrary = liftM3 Style8 arbitrary arbitrary arbitrary

instance Arbitrary TextSpec where
  arbitrary = liftM2 TextSpec arbitrary arbitrary

instance Arbitrary Chunk where
  arbitrary = liftM2 Chunk arbitrary
    (listOf (fmap X.pack (listOf (elements ['a'..'z']))))

instance Arbitrary Radiant where
  arbitrary = liftM2 Radiant arbitrary arbitrary