purescript-0.8.4.0: tests/Language/PureScript/Ide/FilterSpec.hs
{-# LANGUAGE OverloadedStrings #-}
module Language.PureScript.Ide.FilterSpec where
import Data.Text (Text)
import Language.PureScript.Ide.Filter
import Language.PureScript.Ide.Types
import qualified Language.PureScript as P
import Test.Hspec
value :: Text -> ExternDecl
value s = ValueDeclaration s P.TypeWildcard
modules :: [Module]
modules =
[
("Module.A", [value "function1"]),
("Module.B", [value "data1"]),
("Module.C", [ModuleDecl "Module.C" []]),
("Module.D", [Dependency "Module.C" [] Nothing, value "asd"])
]
runEq :: Text -> [Module]
runEq s = runFilter (equalityFilter s) modules
runPrefix :: Text -> [Module]
runPrefix s = runFilter (prefixFilter s) modules
runModule :: [ModuleIdent] -> [Module]
runModule ms = runFilter (moduleFilter ms) modules
runDependency :: [ModuleIdent] -> [Module]
runDependency ms = runFilter (dependencyFilter ms) modules
spec :: Spec
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]