module HpackSpec (spec) where import Prelude () import Prelude.Compat import Control.Monad.Compat import Control.DeepSeq import Data.Version (Version (..), showVersion) import Test.Hspec import Test.Mockery.Directory import Test.QuickCheck import Hpack import Hpack.Config () import Hpack.Convert () makeVersion :: [Int] -> Version makeVersion v = Version v [] spec :: Spec spec = do describe "extractVersion" $ do it "extracts Hpack version from a cabal file" $ do let cabalFile = ["-- This file has been generated from package.yaml by hpack version 0.10.0."] extractVersion cabalFile `shouldBe` Just (Version [0, 10, 0] []) it "is total" $ do let cabalFile = ["-- This file has been generated from package.yaml by hpack version "] extractVersion cabalFile `shouldBe` Nothing describe "parseVersion" $ do it "is inverse to showVersion" $ do let positive = getPositive <$> arbitrary forAll (replicateM 3 positive) $ \xs -> do let v = Version xs [] parseVersion (showVersion v) `shouldBe` Just v describe "hpackWithVersion" $ do context "when only the hpack version in the cabal file header changed" $ do it "does not write a new cabal file" $ do inTempDirectory $ do writeFile "package.yaml" "name: foo" hpackWithVersion (makeVersion [0,8,0]) "." False old <- readFile "foo.cabal" >>= (return $!!) hpackWithVersion (makeVersion [0,10,0]) "." False readFile "foo.cabal" `shouldReturn` old context "when exsting cabal file was generated with a newer version of hpack" $ do it "does not re-generate" $ do inTempDirectory $ do writeFile "package.yaml" $ unlines [ "name: foo" , "version: 0.1.0" ] hpackWithVersion (makeVersion [0,10,0]) "." False old <- readFile "foo.cabal" >>= (return $!!) writeFile "package.yaml" $ unlines [ "name: foo" , "version: 0.2.0" ] hpackWithVersion (makeVersion [0,8,0]) "." False readFile "foo.cabal" `shouldReturn` old