hup-0.2.0.0: test/Distribution/Hup/Parse/Test.hs
{- |
Support code for testing Distribution.Hup.Parse
-}
module Distribution.Hup.Parse.Test where
import Data.List (dropWhileEnd,isSuffixOf,stripPrefix
,intercalate)
import Data.ByteString.Lazy.Char8 (pack)
import Test.QuickCheck
import Distribution.Hup.Parse
arbWord = do
len <- choose (1, 10)
vectorOf len $
oneof [choose ('a', 'z')
,choose ('A', 'Z')]
arbName :: Gen String
arbName = do
len <- choose (1, 4)
intercalate "-" <$> vectorOf len arbWord
arbVersion = do
numComponents <- choose (1,10)
numbers <- vectorOf numComponents $ getNonNegative <$>
(arbitrary :: Gen (NonNegative Int))
return $ intercalate "." $ map show numbers
-- Generate an Upload, including an empty file contents.
arbUpload :: Gen Upload
arbUpload = do
name <- arbName
ver <- arbVersion
isPack <- elements [IsPackage, IsDocumentation]
isCand <- elements [NormalPkg, CandidatePkg]
let pk = Package name ver
file = name ++ "-" ++ ver ++
if isPack == IsPackage
then ".tar.gz"
else "-docs.tar.gz"
return $ Upload pk file (Just $ pack "") isPack isCand
prop_parseTgzFilename_roundtripsOK =
forAll arbUpload $ \upl ->
let
parsed :: Either String (IsDocumentation, Package)
parsed = (parseTgzFilename' $ fileToUpload upl )
in case parsed of
Right (isDoc, Package parsedName parsedVer) ->
isDoc == uploadType upl
&& parsedName == packageName ( package upl)
&& parsedVer == packageVersion ( package upl)
Left msg ->
False