hpack-0.35.4: test/Hpack/OptionsSpec.hs
module Hpack.OptionsSpec (spec) where
import Helper
import Hpack.Options
spec :: Spec
spec = do
describe "parseOptions" $ do
let defaultTarget = "package.yaml"
context "with --help" $ do
it "returns Help" $ do
parseOptions defaultTarget ["--help"] `shouldReturn` Help
context "with --version" $ do
it "returns PrintVersion" $ do
parseOptions defaultTarget ["--version"] `shouldReturn` PrintVersion
context "by default" $ do
it "returns Run" $ do
parseOptions defaultTarget [] `shouldReturn` Run (ParseOptions Verbose NoForce Nothing False defaultTarget MinimizeDiffs)
it "includes target" $ do
parseOptions defaultTarget ["foo.yaml"] `shouldReturn` Run (ParseOptions Verbose NoForce Nothing False "foo.yaml" MinimizeDiffs)
context "with superfluous arguments" $ do
it "returns ParseError" $ do
parseOptions defaultTarget ["foo", "bar"] `shouldReturn` ParseError
context "with --silent" $ do
it "sets optionsVerbose to NoVerbose" $ do
parseOptions defaultTarget ["--silent"] `shouldReturn` Run (ParseOptions NoVerbose NoForce Nothing False defaultTarget MinimizeDiffs)
context "with --force" $ do
it "sets optionsForce to Force" $ do
parseOptions defaultTarget ["--force"] `shouldReturn` Run (ParseOptions Verbose Force Nothing False defaultTarget MinimizeDiffs)
context "with -f" $ do
it "sets optionsForce to Force" $ do
parseOptions defaultTarget ["-f"] `shouldReturn` Run (ParseOptions Verbose Force Nothing False defaultTarget MinimizeDiffs)
context "when determining parseOptionsHash" $ do
it "assumes True on --hash" $ do
parseOptions defaultTarget ["--hash"] `shouldReturn` Run (ParseOptions Verbose NoForce (Just True) False defaultTarget MinimizeDiffs)
it "assumes False on --no-hash" $ do
parseOptions defaultTarget ["--no-hash"] `shouldReturn` Run (ParseOptions Verbose NoForce (Just False) False defaultTarget MinimizeDiffs)
it "gives last occurrence precedence" $ do
parseOptions defaultTarget ["--no-hash", "--hash"] `shouldReturn` Run (ParseOptions Verbose NoForce (Just True) False defaultTarget MinimizeDiffs)
parseOptions defaultTarget ["--hash", "--no-hash"] `shouldReturn` Run (ParseOptions Verbose NoForce (Just False) False defaultTarget MinimizeDiffs)
context "with -" $ do
it "sets optionsToStdout to True, implies Force and NoVerbose" $ do
parseOptions defaultTarget ["-"] `shouldReturn` Run (ParseOptions NoVerbose Force Nothing True defaultTarget MinimizeDiffs)
it "rejects - for target" $ do
parseOptions defaultTarget ["-", "-"] `shouldReturn` ParseError
describe "expandTarget" $ around_ inTempDirectory $ do
let defaultTarget = "foo.yaml"
context "when target is Nothing" $ do
it "return default file" $ do
expandTarget defaultTarget Nothing `shouldReturn` defaultTarget
context "when target is a file" $ do
it "return file" $ do
let file = "foo/bar.yaml"
touch file
expandTarget defaultTarget (Just file) `shouldReturn` file
context "when target is a directory" $ do
it "appends default file" $ do
touch "foo/.placeholder"
expandTarget defaultTarget (Just "foo") `shouldReturn` "foo" </> defaultTarget
context "when target file does not exist" $ do
it "return target file" $ do
expandTarget defaultTarget (Just "foo/bar") `shouldReturn` "foo/bar"
context "when target directory does not exist" $ do
it "appends default file" $ do
expandTarget defaultTarget (Just "foo/") `shouldReturn` ("foo/" ++ defaultTarget)
context "when target is the empty string" $ do
it "return default file" $ do
expandTarget defaultTarget (Just "") `shouldReturn` defaultTarget