appc-0.0.2: test/Test.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Main where
import Control.Applicative
import Test.Hspec
import Test.SmallCheck
import Test.SmallCheck.Series
import Test.Hspec.SmallCheck
import Data.Monoid ((<>))
import Data.Function
import Data.List
import Data.Aeson
import Data.Text (Text)
import Data.Text as T
import Data.SemVer
import Data.UUID
import GHC.Word
import Data.AppContainer.Types
instance Monad m => Serial m Word32 where
series = decDepth $ fromIntegral <$> (series :: Series m Int)
instance Monad m => Serial m UUID where
series = decDepth $ fromWords
<$> series
<*> series
<*> series
<*> series
instance Monad m => Serial m Text where
series = decDepth $ T.pack
<$> series
instance Monad m => Serial m Version where
series = decDepth $ version
<$> fmap getPositive series
<*> fmap getPositive series
<*> fmap getPositive series
<*> pure []
<*> pure []
instance Monad m => Serial m Label where
series = decDepth $ Label
<$> series <*> series
instance Monad m => Serial m ImageManifest where
series = decDepth $ ImageManifest
<$> series <*> series <*> series <*> pure Nothing <*> pure []
instance Monad m => Serial m ContainerRuntimeManifest where
series = decDepth $ ContainerRuntimeManifest
<$> series
<*> series
<*> pure []
<*> pure []
main :: IO ()
main = do
hspec spec
spec :: Spec
spec = do
describe "ImageManifest" $ do
it "x ≡ fromJSON (toJSON x)" $ property $ \(im :: ImageManifest) ->
Success im == fromJSON (toJSON im)
describe "ContainerRuntimeManifest" $ do
it "x ≡ fromJSON (toJSON x)" $ property $ \(im :: ContainerRuntimeManifest) ->
Success im == fromJSON (toJSON im)