From 4925dd828ee8618eec4f209ebb0456826df7c5a4 Mon Sep 17 00:00:00 2001 From: Jasper Van der Jeugt Date: Tue, 5 Apr 2011 11:52:50 +0200 Subject: Bring tests up-to-date --- tests/Hakyll/Core/Identifier/Tests.hs | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'tests') diff --git a/tests/Hakyll/Core/Identifier/Tests.hs b/tests/Hakyll/Core/Identifier/Tests.hs index 64b5abc..5b5d34d 100644 --- a/tests/Hakyll/Core/Identifier/Tests.hs +++ b/tests/Hakyll/Core/Identifier/Tests.hs @@ -10,18 +10,18 @@ import Hakyll.Core.Identifier.Pattern import TestSuite.Util tests :: [Test] -tests = fromAssertions "match" - [ Just ["bar"] @=? match "foo/**" "foo/bar" - , Just ["foo/bar"] @=? match "**" "foo/bar" - , Nothing @=? match "*" "foo/bar" - , Just [] @=? match "foo" "foo" - , Just ["foo"] @=? match "*/bar" "foo/bar" - , Just ["foo/bar"] @=? match "**/qux" "foo/bar/qux" - , Just ["foo/bar", "qux"] @=? match "**/*" "foo/bar/qux" - , Just ["foo", "bar/qux"] @=? match "*/**" "foo/bar/qux" - , Just ["foo"] @=? match "*.html" "foo.html" - , Nothing @=? match "*.html" "foo/bar.html" - , Just ["foo/bar"] @=? match "**.html" "foo/bar.html" - , Just ["foo/bar", "wut"] @=? match "**/qux/*" "foo/bar/qux/wut" - , Just ["lol", "fun/large"] @=? match "*cat/**.jpg" "lolcat/fun/large.jpg" +tests = fromAssertions "capture" + [ Just ["bar"] @=? capture "foo/**" "foo/bar" + , Just ["foo/bar"] @=? capture "**" "foo/bar" + , Nothing @=? capture "*" "foo/bar" + , Just [] @=? capture "foo" "foo" + , Just ["foo"] @=? capture "*/bar" "foo/bar" + , Just ["foo/bar"] @=? capture "**/qux" "foo/bar/qux" + , Just ["foo/bar", "qux"] @=? capture "**/*" "foo/bar/qux" + , Just ["foo", "bar/qux"] @=? capture "*/**" "foo/bar/qux" + , Just ["foo"] @=? capture "*.html" "foo.html" + , Nothing @=? capture "*.html" "foo/bar.html" + , Just ["foo/bar"] @=? capture "**.html" "foo/bar.html" + , Just ["foo/bar", "wut"] @=? capture "**/qux/*" "foo/bar/qux/wut" + , Just ["lol", "fun/large"] @=? capture "*cat/**.jpg" "lolcat/fun/large.jpg" ] -- cgit v1.2.3 From 78dbe8a3d127546c8c0cc5b464da0f2b8af7c9b0 Mon Sep 17 00:00:00 2001 From: Jasper Van der Jeugt Date: Wed, 6 Apr 2011 09:39:20 +0200 Subject: Add regex predicate helper --- src/Hakyll/Core/Identifier/Pattern.hs | 13 ++++++++++++- tests/Hakyll/Core/Identifier/Tests.hs | 14 +++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) (limited to 'tests') diff --git a/src/Hakyll/Core/Identifier/Pattern.hs b/src/Hakyll/Core/Identifier/Pattern.hs index 28e23ad..8f3ac01 100644 --- a/src/Hakyll/Core/Identifier/Pattern.hs +++ b/src/Hakyll/Core/Identifier/Pattern.hs @@ -35,6 +35,7 @@ module Hakyll.Core.Identifier.Pattern ( Pattern , parseGlob , predicate + , regex , matches , filterMatches , capture @@ -46,10 +47,11 @@ module Hakyll.Core.Identifier.Pattern import Data.List (isPrefixOf, inits, tails) import Control.Arrow ((&&&), (>>>)) import Control.Monad (msum) -import Data.Maybe (isJust) +import Data.Maybe (isJust, fromMaybe) import Data.Monoid (Monoid, mempty, mappend) import GHC.Exts (IsString, fromString) +import Text.Regex.PCRE ((=~~)) import Hakyll.Core.Identifier @@ -96,6 +98,15 @@ parseGlob = Glob . parse' predicate :: (Identifier -> Bool) -> Pattern predicate = Predicate +-- | Create a 'Pattern' from a regex +-- +-- Example: +-- +-- > regex "^foo/[^x]*$ +-- +regex :: String -> Pattern +regex str = predicate $ fromMaybe False . (=~~ str) . toFilePath + -- | Check if an identifier matches a pattern -- matches :: Pattern -> Identifier -> Bool diff --git a/tests/Hakyll/Core/Identifier/Tests.hs b/tests/Hakyll/Core/Identifier/Tests.hs index 5b5d34d..0d7bfb8 100644 --- a/tests/Hakyll/Core/Identifier/Tests.hs +++ b/tests/Hakyll/Core/Identifier/Tests.hs @@ -10,7 +10,13 @@ import Hakyll.Core.Identifier.Pattern import TestSuite.Util tests :: [Test] -tests = fromAssertions "capture" +tests = concat + [ captureTests + , regexTests + ] + +captureTests :: [Test] +captureTests = fromAssertions "capture" [ Just ["bar"] @=? capture "foo/**" "foo/bar" , Just ["foo/bar"] @=? capture "**" "foo/bar" , Nothing @=? capture "*" "foo/bar" @@ -25,3 +31,9 @@ tests = fromAssertions "capture" , Just ["foo/bar", "wut"] @=? capture "**/qux/*" "foo/bar/qux/wut" , Just ["lol", "fun/large"] @=? capture "*cat/**.jpg" "lolcat/fun/large.jpg" ] + +regexTests :: [Test] +regexTests = fromAssertions "regex" + [ True @=? matches (regex "^foo/[^x]*$") "foo/bar" + , False @=? matches (regex "^foo/[^x]*$") "foo/barx" + ] -- cgit v1.2.3