packages feed

dbus-core-0.2: Tests/Signature.hs

{-
  Copyright (C) 2009 John Millikin <jmillikin@gmail.com>
  
  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  any later version.
  
  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.
  
  You should have received a copy of the GNU General Public License
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
-}

module Tests.Signature (signatureProperties) where

import Data.Maybe (isJust, isNothing)
import Test.QuickCheck
import Tests.Instances ()
import DBus.Types

signatureProperties =
	[ property (prop_Equality :: Signature -> Bool)
	, property (prop_Equality :: Type -> Bool)
	, property prop_TypeToSig
	, property prop_Ident
	, property prop_Length0
	, property prop_Length254
	, property prop_Length255
	, property prop_Length256
	, property prop_Invalid0
	, property prop_Invalid1
	, property prop_Invalid2
	, property prop_show0
	, property prop_show1
	]

-- Signatures and type equality
prop_Equality x = x == x

-- Types can be converted to signatures via mkSignature
prop_TypeToSig x = typeString x == strSignature sig where
	Just sig = mkSignature (typeString x)

-- Signatures can be safely converted to strings and back
prop_Ident x = mkSignature (strSignature x) == Just x

-- Signatures may be no more than 255 characters long
prop_Length0   = isJust    . mkSignature $ ""
prop_Length254 = isJust    . mkSignature . replicate 254 $ 'y'
prop_Length255 = isJust    . mkSignature . replicate 255 $ 'y'
prop_Length256 = isNothing . mkSignature . replicate 256 $ 'y'

-- Invalid signatures are not parsed
prop_Invalid0 = isNothing . mkSignature $ "a"
prop_Invalid1 = isNothing . mkSignature $ "0"
prop_Invalid2 = isNothing . mkSignature $ "a{vy}"

-- Show is useful
prop_show0 x = showsPrec 10 x "" == "Signature \"" ++ strSignature x ++ "\""
prop_show1 x = showsPrec 11 x "" == "(Signature \"" ++ strSignature x ++ "\")"