aboutsummaryrefslogtreecommitdiff
path: root/specs/Specs/ArgsSpec.hs
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2024-12-28 13:09:21 +0530
committerAkshay Nair <phenax5@gmail.com>2024-12-28 13:53:44 +0530
commitd6dbe32df6f1a01c95f9293023e2d73872fa39fe (patch)
treed9a9e667eef416c03745a054118f21ed84ad49e9 /specs/Specs/ArgsSpec.hs
parent98af698a806e41904368c0114f9d8d9f377d9c09 (diff)
downloadchelleport-d6dbe32df6f1a01c95f9293023e2d73872fa39fe.tar.gz
chelleport-d6dbe32df6f1a01c95f9293023e2d73872fa39fe.zip
Add cli arg parsing for starting in given mode
Diffstat (limited to '')
-rw-r--r--specs/Specs/ArgsSpec.hs39
1 files changed, 39 insertions, 0 deletions
diff --git a/specs/Specs/ArgsSpec.hs b/specs/Specs/ArgsSpec.hs
new file mode 100644
index 0000000..caaab75
--- /dev/null
+++ b/specs/Specs/ArgsSpec.hs
@@ -0,0 +1,39 @@
+module Specs.ArgsSpec where
+
+import Chelleport.Args (parseArgs)
+import Chelleport.Types
+import Data.Default (Default (def))
+import Test.Hspec
+
+test :: SpecWith ()
+test = do
+ describe "#parseArgs" $ do
+ context "when there are no args" $ do
+ it "parses default configuration" $ do
+ let config = parseArgs []
+ config `shouldBe` Right def
+
+ context "when args contains --help" $ do
+ it "enables show help without parsing the rest of the args" $ do
+ parseArgs ["--help"] `shouldBe` Right (def {configShowHelp = True})
+ parseArgs ["--help", "-m", "mode"] `shouldBe` Right (def {configShowHelp = True})
+
+ context "when args contains -m or --mode with a valid mode" $ do
+ it "parses configuration with mode" $ do
+ parseArgs ["-m", "search"] `shouldBe` Right (def {configMode = defaultSearchMode})
+ parseArgs ["--mode", "search"] `shouldBe` Right (def {configMode = defaultSearchMode})
+ parseArgs ["-m", "hints"] `shouldBe` Right (def {configMode = defaultHintsMode})
+ parseArgs ["--mode", "hints"] `shouldBe` Right (def {configMode = defaultHintsMode})
+
+ context "when args contains -m or --mode with an invalid mode" $ do
+ it "returns with error message" $ do
+ parseArgs ["--mode", "invalidmode"] `shouldBe` Left "Invalid mode: invalidmode"
+ parseArgs ["-m", "invalidmode"] `shouldBe` Left "Invalid mode: invalidmode"
+
+ context "when args contains -m or --mode without any mode" $ do
+ it "returns with error message" $ do
+ parseArgs ["--mode"] `shouldBe` Left "Missing value for mode"
+
+ context "when args contains an invalid flag" $ do
+ it "enables show help without parsing the rest of the args" $ do
+ parseArgs ["--foobar"] `shouldBe` Left "Unrecognized argument: --foobar"