packages feed

dockercook-0.4.3.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 Paths_dockercook

import Test.Framework
import qualified Data.Vector as V
import qualified Data.Text as T
import qualified Data.Text.IO 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/*"

readDataFile :: String -> IO T.Text
readDataFile name =
    do fp <- getDataFileName name
       T.readFile fp

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
       sampleFile5 <- readDataFile "test1.cook"
       parsed5 <- parseBuildFileText "test1.cook" sampleFile5 >>= 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"
          ]