packages feed

headroom-0.4.3.0: test/Headroom/Meta/VersionSpec.hs

{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes       #-}

module Headroom.Meta.VersionSpec
  ( spec
  )
where

import           Headroom.Meta.Version
import           RIO
import           Test.Hspec

spec :: Spec
spec = do
  describe "Ord instance" $ do
    it "correctly compare two values" $ do
      compare [pvp|1.2.3.4|] [pvp|1.2.3.4|] `shouldBe` EQ
      compare [pvp|0.1.0.0|] [pvp|0.1.0.1|] `shouldBe` LT
      compare [pvp|1.1.0.0|] [pvp|0.1.0.1|] `shouldBe` GT


  describe "parseVersion" $ do
    it "parses valid Version from Text" $ do
      parseVersion "0.1.2.3" `shouldBe` Just [pvp|0.1.2.3|]
      parseVersion "v0.1.2.3" `shouldBe` Just [pvp|0.1.2.3|]

    it "parses Nothing for invalid input" $ do
      parseVersion "0.4" `shouldBe` Nothing


  describe "printVersion" $ do
    it "pretty prints given version" $ do
      printVersion [pvp|1.2.3.4|] `shouldBe` "1.2.3.4"


  describe "printVersionP" $ do
    it "pretty prints given version (with 'v' prefix)" $ do
      printVersionP [pvp|1.2.3.4|] `shouldBe` "v1.2.3.4"


  describe "pvp" $ do
    it "produces correct Version using QuasiQuotes" $ do
      [pvp|0.1.2.3|] `shouldBe` Version 0 1 2 3