HUnit-Plus-2.0.0: test/Tests/Test/HUnitPlus/Filter.hs
{-# LANGUAGE OverloadedStrings #-}
module Tests.Test.HUnitPlus.Filter(tests) where
import Data.List
import Data.HashMap.Strict(HashMap)
import Distribution.TestSuite
import Test.HUnitPlus.Filter
import qualified Data.HashMap.Strict as HashMap
import qualified Data.HashSet as HashSet
import qualified Data.Text as Strict
suiteNames :: [[String]]
suiteNames = [[], ["Suite1"], ["Suite1"], ["Suite1", "Suite2"]]
paths :: [[String]]
paths = [[], ["Outer"], ["Outer", "Middle"], ["Outer", "Middle", "Inner"],
["Underscore_path"], ["t__", "__u__", "__v"]]
tagNames :: [[String]]
tagNames = [[], ["tag1"], ["tag2"], ["tag1", "tag2"], ["underscore_tag"],
["t__", "_u__", "__v"]]
suiteString :: [String] -> String
suiteString [] = ""
suiteString suites = "[" ++ intercalate "," suites ++ "]"
pathString :: [String] -> String
pathString [] = ""
pathString path = intercalate "." path
tagsString :: [String] -> String
tagsString [] = ""
tagsString tags = '@' : intercalate "," tags
makeFilterString :: [String] -> [String] -> [String] -> String
makeFilterString suites path tags =
suiteString suites ++ pathString path ++ tagsString tags
tagsSelector :: [String] -> Selector
tagsSelector [] = allSelector
tagsSelector tags =
allSelector { selectorTags = Just $! HashSet.fromList (map Strict.pack tags) }
pathSelector :: Selector -> [Strict.Text] -> Selector
pathSelector inner [] = inner
pathSelector inner (elem : path) =
Selector { selectorInners = HashMap.singleton elem (pathSelector inner path),
selectorTags = Nothing }
makeFilter :: [Strict.Text] -> Selector -> Filter
makeFilter names selector =
Filter { filterSuites = HashSet.fromList names, filterOptions = HashMap.empty,
filterSelector = HashSet.singleton selector }
suitesName :: [String] -> String
suitesName [] = "no_suites"
suitesName suites = intercalate "_" suites
pathName :: [String] -> String
pathName [] = "no_path"
pathName path = intercalate "_" path
tagsName :: [String] -> String
tagsName [] = "no_tags"
tagsName tags = intercalate "_" tags
makeFilterParseTest :: [String] -> [String] -> [String] -> Test
makeFilterParseTest suites path tags =
let
name = suitesName suites ++ "__" ++ pathName path ++ "__" ++ tagsName tags
string = suiteString suites ++ pathString path ++ tagsString tags
expected = makeFilter (map Strict.pack suites)
(pathSelector (tagsSelector tags)
(map Strict.pack path))
runTest :: IO Progress
runTest =
do case parseFilter "test input" (Strict.pack string) of
Left e -> return (Finished (Fail ("Parse of " ++ string ++
" failed: " ++ (Strict.unpack e))))
Right actual
| expected == actual -> return (Finished Pass)
| otherwise ->
return (Finished (Fail ("In parse of " ++ string ++
"\nexpected " ++ show expected ++
"\nactual " ++ show actual)))
testInstance = TestInstance { name = name, run = runTest,
tags = [], options = [],
setOption = (\_ _ -> Right testInstance) }
in
Test testInstance
filterComponents :: [([String], [String], [String])]
filterComponents =
foldl (\tests suiteName ->
foldl (\tests path ->
foldl (\tests tag -> (suiteName, path, tag) : tests)
tests tagNames)
tests paths)
[] suiteNames
whitespaceStrings :: [String]
whitespaceStrings = [ "", " ", "\t" ]
commentStrings = [ "#", "# [Suite]"]
filterParseTests :: [Test]
filterParseTests = map (\(suiteName, path, tag) ->
makeFilterParseTest suiteName path tag)
filterComponents
makeFileParserTest :: String -> String -> [Filter] -> Test
makeFileParserTest name content expected =
let
runTest :: IO Progress
runTest =
do case parseFilterFileContent name (Strict.pack content) of
Left e -> return (Finished (Fail ("Parse of\n************\n" ++
content ++
"\n************\nfailed: " ++
concat (map Strict.unpack e))))
Right actual
| expected == actual -> return (Finished Pass)
| otherwise ->
return (Finished (Fail ("In parse of\n************\n" ++
content ++
"\n************\nexpected " ++
show expected ++ "\nactual " ++
show actual)))
testInstance =
TestInstance { name = name, tags = [], run = runTest, options = [],
setOption = (\_ _ -> Right testInstance) }
in
Test testInstance
fileTests :: [(String, String, [Filter])]
fileTests =
let
simplePath =
Selector {
selectorTags = Nothing,
selectorInners =
HashMap.singleton "Outer"
Selector { selectorTags = Nothing,
selectorInners = HashMap.singleton "Inner" allSelector }
}
simplePathStr = "Outer.Inner"
onlyTags = allSelector { selectorTags =
Just $! HashSet.fromList ["tag1", "tag2"] }
onlyTagsStr = "@tag1,tag2"
pathTags =
Selector {
selectorTags = Nothing,
selectorInners =
HashMap.singleton "Outer"
Selector { selectorTags = Nothing,
selectorInners = HashMap.singleton "Inner" onlyTags }
}
pathTagsStr = "Outer.Inner@tag1,tag2"
suiteAllFilter = Filter { filterSuites = HashSet.fromList ["Suite1",
"Suite2"],
filterOptions = HashMap.empty,
filterSelector = HashSet.singleton allSelector }
suiteFilterStr = "[Suite1,Suite2]"
simplePathFilter = Filter { filterSuites = HashSet.empty,
filterOptions = HashMap.empty,
filterSelector = HashSet.singleton simplePath }
suitePathFilter = Filter { filterSuites = HashSet.fromList ["Suite1",
"Suite2"],
filterOptions = HashMap.empty,
filterSelector = HashSet.singleton simplePath }
suitePathStr = suiteFilterStr ++ simplePathStr
onlyTagsFilter = Filter { filterSuites = HashSet.empty,
filterOptions = HashMap.empty,
filterSelector = HashSet.singleton onlyTags }
suiteTagsFilter = Filter { filterSuites = HashSet.fromList ["Suite1",
"Suite2"],
filterOptions = HashMap.empty,
filterSelector = HashSet.singleton onlyTags }
suiteTagsStr = suiteFilterStr ++ onlyTagsStr
pathTagsFilter = Filter { filterSuites = HashSet.empty,
filterOptions = HashMap.empty,
filterSelector = HashSet.singleton pathTags }
suitePathTagsFilter =
Filter { filterSuites = HashSet.fromList ["Suite1", "Suite2"],
filterOptions = HashMap.empty,
filterSelector = HashSet.singleton pathTags }
suitePathTagsStr = suiteFilterStr ++ pathTagsStr
suiteSequenceStrs = [ simplePathStr,
onlyTagsStr,
pathTagsStr,
suiteFilterStr,
suitePathStr,
suiteTagsStr,
suitePathTagsStr ]
suiteSequence = [ simplePathFilter,
onlyTagsFilter,
pathTagsFilter,
suiteAllFilter,
suitePathFilter,
suiteTagsFilter,
suitePathTagsFilter ]
in
[("empty", "", []),
("space", " ", []),
("tab", "\t", []),
("newline", "\n", []),
("comment", "# Outer@tag", []),
("comment_comment", "# Outer@tag # hello", []),
("comment_newline_comment", "# Outer@tag\n# hello", []),
("space_comment", " # Outer@tag", []),
("tab_comment", "\t# Outer@tag", []),
("newline_comment", "\n# [Suite]", []),
("newline_space_comment", "\n # [Suite]", []),
("newline_tab_comment", "\n\t# [Suite]", []),
("comment_newline", "# Outer@tag\n", []),
("comment_newline_space", "# Outer@tag\n ", []),
("comment_newline_tab", "# Outer@tag\n\t", []),
("space_comment_newline", " # Outer@tag\n", []),
("space_comment_newline_space", " # Outer@tag\n ", []),
("space_comment_newline_tab", " # Outer@tag\n\t", []),
("tab_comment_newline", "\t# Outer@tag\n", []),
("tab_comment_newline_space", "\t# Outer@tag\n ", []),
("tab_comment_newline_tab", "\t# Outer@tag\n\t", []),
("suiteAll", suiteFilterStr, [suiteAllFilter]),
("space_suiteAll", " " ++ suiteFilterStr, [suiteAllFilter]),
("tab_suiteAll", "\t" ++ suiteFilterStr, [suiteAllFilter]),
("newline_suiteAll", "\n" ++ suiteFilterStr, [suiteAllFilter]),
("comment_suiteAll", "# comment\n" ++ suiteFilterStr, [suiteAllFilter]),
("suiteAll_space", suiteFilterStr ++ " ", [suiteAllFilter]),
("suiteAll_tab", suiteFilterStr ++ "\t", [suiteAllFilter]),
("suiteAll_newline", suiteFilterStr ++ "\n", [suiteAllFilter]),
("suiteAll_comment", suiteFilterStr ++ "# comment\n", [suiteAllFilter]),
("suiteAll_newline_suiteAll",
suiteFilterStr ++ "\n" ++ suiteFilterStr,
[suiteAllFilter, suiteAllFilter]),
("suiteAll_comment_suiteAll",
suiteFilterStr ++ "# comment\n" ++ suiteFilterStr,
[suiteAllFilter, suiteAllFilter]),
("simplePath", simplePathStr, [simplePathFilter]),
("space_simplePath", " " ++ simplePathStr, [simplePathFilter]),
("tab_simplePath", "\t" ++ simplePathStr, [simplePathFilter]),
("newline_simplePath", "\n" ++ simplePathStr, [simplePathFilter]),
("comment_simplePath", "# comment\n" ++ simplePathStr, [simplePathFilter]),
("simplePath_space", simplePathStr ++ " ", [simplePathFilter]),
("simplePath_tab", simplePathStr ++ "\t", [simplePathFilter]),
("simplePath_newline", simplePathStr ++ "\n", [simplePathFilter]),
("simplePath_comment", simplePathStr ++ "# comment\n", [simplePathFilter]),
("simplePath_newline_simplePath",
simplePathStr ++ "\n" ++ simplePathStr,
[simplePathFilter, simplePathFilter]),
("simplePath_comment_simplePath",
simplePathStr ++ "# comment\n" ++ simplePathStr,
[simplePathFilter, simplePathFilter]),
("suitePath", suitePathStr, [suitePathFilter]),
("space_suitePath", " " ++ suitePathStr, [suitePathFilter]),
("tab_suitePath", "\t" ++ suitePathStr, [suitePathFilter]),
("newline_suitePath", "\n" ++ suitePathStr, [suitePathFilter]),
("comment_suitePath", "# comment\n" ++ suitePathStr, [suitePathFilter]),
("suitePath_space", suitePathStr ++ " ", [suitePathFilter]),
("suitePath_tab", suitePathStr ++ "\t", [suitePathFilter]),
("suitePath_newline", suitePathStr ++ "\n", [suitePathFilter]),
("suitePath_comment", suitePathStr ++ "# comment\n", [suitePathFilter]),
("suitePath_newline_suitePath",
suitePathStr ++ "\n" ++ suitePathStr,
[suitePathFilter, suitePathFilter]),
("suitePath_comment_suitePath",
suitePathStr ++ "# comment\n" ++ suitePathStr,
[suitePathFilter, suitePathFilter]),
("onlyTags", onlyTagsStr, [onlyTagsFilter]),
("space_onlyTags", " " ++ onlyTagsStr, [onlyTagsFilter]),
("tab_onlyTags", "\t" ++ onlyTagsStr, [onlyTagsFilter]),
("newline_onlyTags", "\n" ++ onlyTagsStr, [onlyTagsFilter]),
("comment_onlyTags", "# comment\n" ++ onlyTagsStr, [onlyTagsFilter]),
("onlyTags_space", onlyTagsStr ++ " ", [onlyTagsFilter]),
("onlyTags_tab", onlyTagsStr ++ "\t", [onlyTagsFilter]),
("onlyTags_newline", onlyTagsStr ++ "\n", [onlyTagsFilter]),
("onlyTags_comment", onlyTagsStr ++ "# comment\n", [onlyTagsFilter]),
("onlyTags_newline_onlyTags",
onlyTagsStr ++ "\n" ++ onlyTagsStr,
[onlyTagsFilter, onlyTagsFilter]),
("onlyTags_comment_onlyTags",
onlyTagsStr ++ "# comment\n" ++ onlyTagsStr,
[onlyTagsFilter, onlyTagsFilter]),
("suiteTags", suiteTagsStr, [suiteTagsFilter]),
("space_suiteTags", " " ++ suiteTagsStr, [suiteTagsFilter]),
("tab_suiteTags", "\t" ++ suiteTagsStr, [suiteTagsFilter]),
("newline_suiteTags", "\n" ++ suiteTagsStr, [suiteTagsFilter]),
("comment_suiteTags", "# comment\n" ++ suiteTagsStr, [suiteTagsFilter]),
("suiteTags_space", suiteTagsStr ++ " ", [suiteTagsFilter]),
("suiteTags_tab", suiteTagsStr ++ "\t", [suiteTagsFilter]),
("suiteTags_newline", suiteTagsStr ++ "\n", [suiteTagsFilter]),
("suiteTags_comment", suiteTagsStr ++ "# comment\n", [suiteTagsFilter]),
("suiteTags_newline_suiteTags",
suiteTagsStr ++ "\n" ++ suiteTagsStr,
[suiteTagsFilter, suiteTagsFilter]),
("suiteTags_comment_suiteTags",
suiteTagsStr ++ "# comment\n" ++ suiteTagsStr,
[suiteTagsFilter, suiteTagsFilter]),
("pathTags", pathTagsStr, [pathTagsFilter]),
("space_pathTags", " " ++ pathTagsStr, [pathTagsFilter]),
("tab_pathTags", "\t" ++ pathTagsStr, [pathTagsFilter]),
("newline_pathTags", "\n" ++ pathTagsStr, [pathTagsFilter]),
("comment_pathTags", "# comment\n" ++ pathTagsStr, [pathTagsFilter]),
("pathTags_space", pathTagsStr ++ " ", [pathTagsFilter]),
("pathTags_tab", pathTagsStr ++ "\t", [pathTagsFilter]),
("pathTags_newline", pathTagsStr ++ "\n", [pathTagsFilter]),
("pathTags_comment", pathTagsStr ++ "# comment\n", [pathTagsFilter]),
("pathTags_newline_pathTags",
pathTagsStr ++ "\n" ++ pathTagsStr,
[pathTagsFilter, pathTagsFilter]),
("pathTags_comment_pathTags",
pathTagsStr ++ "# comment\n" ++ pathTagsStr,
[pathTagsFilter, pathTagsFilter]),
("suitePathTags", suitePathTagsStr, [suitePathTagsFilter]),
("space_suitePathTags", " " ++ suitePathTagsStr, [suitePathTagsFilter]),
("tab_suitePathTags", "\t" ++ suitePathTagsStr, [suitePathTagsFilter]),
("newline_suitePathTags", "\n" ++ suitePathTagsStr, [suitePathTagsFilter]),
("comment_suitePathTags", "# comment\n" ++ suitePathTagsStr,
[suitePathTagsFilter]),
("suitePathTags_space", suitePathTagsStr ++ " ", [suitePathTagsFilter]),
("suitePathTags_tab", suitePathTagsStr ++ "\t", [suitePathTagsFilter]),
("suitePathTags_newline", suitePathTagsStr ++ "\n", [suitePathTagsFilter]),
("suitePathTags_comment", suitePathTagsStr ++ "# comment\n",
[suitePathTagsFilter]),
("suitePathTags_newline_suitePathTags",
suitePathTagsStr ++ "\n" ++ suitePathTagsStr,
[suitePathTagsFilter, suitePathTagsFilter]),
("suitePathTags_comment_suitePathTags",
suitePathTagsStr ++ "# comment\n" ++ suitePathTagsStr,
[suitePathTagsFilter, suitePathTagsFilter]),
("sequence", intercalate "\n" suiteSequenceStrs, suiteSequence),
("commented_sequence", intercalate "# comment \n" suiteSequenceStrs,
suiteSequence),
("indented_sequence", concat (map (++ "\n ") suiteSequenceStrs),
suiteSequence)
]
fileParserTests =
map (\(name, content, expected) -> makeFileParserTest name content expected)
fileTests
innerPath :: Selector -> Selector
innerPath inner = Selector { selectorInners = HashMap.singleton "Inner" inner,
selectorTags = Nothing }
outerPath :: Selector -> Selector
outerPath inner = Selector { selectorInners = HashMap.singleton "Outer" inner,
selectorTags = Nothing }
outerInnerPath :: Selector -> Selector
outerInnerPath = outerPath . innerPath
outerAndInnerPath :: Selector
outerAndInnerPath =
Selector { selectorInners = HashMap.fromList [("Outer", allSelector),
("Inner", allSelector)],
selectorTags = Nothing }
outerInnerAndInnerPath :: Selector
outerInnerAndInnerPath =
Selector { selectorInners = HashMap.fromList [("Outer", innerPath allSelector),
("Inner", allSelector)],
selectorTags = Nothing }
tag1OuterAndInnerPath :: Selector
tag1OuterAndInnerPath =
Selector { selectorInners = HashMap.fromList [("Outer", allSelector),
("Inner", allSelector)],
selectorTags = Just $! HashSet.singleton "tag1" }
tag1 :: Selector -> Selector
tag1 inner = inner { selectorTags = Just $! HashSet.singleton "tag1" }
tag2 :: Selector -> Selector
tag2 inner = inner { selectorTags = Just $! HashSet.singleton "tag2" }
tag12 :: Selector -> Selector
tag12 inner = inner { selectorTags = Just $! HashSet.fromList ["tag1", "tag2"] }
combineSelectorTestCases :: [(String, Selector, Selector, Selector)]
combineSelectorTestCases =
[("all_all", allSelector, allSelector, allSelector),
("all_Outer", allSelector, outerPath allSelector, allSelector),
("Outer_all", outerPath allSelector, allSelector, allSelector),
("all__Outer_Inner", allSelector, outerInnerPath allSelector, allSelector),
("Outer_Inner__all", outerInnerPath allSelector, allSelector, allSelector),
("Outer_Outer", outerPath allSelector, outerPath allSelector,
outerPath allSelector),
("Outer_Inner", outerPath allSelector, innerPath allSelector,
outerAndInnerPath),
("Inner_Outer", innerPath allSelector, outerPath allSelector,
outerAndInnerPath),
("Outer__Outer_Inner", outerPath allSelector, outerInnerPath allSelector,
outerPath allSelector),
("Outer_Inner__Outer", outerInnerPath allSelector, outerPath allSelector,
outerPath allSelector),
("Inner__Outer_Inner", innerPath allSelector, outerInnerPath allSelector,
outerInnerAndInnerPath),
("Outer_Inner__Inner", outerInnerPath allSelector, innerPath allSelector,
outerInnerAndInnerPath),
("tag1_Outer", tag1 allSelector, outerPath allSelector,
tag1 (outerPath allSelector)),
("Outer_tag1", outerPath allSelector, tag1 allSelector,
tag1 (outerPath allSelector)),
("tag1__Outer_Inner", tag1 allSelector, outerInnerPath allSelector,
tag1 (outerInnerPath allSelector)),
("Outer_Inner__tag1", outerInnerPath allSelector, tag1 allSelector,
tag1 (outerInnerPath allSelector)),
("tag1_Outer__Outer", tag1 (outerPath allSelector), outerPath allSelector,
tag1 (outerPath allSelector)),
("Outer__tag1_Outer", outerPath allSelector, tag1 (outerPath allSelector),
tag1 (outerPath allSelector)),
("tag1_Inner__Outer", tag1 (innerPath allSelector), outerPath allSelector,
tag1OuterAndInnerPath),
("Outer__tag1_Inner", outerPath allSelector, tag1 (innerPath allSelector),
tag1OuterAndInnerPath),
("tag1_Outer__tag1_Inner", tag1 (innerPath allSelector),
tag1 (outerPath allSelector),
tag1 outerAndInnerPath),
("tag1_Inner__tag1_Outer", tag1 (outerPath allSelector),
tag1 (innerPath allSelector),
tag1 outerAndInnerPath),
("all_tag1", allSelector, tag1 allSelector, allSelector),
("tag1_all", tag1 allSelector, allSelector, allSelector),
("all_tag2", allSelector, tag2 allSelector, allSelector),
("tag2_all", tag2 allSelector, allSelector, allSelector),
("all_tag12", allSelector, tag12 allSelector, allSelector),
("tag12_all", tag12 allSelector, allSelector, allSelector),
("tag1_tag1", tag1 allSelector, tag1 allSelector, tag1 allSelector),
("tag1_tag2", tag1 allSelector, tag2 allSelector, tag12 allSelector),
("tag2_tag1", tag2 allSelector, tag1 allSelector, tag12 allSelector),
("tag1_tag12", tag1 allSelector, tag12 allSelector, tag12 allSelector),
("tag12_tag1", tag12 allSelector, tag1 allSelector, tag12 allSelector),
("tag1_tag2", tag1 allSelector, tag2 allSelector, tag12 allSelector),
("tag2_tag1", tag2 allSelector, tag1 allSelector, tag12 allSelector),
("tag2_tag2", tag2 allSelector, tag2 allSelector, tag2 allSelector),
("tag2_tag12", tag2 allSelector, tag12 allSelector, tag12 allSelector),
("tag12_tag2", tag12 allSelector, tag2 allSelector, tag12 allSelector),
("tag12_tag1", tag12 allSelector, tag1 allSelector, tag12 allSelector),
("tag1_tag12", tag1 allSelector, tag12 allSelector, tag12 allSelector),
("tag12_tag2", tag12 allSelector, tag2 allSelector, tag12 allSelector),
("tag2_tag12", tag2 allSelector, tag12 allSelector, tag12 allSelector),
("tag12_tag12", tag12 allSelector, tag12 allSelector, tag12 allSelector),
("Outer_tag1__Outer", outerPath (tag1 allSelector), outerPath allSelector,
outerPath allSelector),
("Outer__Outer_tag1", outerPath allSelector, outerPath (tag1 allSelector),
outerPath allSelector),
("Outer_tag1__Outer_tag1", outerPath (tag1 allSelector),
outerPath (tag1 allSelector), outerPath (tag1 allSelector)),
("Outer_tag1__Outer_tag2", outerPath (tag1 allSelector),
outerPath (tag2 allSelector), outerPath (tag12 allSelector)),
("Outer_tag2__Outer_tag1", outerPath (tag2 allSelector),
outerPath (tag1 allSelector), outerPath (tag12 allSelector)),
("Outer_Inner_tag1__Outer_tag1", outerInnerPath (tag1 allSelector),
outerPath (tag1 allSelector), outerPath (tag1 allSelector)),
("Outer_tag1__Outer_Inner_tag1", outerPath (tag1 allSelector),
outerInnerPath (tag1 allSelector), outerPath (tag1 allSelector)),
("tag1_Outer__Outer_tag1", tag1 (outerPath allSelector),
outerPath (tag1 allSelector), tag1 (outerPath allSelector)),
("Outer_tag1__tag1_Outer", outerPath (tag1 allSelector),
tag1 (outerPath allSelector), tag1 (outerPath allSelector))
]
combineSelectorTests :: [Test]
combineSelectorTests =
let
makeTest :: (String, Selector, Selector, Selector) -> Test
makeTest (name, input1, input2, expected) =
let
runTest =
let
actual = combineSelectors input1 input2
in do
if actual == expected
then return (Finished Pass)
else return (Finished (Fail ("Combining\n" ++ show input1 ++
"\nwith\n" ++ show input2 ++
"\nexpected\n" ++ show expected ++
"\ngot\n" ++ show actual)))
testInstance = TestInstance { name = name, tags = [], options = [],
setOption = (\_ _ -> return testInstance),
run = runTest }
in
Test testInstance
in
map makeTest combineSelectorTestCases
onePath :: Selector
onePath = Selector { selectorInners = HashMap.singleton "One" allSelector,
selectorTags = Nothing }
twoPath :: Selector
twoPath = Selector { selectorInners = HashMap.singleton "Two" allSelector,
selectorTags = Nothing }
oneTwoPath :: Selector
oneTwoPath = Selector { selectorInners = HashMap.fromList [("One", allSelector),
("Two", allSelector)],
selectorTags = Nothing }
emptyOneFilter :: Filter
emptyOneFilter = Filter { filterSuites = HashSet.empty,
filterOptions = HashMap.empty,
filterSelector = HashSet.singleton onePath }
emptyTwoFilter :: Filter
emptyTwoFilter = Filter { filterSuites = HashSet.empty,
filterOptions = HashMap.empty,
filterSelector = HashSet.singleton twoPath }
emptyOneTwoFilter :: Filter
emptyOneTwoFilter = Filter { filterSuites = HashSet.empty,
filterOptions = HashMap.empty,
filterSelector = HashSet.singleton oneTwoPath }
allAFilter :: Filter
allAFilter = Filter { filterSuites = HashSet.singleton "A",
filterOptions = HashMap.empty,
filterSelector = HashSet.singleton allSelector }
oneAFilter :: Filter
oneAFilter = Filter { filterSuites = HashSet.singleton "A",
filterOptions = HashMap.empty,
filterSelector = HashSet.singleton onePath }
oneBFilter :: Filter
oneBFilter = Filter { filterSuites = HashSet.singleton "B",
filterOptions = HashMap.empty,
filterSelector = HashSet.singleton onePath }
oneABFilter :: Filter
oneABFilter = Filter { filterSuites = HashSet.fromList ["A", "B"],
filterOptions = HashMap.empty,
filterSelector = HashSet.singleton onePath }
oneACFilter :: Filter
oneACFilter = Filter { filterSuites = HashSet.fromList ["A", "C"],
filterOptions = HashMap.empty,
filterSelector = HashSet.singleton onePath }
twoAFilter :: Filter
twoAFilter = Filter { filterSuites = HashSet.singleton "A",
filterOptions = HashMap.empty,
filterSelector = HashSet.singleton twoPath }
twoBFilter :: Filter
twoBFilter = Filter { filterSuites = HashSet.singleton "B",
filterOptions = HashMap.empty,
filterSelector = HashSet.singleton twoPath }
twoABFilter :: Filter
twoABFilter = Filter { filterSuites = HashSet.fromList ["A", "B"],
filterOptions = HashMap.empty,
filterSelector = HashSet.singleton twoPath }
twoACFilter :: Filter
twoACFilter = Filter { filterSuites = HashSet.fromList ["A", "C"],
filterOptions = HashMap.empty,
filterSelector = HashSet.singleton twoPath }
oneTwoAFilter :: Filter
oneTwoAFilter = Filter { filterSuites = HashSet.singleton "A",
filterOptions = HashMap.empty,
filterSelector = HashSet.singleton oneTwoPath }
oneTwoBFilter :: Filter
oneTwoBFilter = Filter { filterSuites = HashSet.singleton "B",
filterOptions = HashMap.empty,
filterSelector = HashSet.singleton oneTwoPath }
oneTwoABFilter :: Filter
oneTwoABFilter = Filter { filterSuites = HashSet.fromList ["A", "B"],
filterOptions = HashMap.empty,
filterSelector = HashSet.singleton oneTwoPath }
oneTwoACFilter :: Filter
oneTwoACFilter = Filter { filterSuites = HashSet.fromList ["A", "C"],
filterOptions = HashMap.empty,
filterSelector = HashSet.singleton oneTwoPath }
allBFilter :: Filter
allBFilter = Filter { filterSuites = HashSet.singleton "B",
filterOptions = HashMap.empty,
filterSelector = HashSet.singleton allSelector }
allCFilter :: Filter
allCFilter = Filter { filterSuites = HashSet.singleton "C",
filterOptions = HashMap.empty,
filterSelector = HashSet.singleton allSelector }
allABFilter :: Filter
allABFilter = Filter { filterSuites = HashSet.fromList ["A", "B"],
filterOptions = HashMap.empty,
filterSelector = HashSet.singleton allSelector }
allACFilter :: Filter
allACFilter = Filter { filterSuites = HashSet.fromList ["A", "C"],
filterOptions = HashMap.empty,
filterSelector = HashSet.singleton allSelector }
allBCFilter :: Filter
allBCFilter = Filter { filterSuites = HashSet.fromList ["B", "C"],
filterOptions = HashMap.empty,
filterSelector = HashSet.singleton allSelector }
filterTestCases :: [(String, [String], [Filter],
[(Strict.Text, HashMap OptionMap Selector)])]
filterTestCases = [
("A_nil", ["A"], [],
[("A", HashMap.singleton HashMap.empty allSelector)]),
("AB_nil", ["A", "B"], [],
[("A", HashMap.singleton HashMap.empty allSelector),
("B", HashMap.singleton HashMap.empty allSelector)]),
("ABC_nil", ["A", "B", "C"], [],
[("A", HashMap.singleton HashMap.empty allSelector),
("B", HashMap.singleton HashMap.empty allSelector),
("C", HashMap.singleton HashMap.empty allSelector)]),
("A_emptyOne", ["A"], [emptyOneFilter],
[("A", HashMap.singleton HashMap.empty onePath)]),
("AB_emptyOne", ["A", "B"], [emptyOneFilter],
[("A", HashMap.singleton HashMap.empty onePath),
("B", HashMap.singleton HashMap.empty onePath)]),
("ABC_emptyOne", ["A", "B", "C"], [emptyOneFilter],
[("A", HashMap.singleton HashMap.empty onePath),
("B", HashMap.singleton HashMap.empty onePath),
("C", HashMap.singleton HashMap.empty onePath)]),
("A_emptyOne_emptyTwo", ["A"], [emptyOneFilter, emptyTwoFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath)]),
("AB_emptyOne_emptyTwo", ["A", "B"], [emptyOneFilter, emptyTwoFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath),
("B", HashMap.singleton HashMap.empty oneTwoPath)]),
("ABC_emptyOne_emptyTwo", ["A", "B", "C"], [emptyOneFilter, emptyTwoFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath),
("B", HashMap.singleton HashMap.empty oneTwoPath),
("C", HashMap.singleton HashMap.empty oneTwoPath)]),
("A_emptyOne_emptyOneTwo", ["A"], [emptyOneFilter, emptyOneTwoFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath)]),
("AB_emptyOne_emptyOneTwo", ["A", "B"], [emptyOneFilter, emptyOneTwoFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath),
("B", HashMap.singleton HashMap.empty oneTwoPath)]),
("ABC_emptyOne_emptyOneTwo", ["A", "B", "C"], [emptyOneFilter,
emptyOneTwoFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath),
("B", HashMap.singleton HashMap.empty oneTwoPath),
("C", HashMap.singleton HashMap.empty oneTwoPath)]),
("A_allA", ["A"], [allAFilter],
[("A", HashMap.singleton HashMap.empty allSelector)]),
("A_OneA", ["A"], [oneAFilter],
[("A", HashMap.singleton HashMap.empty onePath)]),
("A_OneA_OneA", ["A"], [oneAFilter, oneAFilter],
[("A", HashMap.singleton HashMap.empty onePath)]),
("A_OneA_TwoA", ["A"], [oneAFilter, twoAFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath)]),
("A_OneA_OneTwoA", ["A"], [oneAFilter, oneTwoAFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath)]),
("A_OneA_allA", ["A"], [oneAFilter, allAFilter],
[("A", HashMap.singleton HashMap.empty allSelector)]),
("A_allA_allA", ["A"], [allAFilter, allAFilter],
[("A", HashMap.singleton HashMap.empty allSelector)]),
("A_OneA_emptyOne", ["A"], [oneAFilter, emptyOneFilter],
[("A", HashMap.singleton HashMap.empty onePath)]),
("A_TwoA_emptyOne", ["A"], [twoAFilter, emptyOneFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath)]),
("A_OneTwoA_emptyOne", ["A"], [oneTwoAFilter, emptyOneFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath)]),
("A_allA_emptyOne", ["A"], [allAFilter, emptyOneFilter],
[("A", HashMap.singleton HashMap.empty allSelector)]),
("A_OneA_emptyTwo", ["A"], [oneAFilter, emptyTwoFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath)]),
("A_TwoA_emptyTwo", ["A"], [twoAFilter, emptyTwoFilter],
[("A", HashMap.singleton HashMap.empty twoPath)]),
("A_OneTwoA_emptyTwo", ["A"], [oneTwoAFilter, emptyTwoFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath)]),
("A_allA_emptyTwo", ["A"], [allAFilter, emptyTwoFilter],
[("A", HashMap.singleton HashMap.empty allSelector)]),
("A_OneA_emptyOneTwo", ["A"], [oneAFilter, emptyOneTwoFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath)]),
("A_TwoA_emptyOneTwo", ["A"], [twoAFilter, emptyOneTwoFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath)]),
("A_OneTwoA_emptyOneTwo", ["A"], [oneTwoAFilter, emptyOneTwoFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath)]),
("A_allA_emptyOneTwo", ["A"], [allAFilter, emptyOneTwoFilter],
[("A", HashMap.singleton HashMap.empty allSelector)]),
("AB_allA", ["A", "B"], [allAFilter],
[("A", HashMap.singleton HashMap.empty allSelector)]),
("AB_OneA", ["A", "B"], [oneAFilter],
[("A", HashMap.singleton HashMap.empty onePath)]),
("AB_OneA_OneA", ["A", "B"], [oneAFilter, oneAFilter],
[("A", HashMap.singleton HashMap.empty onePath)]),
("AB_OneA_TwoA", ["A", "B"], [oneAFilter, twoAFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath)]),
("AB_OneA_OneTwoA", ["A", "B"], [oneAFilter, oneTwoAFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath)]),
("AB_OneA_allA", ["A", "B"], [oneAFilter, allAFilter],
[("A", HashMap.singleton HashMap.empty allSelector)]),
("AB_allA_allA", ["A", "B"], [allAFilter, allAFilter],
[("A", HashMap.singleton HashMap.empty allSelector)]),
("AB_OneA_OneB", ["A", "B"], [oneAFilter, oneBFilter],
[("A", HashMap.singleton HashMap.empty onePath),
("B", HashMap.singleton HashMap.empty onePath)]),
("AB_allA_OneB", ["A", "B"], [allAFilter, oneBFilter],
[("A", HashMap.singleton HashMap.empty allSelector),
("B", HashMap.singleton HashMap.empty onePath)]),
("AB_OneA_allB", ["A", "B"], [oneAFilter, allBFilter],
[("A", HashMap.singleton HashMap.empty onePath),
("B", HashMap.singleton HashMap.empty allSelector)]),
("AB_allA_allB", ["A", "B"], [allAFilter, allBFilter],
[("A", HashMap.singleton HashMap.empty allSelector),
("B", HashMap.singleton HashMap.empty allSelector)]),
("AB_OneA_OneAB", ["A", "B"], [oneAFilter, oneABFilter],
[("A", HashMap.singleton HashMap.empty onePath),
("B", HashMap.singleton HashMap.empty onePath)]),
("AB_OneA_TwoAB", ["A", "B"], [oneAFilter, twoABFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath),
("B", HashMap.singleton HashMap.empty twoPath)]),
("AB_OneA_OneTwoAB", ["A", "B"], [oneAFilter, oneTwoABFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath),
("B", HashMap.singleton HashMap.empty oneTwoPath)]),
("AB_allA_OneAB", ["A", "B"], [allAFilter, oneABFilter],
[("A", HashMap.singleton HashMap.empty allSelector),
("B", HashMap.singleton HashMap.empty onePath)]),
("AB_allA_TwoAB", ["A", "B"], [allAFilter, twoABFilter],
[("A", HashMap.singleton HashMap.empty allSelector),
("B", HashMap.singleton HashMap.empty twoPath)]),
("AB_allA_OneTwoAB", ["A", "B"], [allAFilter, oneTwoABFilter],
[("A", HashMap.singleton HashMap.empty allSelector),
("B", HashMap.singleton HashMap.empty oneTwoPath)]),
("AB_OneA_allAB", ["A", "B"], [oneAFilter, allABFilter],
[("A", HashMap.singleton HashMap.empty allSelector),
("B", HashMap.singleton HashMap.empty allSelector)]),
("AB_allA_allAB", ["A", "B"], [allAFilter, allABFilter],
[("A", HashMap.singleton HashMap.empty allSelector),
("B", HashMap.singleton HashMap.empty allSelector)]),
("AB_OneA_emptyOne", ["A", "B"], [oneAFilter, emptyOneFilter],
[("A", HashMap.singleton HashMap.empty onePath),
("B", HashMap.singleton HashMap.empty onePath)]),
("AB_TwoA_emptyOne", ["A", "B"], [twoAFilter, emptyOneFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath),
("B", HashMap.singleton HashMap.empty onePath)]),
("AB_OneTwoA_emptyOne", ["A", "B"], [oneTwoAFilter, emptyOneFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath),
("B", HashMap.singleton HashMap.empty onePath)]),
("AB_allA_emptyOne", ["A", "B"], [allAFilter, emptyOneFilter],
[("A", HashMap.singleton HashMap.empty allSelector),
("B", HashMap.singleton HashMap.empty onePath)]),
("AB_OneA_emptyTwo", ["A", "B"], [oneAFilter, emptyTwoFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath),
("B", HashMap.singleton HashMap.empty twoPath)]),
("AB_TwoA_emptyTwo", ["A", "B"], [twoAFilter, emptyTwoFilter],
[("A", HashMap.singleton HashMap.empty twoPath),
("B", HashMap.singleton HashMap.empty twoPath)]),
("AB_OneTwoA_emptyTwo", ["A", "B"], [oneTwoAFilter, emptyTwoFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath),
("B", HashMap.singleton HashMap.empty twoPath)]),
("AB_allA_emptyTwo", ["A", "B"], [allAFilter, emptyTwoFilter],
[("A", HashMap.singleton HashMap.empty allSelector),
("B", HashMap.singleton HashMap.empty twoPath)]),
("AB_OneA_emptyOneTwo", ["A", "B"], [oneAFilter, emptyOneTwoFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath),
("B", HashMap.singleton HashMap.empty oneTwoPath)]),
("AB_TwoA_emptyOneTwo", ["A", "B"], [twoAFilter, emptyOneTwoFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath),
("B", HashMap.singleton HashMap.empty oneTwoPath)]),
("AB_OneTwoA_emptyOneTwo", ["A", "B"], [oneTwoAFilter, emptyOneTwoFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath),
("B", HashMap.singleton HashMap.empty oneTwoPath)]),
("AB_allA_emptyOneTwo", ["A", "B"], [allAFilter, emptyOneTwoFilter],
[("A", HashMap.singleton HashMap.empty allSelector),
("B", HashMap.singleton HashMap.empty oneTwoPath)]),
("ABC_allA", ["A", "B", "C"], [allAFilter],
[("A", HashMap.singleton HashMap.empty allSelector)]),
("ABC_OneA", ["A", "B", "C"], [oneAFilter],
[("A", HashMap.singleton HashMap.empty onePath)]),
("ABC_OneA_OneA", ["A", "B", "C"], [oneAFilter, oneAFilter],
[("A", HashMap.singleton HashMap.empty onePath)]),
("ABC_OneA_TwoA", ["A", "B", "C"], [oneAFilter, twoAFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath)]),
("ABC_OneA_OneTwoA", ["A", "B", "C"], [oneAFilter, oneTwoAFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath)]),
("ABC_OneA_allA", ["A", "B", "C"], [oneAFilter, allAFilter],
[("A", HashMap.singleton HashMap.empty allSelector)]),
("ABC_allA_allA", ["A", "B", "C"], [allAFilter, allAFilter],
[("A", HashMap.singleton HashMap.empty allSelector)]),
("ABC_OneA_OneB", ["A", "B", "C"], [oneAFilter, oneBFilter],
[("A", HashMap.singleton HashMap.empty onePath),
("B", HashMap.singleton HashMap.empty onePath)]),
("ABC_allA_OneB", ["A", "B", "C"], [allAFilter, oneBFilter],
[("A", HashMap.singleton HashMap.empty allSelector),
("B", HashMap.singleton HashMap.empty onePath)]),
("ABC_OneA_allB", ["A", "B", "C"], [oneAFilter, allBFilter],
[("A", HashMap.singleton HashMap.empty onePath),
("B", HashMap.singleton HashMap.empty allSelector)]),
("ABC_allA_allB", ["A", "B", "C"], [allAFilter, allBFilter],
[("A", HashMap.singleton HashMap.empty allSelector),
("B", HashMap.singleton HashMap.empty allSelector)]),
("ABC_OneA_OneAB", ["A", "B", "C"], [oneAFilter, oneABFilter],
[("A", HashMap.singleton HashMap.empty onePath),
("B", HashMap.singleton HashMap.empty onePath)]),
("ABC_OneA_TwoAB", ["A", "B", "C"], [oneAFilter, twoABFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath),
("B", HashMap.singleton HashMap.empty twoPath)]),
("ABC_OneA_OneTwoAB", ["A", "B", "C"], [oneAFilter, oneTwoABFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath),
("B", HashMap.singleton HashMap.empty oneTwoPath)]),
("ABC_OneA_OneAC", ["A", "B", "C"], [oneAFilter, oneACFilter],
[("A", HashMap.singleton HashMap.empty onePath),
("C", HashMap.singleton HashMap.empty onePath)]),
("ABC_OneA_TwoAC", ["A", "B", "C"], [oneAFilter, twoACFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath),
("C", HashMap.singleton HashMap.empty twoPath)]),
("ABC_OneA_OneTwoAC", ["A", "B", "C"], [oneAFilter, oneTwoACFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath),
("C", HashMap.singleton HashMap.empty oneTwoPath)]),
("ABC_OneAB_OneAC", ["A", "B", "C"], [oneABFilter, oneACFilter],
[("A", HashMap.singleton HashMap.empty onePath),
("B", HashMap.singleton HashMap.empty onePath),
("C", HashMap.singleton HashMap.empty onePath)]),
("ABC_OneAB_TwoAC", ["A", "B", "C"], [oneABFilter, twoACFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath),
("B", HashMap.singleton HashMap.empty onePath),
("C", HashMap.singleton HashMap.empty twoPath)]),
("ABC_OneAB_OneTwoAC", ["A", "B", "C"], [oneABFilter, oneTwoACFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath),
("B", HashMap.singleton HashMap.empty onePath),
("C", HashMap.singleton HashMap.empty oneTwoPath)]),
("ABC_allA_OneAB", ["A", "B", "C"], [allAFilter, oneABFilter],
[("A", HashMap.singleton HashMap.empty allSelector),
("B", HashMap.singleton HashMap.empty onePath)]),
("ABC_allA_TwoAB", ["A", "B", "C"], [allAFilter, twoABFilter],
[("A", HashMap.singleton HashMap.empty allSelector),
("B", HashMap.singleton HashMap.empty twoPath)]),
("ABC_allA_OneTwoAB", ["A", "B", "C"], [allAFilter, oneTwoABFilter],
[("A", HashMap.singleton HashMap.empty allSelector),
("B", HashMap.singleton HashMap.empty oneTwoPath)]),
("ABC_allAC_OneAB", ["A", "B", "C"], [allACFilter, oneABFilter],
[("A", HashMap.singleton HashMap.empty allSelector),
("B", HashMap.singleton HashMap.empty onePath),
("C", HashMap.singleton HashMap.empty allSelector)]),
("ABC_allAC_TwoAB", ["A", "B", "C"], [allACFilter, twoABFilter],
[("A", HashMap.singleton HashMap.empty allSelector),
("B", HashMap.singleton HashMap.empty twoPath),
("C", HashMap.singleton HashMap.empty allSelector)]),
("ABC_allAC_OneTwoAB", ["A", "B", "C"], [allACFilter, oneTwoABFilter],
[("A", HashMap.singleton HashMap.empty allSelector),
("B", HashMap.singleton HashMap.empty oneTwoPath),
("C", HashMap.singleton HashMap.empty allSelector)]),
("ABC_OneA_allAB", ["A", "B", "C"], [oneAFilter, allABFilter],
[("A", HashMap.singleton HashMap.empty allSelector),
("B", HashMap.singleton HashMap.empty allSelector)]),
("ABC_allA_allAB", ["A", "B", "C"], [allAFilter, allABFilter],
[("A", HashMap.singleton HashMap.empty allSelector),
("B", HashMap.singleton HashMap.empty allSelector)]),
("ABC_OneA_allAB", ["A", "B", "C"], [oneACFilter, allABFilter],
[("A", HashMap.singleton HashMap.empty allSelector),
("B", HashMap.singleton HashMap.empty allSelector),
("C", HashMap.singleton HashMap.empty onePath)]),
("ABC_allA_allAB", ["A", "B", "C"], [allACFilter, allABFilter],
[("A", HashMap.singleton HashMap.empty allSelector),
("B", HashMap.singleton HashMap.empty allSelector),
("C", HashMap.singleton HashMap.empty allSelector)]),
("ABC_OneA_emptyOne", ["A", "B", "C"], [oneAFilter, emptyOneFilter],
[("A", HashMap.singleton HashMap.empty onePath),
("B", HashMap.singleton HashMap.empty onePath),
("C", HashMap.singleton HashMap.empty onePath)]),
("ABC_TwoA_emptyOne", ["A", "B", "C"], [twoAFilter, emptyOneFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath),
("B", HashMap.singleton HashMap.empty onePath),
("C", HashMap.singleton HashMap.empty onePath)]),
("ABC_OneTwoA_emptyOne", ["A", "B", "C"], [oneTwoAFilter, emptyOneFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath),
("B", HashMap.singleton HashMap.empty onePath),
("C", HashMap.singleton HashMap.empty onePath)]),
("ABC_allA_emptyOne", ["A", "B", "C"], [allAFilter, emptyOneFilter],
[("A", HashMap.singleton HashMap.empty allSelector),
("B", HashMap.singleton HashMap.empty onePath),
("C", HashMap.singleton HashMap.empty onePath)]),
("ABC_OneAB_emptyOne", ["A", "B", "C"], [oneABFilter, emptyOneFilter],
[("A", HashMap.singleton HashMap.empty onePath),
("B", HashMap.singleton HashMap.empty onePath),
("C", HashMap.singleton HashMap.empty onePath)]),
("ABC_TwoAB_emptyOne", ["A", "B", "C"], [twoABFilter, emptyOneFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath),
("B", HashMap.singleton HashMap.empty oneTwoPath),
("C", HashMap.singleton HashMap.empty onePath)]),
("ABC_OneTwoAB_emptyOne", ["A", "B", "C"], [oneTwoABFilter, emptyOneFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath),
("B", HashMap.singleton HashMap.empty oneTwoPath),
("C", HashMap.singleton HashMap.empty onePath)]),
("ABC_allAB_emptyOne", ["A", "B", "C"], [allABFilter, emptyOneFilter],
[("A", HashMap.singleton HashMap.empty allSelector),
("B", HashMap.singleton HashMap.empty allSelector),
("C", HashMap.singleton HashMap.empty onePath)]),
("ABC_OneA_emptyTwo", ["A", "B", "C"], [oneAFilter, emptyTwoFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath),
("B", HashMap.singleton HashMap.empty twoPath),
("C", HashMap.singleton HashMap.empty twoPath)]),
("ABC_TwoA_emptyTwo", ["A", "B", "C"], [twoAFilter, emptyTwoFilter],
[("A", HashMap.singleton HashMap.empty twoPath),
("B", HashMap.singleton HashMap.empty twoPath),
("C", HashMap.singleton HashMap.empty twoPath)]),
("ABC_OneTwoA_emptyTwo", ["A", "B", "C"], [oneTwoAFilter, emptyTwoFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath),
("B", HashMap.singleton HashMap.empty twoPath),
("C", HashMap.singleton HashMap.empty twoPath)]),
("ABC_allA_emptyTwo", ["A", "B", "C"], [allAFilter, emptyTwoFilter],
[("A", HashMap.singleton HashMap.empty allSelector),
("B", HashMap.singleton HashMap.empty twoPath),
("C", HashMap.singleton HashMap.empty twoPath)]),
("ABC_OneAB_emptyTwo", ["A", "B", "C"], [oneABFilter, emptyTwoFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath),
("B", HashMap.singleton HashMap.empty oneTwoPath),
("C", HashMap.singleton HashMap.empty twoPath)]),
("ABC_TwoAB_emptyTwo", ["A", "B", "C"], [twoABFilter, emptyTwoFilter],
[("A", HashMap.singleton HashMap.empty twoPath),
("B", HashMap.singleton HashMap.empty twoPath),
("C", HashMap.singleton HashMap.empty twoPath)]),
("ABC_OneTwoAB_emptyTwo", ["A", "B", "C"], [oneTwoABFilter, emptyTwoFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath),
("B", HashMap.singleton HashMap.empty oneTwoPath),
("C", HashMap.singleton HashMap.empty twoPath)]),
("ABC_allAB_emptyTwo", ["A", "B", "C"], [allABFilter, emptyTwoFilter],
[("A", HashMap.singleton HashMap.empty allSelector),
("B", HashMap.singleton HashMap.empty allSelector),
("C", HashMap.singleton HashMap.empty twoPath)]),
("ABC_OneA_emptyOneTwo", ["A", "B", "C"], [oneAFilter, emptyOneTwoFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath),
("B", HashMap.singleton HashMap.empty oneTwoPath),
("C", HashMap.singleton HashMap.empty oneTwoPath)]),
("ABC_TwoA_emptyOneTwo", ["A", "B", "C"], [twoAFilter, emptyOneTwoFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath),
("B", HashMap.singleton HashMap.empty oneTwoPath),
("C", HashMap.singleton HashMap.empty oneTwoPath)]),
("ABC_OneTwoA_emptyOneTwo", ["A", "B", "C"],
[oneTwoAFilter, emptyOneTwoFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath),
("B", HashMap.singleton HashMap.empty oneTwoPath),
("C", HashMap.singleton HashMap.empty oneTwoPath)]),
("ABC_allA_emptyOneTwo", ["A", "B", "C"], [allAFilter, emptyOneTwoFilter],
[("A", HashMap.singleton HashMap.empty allSelector),
("B", HashMap.singleton HashMap.empty oneTwoPath),
("C", HashMap.singleton HashMap.empty oneTwoPath)]),
("ABC_OneAB_emptyOneTwo", ["A", "B", "C"], [oneABFilter, emptyOneTwoFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath),
("B", HashMap.singleton HashMap.empty oneTwoPath),
("C", HashMap.singleton HashMap.empty oneTwoPath)]),
("ABC_TwoAB_emptyOneTwo", ["A", "B", "C"], [twoABFilter, emptyOneTwoFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath),
("B", HashMap.singleton HashMap.empty oneTwoPath),
("C", HashMap.singleton HashMap.empty oneTwoPath)]),
("ABC_OneTwoAB_emptyOneTwo", ["A", "B", "C"],
[oneTwoABFilter, emptyOneTwoFilter],
[("A", HashMap.singleton HashMap.empty oneTwoPath),
("B", HashMap.singleton HashMap.empty oneTwoPath),
("C", HashMap.singleton HashMap.empty oneTwoPath)]),
("ABC_allAB_emptyOneTwo", ["A", "B", "C"], [allABFilter, emptyOneTwoFilter],
[("A", HashMap.singleton HashMap.empty allSelector),
("B", HashMap.singleton HashMap.empty allSelector),
("C", HashMap.singleton HashMap.empty oneTwoPath)])
]
filterTests :: [Test]
filterTests =
let
makeTest :: (String, [String], [Filter],
[(Strict.Text, HashMap OptionMap Selector)])
-> Test
makeTest (name, suites, filters, expected) =
let
runTest =
let
actual = HashMap.toList (suiteSelectors (map Strict.pack suites)
filters)
in do
if actual == expected
then return (Finished Pass)
else return (Finished (Fail ("Combining\n" ++ show filters ++
"\nwith suites\n" ++ show suites ++
"\nexpected\n" ++ show expected ++
"\ngot\n" ++ show actual)))
testInstance = TestInstance { name = name, tags = [], options = [],
setOption = (\_ _ -> return testInstance),
run = runTest }
in
Test testInstance
in
map makeTest filterTestCases
testlist = [ testGroup "fileParser" fileParserTests,
testGroup "filterParse" filterParseTests,
testGroup "combineSelectors" combineSelectorTests,
testGroup "suiteSelectors" filterTests ]
tests :: Test
tests = testGroup "Filter" testlist