hackport-0.6.6: tests/Portage/PackageIdSpec.hs
module Portage.PackageIdSpec (spec) where
import Test.Hspec
import Test.Hspec.QuickCheck
import Test.QuickCheck
import QuickCheck.Instances
import qualified Data.Char as Char
import qualified Distribution.Package as Cabal
import Distribution.Pretty (prettyShow)
import Portage.PackageId
spec :: Spec
spec = do
describe "packageIdToFilePath" $ do
prop "transforms a PackageId into a FilePath" $ do
let cat = Category "dev-haskell"
name = Cabal.mkPackageName "foo-bar2+"
in \(ComplexVersion version) ->
packageIdToFilePath (PackageId (PackageName cat name) version)
`shouldBe`
"dev-haskell/" ++ prettyShow name ++ "/" ++ prettyShow name ++ "-" ++
prettyShow version ++ ".ebuild"
describe "filePathToPackageId" $ do
prop "returns a Just PackageId from a valid FilePath" $ do
let cat = Category "dev-haskell"
name = Cabal.mkPackageName "foo-bar2+"
in \(ComplexVersion version) ->
filePathToPackageId cat
(prettyShow name ++ "-" ++ prettyShow version)
`shouldBe`
Just (PackageId (PackageName cat name) version)
prop "returns Nothing on a malformed FilePath" $ do
let cat = Category "dev-haskell"
name = Cabal.mkPackageName "foo-bar-2+"
in \(ComplexVersion version) ->
filePathToPackageId cat (prettyShow name ++ "-" ++ prettyShow version)
`shouldBe`
Nothing
describe "normalizeCabalPackageName" $ do
prop "converts a Cabal.PackageName into lowercase" $ do
\(PrintableString s) -> normalizeCabalPackageName (Cabal.mkPackageName s)
`shouldBe` Cabal.mkPackageName (Char.toLower <$> s)
describe "parseFriendlyPackage" $ do
prop "parses a package string as [category/]name[-version]" $ do
let cat = Category "dev-haskell"
name = Cabal.mkPackageName "package-name1+"
in \(ComplexVersion version) ->
parseFriendlyPackage (prettyShow cat ++ "/" ++ prettyShow name
++ "-" ++ prettyShow version)
`shouldBe`
Right (Just cat, name, Just version)
prop "returns an error string if parsing a malformed package string" $ do
let cat = Category "dev-haskell"
name = Cabal.mkPackageName "package-name-1+"
in \(ComplexVersion version) ->
parseFriendlyPackage (prettyShow cat ++ "/" ++ prettyShow name
++ "-" ++ prettyShow version)
`shouldNotBe`
Right (Just cat, name, Just version)
describe "cabal_pn_to_PN" $ do
prop "pretty-prints a Cabal PackageName as a lowercase String" $ do
\(PrintableString s) -> cabal_pn_to_PN (Cabal.mkPackageName s)
`shouldBe` Char.toLower <$> s