packages feed

herringbone-0.0.7: test/LocateAssetsSpec.hs

module LocateAssetsSpec where

import Test.Hspec
import Test.Hspec.HUnit
import Test.HUnit hiding (path)
import Data.Text (Text)
import Filesystem.Path.CurrentOS (FilePath, (</>))
import Prelude hiding (FilePath)

import Web.Herringbone.LocateAssets
import Web.Herringbone.Types
import SpecHelper

spec :: Spec
spec = do
    fromHUnitTest $ testWithInputs "getExtraExtensions"
        test_getExtraExtensions
        data_getExtraExtensions

    fromHUnitTest $ testWithInputs "resolvePPs"
        test_resolvePPs
        data_resolvePPs

    fromHUnitTest $ testWithInputs "lookupPP"
        test_lookupPP
        data_lookupPP

    fromHUnitTest $ testWithInputs "locateAssets"
        test_locateAssets
        data_locateAssets

test_getExtraExtensions :: (FilePath, FilePath, Maybe [Text]) -> Assertion
test_getExtraExtensions (pathWithExts, path, expected) =
    assertEqual' expected (getExtraExtensions pathWithExts path)

data_getExtraExtensions :: [(FilePath, FilePath, Maybe [Text])]
data_getExtraExtensions =
    [ ("game.js"   , "game.js.coffee"     , Just ["coffee"])
    , ("style.css" , "game.js.coffee"     , Nothing)
    , ("game.js"   , "game.js.coffee.erb" , Just ["erb", "coffee"])
    ]

allPPs :: PPs
allPPs = fromList [pp1, pp2]

test_resolvePPs :: (PPs, FilePath, FilePath, Maybe [PP]) -> Assertion
test_resolvePPs (pps, assetPath, sourcePath, expected) =
    assertEqual' expected (resolvePPs pps assetPath sourcePath)

data_resolvePPs :: [(PPs, FilePath, FilePath, Maybe [PP])]
data_resolvePPs =
    [ (noPPs  , "test.js"   , "test.js"         , Just [])
    , (noPPs  , "test.js"   , "test.js.pp1"     , Nothing)
    , (allPPs , "test.js"   , "test.js.pp1"     , Just [pp1])
    , (allPPs , "test.js"   , "test.js.pp1.pp2" , Just [pp2, pp1])
    , (allPPs , "style.css" , "test.js.pp1"     , Nothing)
    ]

test_lookupPP :: (Text, PPs, Maybe PP) -> Assertion
test_lookupPP (ext, pps, expected) =
    assertEqual' expected (lookupPP ext pps)

data_lookupPP :: [(Text, PPs, Maybe PP)]
data_lookupPP =
    [ ("sass" , noPPs  , Nothing)
    , ("sass" , allPPs , Nothing)
    , ("pp1"  , allPPs , Just pp1)
    ]

test_locateAssets :: (LogicalPath, [(FilePath, [PP])]) -> Assertion
test_locateAssets (logPath, expected) = do
    assets <- locateAssets testHB logPath
    assertSameElems expected assets

data_locateAssets :: [(LogicalPath, [(FilePath, [PP])])]
data_locateAssets =
    [ (lp "locateAssets.js",  [(base1 </> "locateAssets.js", [])])
    , (lp "locateAssets.css", [ (base1 </> "locateAssets.css", [])
                              , (base1 </> "locateAssets.css.pp1", [pp1])
                              , (base2 </> "locateAssets.css", [])
                              ])
    , (lp "html/locateAssets.html", [(base1 </> "html/locateAssets.html", [])])
    ]
    where
    base1 = "test/resources/assets"
    base2 = "test/resources/assets2"