language-docker-10.4.2: test/Language/Docker/ParseCmdSpec.hs
module Language.Docker.ParseCmdSpec where
import Data.Default.Class (def)
import Language.Docker.Parser
import Language.Docker.Syntax
import Test.HUnit hiding (Label)
import Test.Hspec
import TestHelper
import qualified Data.List.NonEmpty as NonEmpty
import qualified Data.Set as Set
import qualified Data.Text as Text
spec :: Spec
spec = do
describe "parse CMD instructions" $ do
it "one line cmd" $ assertAst "CMD true" [Cmd "true"]
it "cmd over several lines" $
assertAst "CMD true \\\n && true" [Cmd "true && true"]
it "quoted command params" $ assertAst "CMD [\"echo\", \"1\"]" [Cmd ["echo", "1"]]
it "Parses commas correctly" $ assertAst "CMD [ \"echo\" ,\"-e\" , \"1\"]" [Cmd ["echo", "-e", "1"]]
-- This is the Dockefile statement under test (cleaned of Haskell escapes):
--
-- CMD [ "/bin/sh", "-c", \
-- "echo foo && \
-- echo bar" \
-- ]
it "parse exec style CMD with long broken lines" $ do
let cmd =
Text.unlines
[ "CMD [ \"/bin/sh\", \"-c\", \\",
" \"echo foo && \\",
" echo bar\" \\",
" ]"
]
in assertAst cmd [ Cmd [ "/bin/sh", "-c", "echo foo && echo bar" ] ]