Add testcases for completions

pull/5/head
Lennart Spitzner 2018-02-12 15:47:53 +01:00
parent 0313b0d68d
commit 10291d3808
1 changed files with 30 additions and 0 deletions

View File

@ -10,6 +10,7 @@ import Test.Hspec
import UI.Butcher.Monadic import UI.Butcher.Monadic
import UI.Butcher.Monadic.Types import UI.Butcher.Monadic.Types
import UI.Butcher.Monadic.Interactive
@ -117,6 +118,18 @@ simpleRunTest = do
it "case 4" $ testRun' testCmd7 "abc -f" `shouldBe` Right (Just (["abc"], 1)) it "case 4" $ testRun' testCmd7 "abc -f" `shouldBe` Right (Just (["abc"], 1))
it "case 5" $ testRun' testCmd7 "-g abc -f" `shouldBe` Right (Just (["abc"], 3)) it "case 5" $ testRun' testCmd7 "-g abc -f" `shouldBe` Right (Just (["abc"], 3))
it "case 6" $ testRun' testCmd7 "abc -g def" `shouldBe` Right (Just (["abc", "def"], 2)) it "case 6" $ testRun' testCmd7 "abc -g def" `shouldBe` Right (Just (["abc", "def"], 2))
describe "completions" $ do
it "case 1" $ testCompletion completionTestCmd "" `shouldBe` ""
it "case 2" $ testCompletion completionTestCmd "a" `shouldBe` "bc"
it "case 3" $ testCompletion completionTestCmd "abc" `shouldBe` "def"
it "case 4" $ testCompletion completionTestCmd "abc " `shouldBe` "-"
it "case 5" $ testCompletion completionTestCmd "abc -" `shouldBe` ""
it "case 6" $ testCompletion completionTestCmd "abc --" `shouldBe` "flag"
it "case 7" $ testCompletion completionTestCmd "abc -f" `shouldBe` ""
it "case 8" $ testCompletion completionTestCmd "abcd" `shouldBe` "ef"
it "case 9" $ testCompletion completionTestCmd "gh" `shouldBe` "i"
it "case 10" $ testCompletion completionTestCmd "ghi" `shouldBe` ""
it "case 11" $ testCompletion completionTestCmd "ghi " `shouldBe` "jkl"
@ -202,6 +215,23 @@ testCmd7 = do
when g $ WriterS.tell 2 when g $ WriterS.tell 2
pure args pure args
completionTestCmd :: CmdParser Identity () ()
completionTestCmd = do
addCmd "abc" $ do
_ <- addSimpleBoolFlag "f" ["flag"] mempty
addCmdImpl ()
addCmd "abcdef" $ do
_ <- addSimpleBoolFlag "f" ["flag"] mempty
addCmdImpl ()
addCmd "ghi" $ do
addCmd "jkl" $ do
addCmdImpl ()
testCompletion :: CmdParser Identity a () -> String -> String
testCompletion p inp = case runCmdParserExt Nothing (InputString inp) p of
(cDesc, InputString cRest, _) -> simpleCompletion inp cDesc cRest
_ -> error "wut"
testParse :: CmdParser Identity out () -> String -> Maybe (CommandDesc out) testParse :: CmdParser Identity out () -> String -> Maybe (CommandDesc out)
testParse cmd s = either (const Nothing) Just testParse cmd s = either (const Nothing) Just