psc-ide-0.1.0.0: test/PureScript/Ide/FilterSpec.hs
{-# LANGUAGE OverloadedStrings #-}
module PureScript.Ide.FilterSpec where
import Test.Hspec
import PureScript.Ide.Filter
import PureScript.Ide.Types
modules :: [Module]
modules =
[
("Module.A", [FunctionDecl "function1" ""]),
("Module.B", [DataDecl "data1" ""]),
("Module.C", [ModuleDecl "Module.C" []]),
("Module.D", [Dependency "Module.C" [], FunctionDecl "asd" ""])
]
runEq s = runFilter (equalityFilter s) modules
runPrefix s = runFilter (prefixFilter s) modules
runModule ms = runFilter (moduleFilter ms) modules
runDependency ms = runFilter (dependencyFilter ms) modules
spec = do
describe "equality Filter" $ do
it "removes empty modules" $
runEq "test" `shouldBe` []
it "keeps function declarations that are equal" $
runEq "function1" `shouldBe` [head modules]
-- TODO: It would be more sensible to match Constructors
it "keeps data declarations that are equal" $
runEq "data1" `shouldBe` [modules !! 1]
describe "prefixFilter" $ do
it "keeps everything on empty string" $
runPrefix "" `shouldBe` modules
it "keeps functionname prefix matches" $
runPrefix "fun" `shouldBe` [head modules]
it "keeps data decls prefix matches" $
runPrefix "dat" `shouldBe` [modules !! 1]
it "keeps module decl prefix matches" $
runPrefix "Mod" `shouldBe` [modules !! 2]
describe "moduleFilter" $ do
it "removes everything on empty input" $
runModule [] `shouldBe` []
it "only keeps the specified modules" $
runModule ["Module.A", "Module.C"] `shouldBe` [head modules, modules !! 2]
it "ignores modules that are not in scope" $
runModule ["Module.A", "Module.C", "Unknown"] `shouldBe` [head modules, modules !! 2]
describe "dependencyFilter" $ do
it "removes everything on empty input" $
runDependency [] `shouldBe` []
it "only keeps the specified modules if they have no imports" $
runDependency ["Module.A", "Module.B"] `shouldBe` [head modules, modules !! 1]
it "keeps the specified modules and their imports" $
runDependency ["Module.A", "Module.D"] `shouldBe` [head modules, modules !! 2, modules !! 3]