Shell-like syntax for interactive mode
This commit is contained in:
58
test/ShellEscapeSpec.hs
Normal file
58
test/ShellEscapeSpec.hs
Normal file
@@ -0,0 +1,58 @@
|
||||
module ShellEscapeSpec where
|
||||
|
||||
|
||||
import GHCMod.Options.ShellEscape
|
||||
|
||||
import Test.Hspec
|
||||
|
||||
spec :: Spec
|
||||
spec =
|
||||
describe "parseCmdLine" $ do
|
||||
it "splits arguments" $
|
||||
parseCmdLine "test command line" `shouldBe` ["test", "command", "line"]
|
||||
it "honors double quotes" $
|
||||
parseCmdLine "test command line \"with double quotes\""
|
||||
`shouldBe` ["test", "command", "line", "with double quotes"]
|
||||
it "honors single quotes" $
|
||||
parseCmdLine "test command line 'with single quotes'"
|
||||
`shouldBe` ["test", "command", "line", "with single quotes"]
|
||||
it "understands single quote in double quotes" $
|
||||
parseCmdLine "test for \"quoted argument with ' single quote\" here"
|
||||
`shouldBe` ["test", "for", "quoted argument with ' single quote", "here"]
|
||||
it "understands double quote in single quotes" $
|
||||
parseCmdLine "test for \'quoted argument with \" double quote\' here"
|
||||
`shouldBe` ["test", "for", "quoted argument with \" double quote", "here"]
|
||||
it "escapes spaces" $ do
|
||||
parseCmdLine "with\\ spaces"
|
||||
`shouldBe` ["with spaces"]
|
||||
parseCmdLine "'with\\ spaces'"
|
||||
`shouldBe` ["with spaces"]
|
||||
parseCmdLine "\"with\\ spaces\""
|
||||
`shouldBe` ["with spaces"]
|
||||
it "escapes '\\'" $ do
|
||||
parseCmdLine "\\\\"
|
||||
`shouldBe` ["\\"]
|
||||
parseCmdLine "\"\\\\\""
|
||||
`shouldBe` ["\\"]
|
||||
parseCmdLine "'\\\\'"
|
||||
`shouldBe` ["\\"]
|
||||
it "escapes single quotes" $ do
|
||||
parseCmdLine "\\'"
|
||||
`shouldBe` ["'"]
|
||||
parseCmdLine "'\\''"
|
||||
`shouldBe` ["'"]
|
||||
parseCmdLine "\"\\'\""
|
||||
`shouldBe` ["'"]
|
||||
it "escapes double quotes" $ do
|
||||
parseCmdLine "\\\""
|
||||
`shouldBe` ["\""]
|
||||
parseCmdLine "'\\\"'"
|
||||
`shouldBe` ["\""]
|
||||
parseCmdLine "\"\\\"\""
|
||||
`shouldBe` ["\""]
|
||||
it "doesn't escape random characters" $
|
||||
parseCmdLine "\\a\\b\\c"
|
||||
`shouldBe` ["\\a\\b\\c"]
|
||||
it "squashes multiple spaces" $
|
||||
parseCmdLine "test command"
|
||||
`shouldBe` ["test", "command"]
|
||||
Reference in New Issue
Block a user