tomland-1.3.3.3: test/Test/Toml/Type/Key.hs
module Test.Toml.Type.Key
( keySpec
) where
import Hedgehog (forAll, tripping)
import Test.Hspec (Arg, Expectation, Spec, SpecWith, describe, it, shouldBe)
import Test.Hspec.Hedgehog (hedgehog)
import Test.Toml.Gen (genKey)
import Toml.Type.Key (KeysDiff (..), keysDiff)
import qualified Toml.Parser as Parser
import qualified Toml.Type.Printer as Printer
keySpec :: Spec
keySpec = describe "TOML Key" $ do
keyRoundtripSpec
keysDiffSpec
keyRoundtripSpec :: SpecWith (Arg Expectation)
keyRoundtripSpec = it "Key printing: fromString . prettyKey ≡ id" $ hedgehog $ do
key <- forAll genKey
tripping key Printer.prettyKey Parser.parseKey
keysDiffSpec :: Spec
keysDiffSpec = describe "Key difference" $ do
it "Equal: Simple" $
keysDiff "key" "key" `shouldBe` Equal
it "Equal: Complex" $
keysDiff "foo.bar.baz" "foo.bar.baz" `shouldBe` Equal
it "NoPrefix: Simple" $
keysDiff "foo" "bar" `shouldBe` NoPrefix
it "NoPrefix: Only common suffix" $
keysDiff "foo.key" "bar.key" `shouldBe` NoPrefix
it "FstIsPref" $
keysDiff "key" "key.nest" `shouldBe` FstIsPref "nest"
it "SndIsPref" $
keysDiff "key.nest" "key" `shouldBe` SndIsPref "nest"
it "Diff: Simple" $
keysDiff "key.foo" "key.bar" `shouldBe` Diff "key" "foo" "bar"
it "Diff: Two components" $
keysDiff "key.nest.foo" "key.nest.bar" `shouldBe` Diff "key.nest" "foo" "bar"
it "Diff: Two diff components" $
keysDiff "key.foo.nest" "key.bar.nest" `shouldBe` Diff "key" "foo.nest" "bar.nest"
it "Diff: Different diff length" $
keysDiff "key.foo" "key.bar.nest" `shouldBe` Diff "key" "foo" "bar.nest"