hpack-0.22.0: test/Hpack/Syntax/GitSpec.hs
{-# LANGUAGE QuasiQuotes #-}
module Hpack.Syntax.GitSpec (spec) where
import Helper
import Data.String.Interpolate
import Control.Monad
import Hpack.Syntax.Git
spec :: Spec
spec = do
describe "isValidRef" $ do
it "accepts slashes" $ do
isValidRef "foo/bar" `shouldBe` True
it "rejects the empty string" $ do
isValidRef "" `shouldBe` False
it "accepts .lock as a substring" $ do
isValidRef "foo.locking" `shouldBe` True
it "rejects .lock at the end of a component" $ do
isValidRef "foo/bar.lock/baz" `shouldBe` False
it "rejects . at the biginning of a component" $ do
isValidRef "foo/.bar/baz" `shouldBe` False
it "rejects two consecutive dots .." $ do
isValidRef "foo..bar" `shouldBe` False
it "rejects ASCII control characters" $ do
isValidRef "foo\10bar" `shouldBe` False
it "rejects space" $ do
isValidRef "foo bar" `shouldBe` False
forM_ ["~", "^", ":", "?", "*", "[", "\\"] $ \ xs -> do
it [i|rejects #{xs}|] $ do
isValidRef [i|foo#{xs}bar|] `shouldBe` False
it "rejects multiple consecutive slashes" $ do
isValidRef "foo//bar" `shouldBe` False
it "rejects slash at beginning" $ do
isValidRef "/foo" `shouldBe` False
it "rejects slash at end" $ do
isValidRef "foo/" `shouldBe` False
it "rejects . at end" $ do
isValidRef "foo." `shouldBe` False
it "rejects @{" $ do
isValidRef "foo@{bar" `shouldBe` False
it "rejects the single character @" $ do
isValidRef "@" `shouldBe` False