cardano-addresses-4.0.0: test/Options/Applicative/DerivationSpec.hs
module Options.Applicative.DerivationSpec
( spec
) where
import Prelude
import Control.Arrow
( left )
import Data.List
( isInfixOf )
import Options.Applicative.Derivation
( DerivationIndex
, DerivationPath
, derivationIndexFromString
, derivationIndexToString
, derivationPathFromString
, derivationPathToString
)
import Test.Hspec
( Spec, SpecWith, describe, it, shouldBe )
import Test.Hspec.QuickCheck
( prop )
import Test.QuickCheck
( Property, (===) )
import Test.Arbitrary
()
spec :: Spec
spec = do
describe "DerivationIndex" $ do
specInvalidSoftIndex
specInvalidHardIndex
prop "toString . fromString @ DerivationIndex"
prop_roundtripStringDerivationIndex
describe "DerivationPath" $ do
specEmptyPath
prop "toString . fromString @ DerivationPath"
prop_roundtripStringDerivationPath
specInvalidSoftIndex
:: SpecWith ()
specInvalidSoftIndex = it "invalid soft derivation index" $ do
left (isInfixOf "Unable to parse soft index") (derivationIndexFromString "💩")
`shouldBe` (Left True)
specInvalidHardIndex
:: SpecWith ()
specInvalidHardIndex = it "invalid hard derivation index" $ do
left (isInfixOf "Unable to parse hardened index") (derivationIndexFromString "💩H")
`shouldBe` (Left True)
prop_roundtripStringDerivationIndex
:: DerivationIndex
-> Property
prop_roundtripStringDerivationIndex ix =
derivationIndexFromString (derivationIndexToString ix) === pure ix
specEmptyPath
:: SpecWith ()
specEmptyPath = it "empty derivation path" $ do
derivationPathFromString "" `shouldBe`
(Left "An empty string is not a derivation index!")
prop_roundtripStringDerivationPath
:: DerivationPath
-> Property
prop_roundtripStringDerivationPath path =
derivationPathFromString (derivationPathToString path) === pure path