dockercook-0.5.0.0: src/test/Tests/BuildFile.hs
{-# OPTIONS_GHC -F -pgmF htfpp #-}
{-# LANGUAGE OverloadedStrings #-}
module Tests.BuildFile (htf_thisModulesTests) where
import Cook.BuildFile
import Cook.Types
import Test.Framework
import qualified Data.Vector as V
import qualified Data.Text as T
test_matchFilePattern :: IO ()
test_matchFilePattern =
do assertBool (matchesFilePattern pattern1 "foo/bar.cabal")
assertBool (not $ matchesFilePattern pattern1 "foo/baz.cabal")
assertBool (matchesFilePattern pattern2 "foo/hellooooo.cabal")
assertBool (not $ matchesFilePattern pattern2 "foo/hellooooo.cabal.xzy")
assertBool (not $ matchesFilePattern pattern2 "foo/hellooooo.xzy")
assertBool (not $ matchesFilePattern pattern2 "test/foo/hellooooo.xzy")
assertBool (matchesFilePattern pattern3 "foo/asdasdas")
assertBool (matchesFilePattern pattern3 "foo/bar/asdasdas")
where
Right pattern1 = parseFilePattern "foo/bar.cabal"
Right pattern2 = parseFilePattern "foo/*.cabal"
Right pattern3 = parseFilePattern "foo/*"
test_parseBuildFile :: IO ()
test_parseBuildFile =
do parsed1 <- parseBuildFileText "sample1" sampleFile1 >>= assertRight
parsed2 <- parseBuildFileText "sample1" sampleFile2 >>= assertRight
parsed3 <- parseBuildFileText "sample3" sampleFile3 >>= assertRight
parsed4 <- parseBuildFileText "sample3" sampleFile4 >>= assertRight
parsed5 <- parseBuildFile "test/parsefail02.cook" >>= assertRight
assertEqual (BuildBaseDocker $ DockerImage "ubuntu:14.04") (bf_base parsed1)
assertEqual parsed1 parsed2
assertEqual (BuildBaseCook $ BuildFileId "foo.build") (bf_base parsed3)
assertEqual commands (bf_dockerCommands parsed3)
assertEqual parsed3 parsed4
assertEqual 10 (V.length (bf_include parsed5))
assertEqual (Just "/DociData") (bf_unpackTarget parsed5)
where
commands =
V.fromList [ Right $ DockerCommand "RUN" "apt-get -y install node"
, Right $ DockerCommand "ADD" ". /foo"
]
sampleFile1 =
"BASE DOCKER ubuntu:14.04"
sampleFile2 =
"BASE DOCKER ubuntu:14.04#asdf"
sampleFile3 =
T.concat
[ "BASE COOK foo.build\n"
, "INCLUDE server/foo.cabal\n"
, "INCLUDE server/*.js\n"
, "RUN apt-get -y install node\n"
, "ADD . /foo"
]
sampleFile4 =
T.concat
[ "# Comment!\n"
, "#Comment\n"
, " # Comment\n"
, "BASE COOK foo.build\n\n"
, "INCLUDE server/foo.cabal # comment\n"
, "INCLUDE server/*.js\n"
, "RUN apt-get -y install node # comment\n"
, "ADD . /foo\n"
, "# comment\n"
, "\n"
]
test_parseCookVar :: IO ()
test_parseCookVar =
do parsed1 <- parseBuildFileText "sample1" sampleFile1 >>= assertRight
assertEqual expected1 parsed1
parsed2 <- parseBuildFileText "sample2" sampleFile2 >>= assertRight
assertEqual expected2 parsed2
where
expected2 =
expected1
{ bf_requiredVars = V.fromList [("BUILD_MODE", Just "fast")]
, bf_name = BuildFileId "sample2"
}
expected1 =
(emptyBuildFile (BuildFileId "sample1") (BuildBaseCook $ BuildFileId "foo.bar"))
{ bf_requiredVars = V.fromList [("BUILD_MODE", Nothing)]
, bf_dockerCommands =
V.fromList
[Right $ DockerCommand "RUN" "echo $BUILD_MODE"]
}
sampleFile1 =
T.unlines
[ "BASE COOK foo.bar"
, "COOKVAR BUILD_MODE"
, "RUN echo $BUILD_MODE"
]
sampleFile2 =
T.unlines
[ "BASE COOK foo.bar"
, "COOKVAR BUILD_MODE fast"
, "RUN echo $BUILD_MODE"
]
test_parseBuildAdvanced :: IO ()
test_parseBuildAdvanced =
do t1 <- parseBuildFile "test/parsefail01.cook"
_ <- assertRight t1
return ()