summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--hakyll.cabal6
-rw-r--r--src/Hakyll/Core/Configuration.hs4
-rw-r--r--src/Hakyll/Core/Runtime.hs9
-rw-r--r--tests/Hakyll/Core/Runtime/Tests.hs37
-rw-r--r--tests/TestSuite.hs6
-rw-r--r--tests/TestSuite/Util.hs18
6 files changed, 73 insertions, 7 deletions
diff --git a/hakyll.cabal b/hakyll.cabal
index 6151ffc..165611f 100644
--- a/hakyll.cabal
+++ b/hakyll.cabal
@@ -200,6 +200,12 @@ Test-suite hakyll-tests
Other-modules:
Hakyll.Core.Dependencies.Tests
+ Hakyll.Core.Identifier.Tests
Hakyll.Core.Provider.Tests
+ Hakyll.Core.Runtime.Tests
+ Hakyll.Core.Store.Tests
+ Hakyll.Core.UnixFilter.Tests
Hakyll.Web.Template.Tests
+ Hakyll.Web.Urls.Tests
+ Hakyll.Web.Urls.Relativize.Tests
TestSuite.Util
diff --git a/src/Hakyll/Core/Configuration.hs b/src/Hakyll/Core/Configuration.hs
index 650fe97..df73e01 100644
--- a/src/Hakyll/Core/Configuration.hs
+++ b/src/Hakyll/Core/Configuration.hs
@@ -18,6 +18,9 @@ data Configuration = Configuration
destinationDirectory :: FilePath
, -- | Directory where hakyll's internal store is kept
storeDirectory :: FilePath
+ , -- | Directory where hakyll finds the files to compile. This is @.@ by
+ -- default.
+ providerDirectory :: FilePath
, -- | Function to determine ignored files
--
-- In 'defaultHakyllConfiguration', the following files are ignored:
@@ -58,6 +61,7 @@ defaultConfiguration :: Configuration
defaultConfiguration = Configuration
{ destinationDirectory = "_site"
, storeDirectory = "_cache"
+ , providerDirectory = "."
, ignoreFile = ignoreFile'
, deployCommand = "echo 'No deploy command specified'"
, inMemoryCache = True
diff --git a/src/Hakyll/Core/Runtime.hs b/src/Hakyll/Core/Runtime.hs
index d219252..dba2af9 100644
--- a/src/Hakyll/Core/Runtime.hs
+++ b/src/Hakyll/Core/Runtime.hs
@@ -42,15 +42,14 @@ import Hakyll.Core.Writable
--------------------------------------------------------------------------------
run :: Configuration -> Rules a -> IO RuleSet
-run configuration rules = do
+run config rules = do
-- Initialization
logger <- Logger.new Logger.Debug putStrLn
Logger.header logger "Initialising..."
Logger.message logger "Creating store..."
- store <- Store.new (inMemoryCache configuration) $
- storeDirectory configuration
+ store <- Store.new (inMemoryCache config) $ storeDirectory config
Logger.message logger "Creating provider..."
- provider <- newProvider store (ignoreFile configuration) "."
+ provider <- newProvider store (ignoreFile config) $ providerDirectory config
Logger.message logger "Running rules..."
ruleSet <- runRules rules provider
@@ -62,7 +61,7 @@ run configuration rules = do
-- Build runtime read/state
let compilers = rulesCompilers ruleSet
read' = RuntimeRead
- { runtimeConfiguration = configuration
+ { runtimeConfiguration = config
, runtimeLogger = logger
, runtimeProvider = provider
, runtimeStore = store
diff --git a/tests/Hakyll/Core/Runtime/Tests.hs b/tests/Hakyll/Core/Runtime/Tests.hs
new file mode 100644
index 0000000..bb39a5f
--- /dev/null
+++ b/tests/Hakyll/Core/Runtime/Tests.hs
@@ -0,0 +1,37 @@
+--------------------------------------------------------------------------------
+{-# LANGUAGE OverloadedStrings #-}
+module Hakyll.Core.Runtime.Tests
+ ( tests
+ ) where
+
+
+--------------------------------------------------------------------------------
+import System.FilePath ((</>))
+import Test.Framework (Test, testGroup)
+import Test.HUnit (Assertion, (@?=))
+
+
+--------------------------------------------------------------------------------
+import Hakyll.Core.Configuration
+import Hakyll.Core.Routes
+import Hakyll.Core.Rules
+import Hakyll.Core.Runtime
+import Hakyll.Web.Page
+import TestSuite.Util
+
+
+--------------------------------------------------------------------------------
+tests :: Test
+tests = testGroup "Hakyll.Core.Runtime.Tests" $ fromAssertions "run" [case01]
+
+
+--------------------------------------------------------------------------------
+case01 :: Assertion
+case01 = withTestConfiguration $ \config -> do
+ _ <- run config $ do
+ match "*.md" $ do
+ route $ setExtension "html"
+ compile $ pageCompiler
+
+ out <- readFile $ destinationDirectory config </> "example.html"
+ lines out @?= ["<p>This is an example.</p>"]
diff --git a/tests/TestSuite.hs b/tests/TestSuite.hs
index b783d7a..0476869 100644
--- a/tests/TestSuite.hs
+++ b/tests/TestSuite.hs
@@ -5,18 +5,19 @@ module Main
--------------------------------------------------------------------------------
-import Test.Framework (defaultMain)
+import Test.Framework (defaultMain)
--------------------------------------------------------------------------------
import qualified Hakyll.Core.Dependencies.Tests
import qualified Hakyll.Core.Identifier.Tests
import qualified Hakyll.Core.Provider.Tests
+import qualified Hakyll.Core.Runtime.Tests
import qualified Hakyll.Core.Store.Tests
import qualified Hakyll.Core.UnixFilter.Tests
import qualified Hakyll.Web.Template.Tests
-import qualified Hakyll.Web.Urls.Tests
import qualified Hakyll.Web.Urls.Relativize.Tests
+import qualified Hakyll.Web.Urls.Tests
--------------------------------------------------------------------------------
@@ -25,6 +26,7 @@ main = defaultMain
[ Hakyll.Core.Dependencies.Tests.tests
, Hakyll.Core.Identifier.Tests.tests
, Hakyll.Core.Provider.Tests.tests
+ , Hakyll.Core.Runtime.Tests.tests
, Hakyll.Core.Store.Tests.tests
, Hakyll.Core.UnixFilter.Tests.tests
, Hakyll.Web.Template.Tests.tests
diff --git a/tests/TestSuite/Util.hs b/tests/TestSuite/Util.hs
index 5d62ffc..8f0911d 100644
--- a/tests/TestSuite/Util.hs
+++ b/tests/TestSuite/Util.hs
@@ -8,6 +8,7 @@ module TestSuite.Util
, newTestProvider
, testCompiler
, testCompilerDone
+ , withTestConfiguration
) where
@@ -22,6 +23,7 @@ import Text.Printf (printf)
--------------------------------------------------------------------------------
import Hakyll.Core.Compiler.Internal
+import Hakyll.Core.Configuration
import Hakyll.Core.Identifier
import qualified Hakyll.Core.Logger as Logger
import Hakyll.Core.Provider
@@ -92,3 +94,19 @@ testCompilerDone store provider underlying compiler = do
CompilerRequire i _ -> error $
"TestSuite.Util.testCompilerDone: compiler " ++ show underlying ++
" requires: " ++ show i
+
+
+
+--------------------------------------------------------------------------------
+withTestConfiguration :: (Configuration -> IO a) -> IO a
+withTestConfiguration f = do
+ x <- f config
+ removeDirectoryRecursive $ destinationDirectory config
+ removeDirectoryRecursive $ storeDirectory config
+ return x
+ where
+ config = defaultConfiguration
+ { destinationDirectory = "_testsite"
+ , storeDirectory = "_teststore"
+ , providerDirectory = "tests/data"
+ }