stylish-haskell-0.12.0.0: tests/Language/Haskell/Stylish/Step/ModuleHeader/Tests.hs
{-# LANGUAGE OverloadedLists #-}
module Language.Haskell.Stylish.Step.ModuleHeader.Tests
( tests
) where
--------------------------------------------------------------------------------
import Prelude hiding (lines)
import Test.Framework (Test, testGroup)
import Test.Framework.Providers.HUnit (testCase)
import Test.HUnit (Assertion)
--------------------------------------------------------------------------------
import Language.Haskell.Stylish.Step.ModuleHeader
import Language.Haskell.Stylish.Tests.Util
--------------------------------------------------------------------------------
tests :: Test
tests = testGroup "Language.Haskell.Stylish.Printer.ModuleHeader"
[ testCase "Hello world" ex0
, testCase "Empty exports list" ex1
, testCase "Single exported variable" ex2
, testCase "Multiple exported variables" ex3
, testCase "Only reformats module header" ex4
, testCase "Leaving pragmas in place" ex5
, testCase "Leaving pragmas in place variant" ex6
, testCase "Leaving comments in place" ex7
, testCase "Exports all" ex8
, testCase "Exports module" ex9
, testCase "Exports symbol" ex10
, testCase "Respects groups" ex11
, testCase "'where' not repeated in case it isn't part of exports" ex12
, testCase "Indents absent export list with 2 spaces" ex13
, testCase "Indents with 2 spaces" ex14
, testCase "Group doc with 2 spaces" ex15
, testCase "Does not sort" ex16
]
--------------------------------------------------------------------------------
ex0 :: Assertion
ex0 = assertSnippet (step defaultConfig)
[ "module Foo where"
]
[ "module Foo"
, " where"
]
ex1 :: Assertion
ex1 = assertSnippet (step defaultConfig)
[ "module Foo () where"
]
[ "module Foo"
, " ("
, " ) where"
]
ex2 :: Assertion
ex2 = assertSnippet (step defaultConfig)
[ "module Foo (tests) where"
]
[ "module Foo"
, " ( tests"
, " ) where"
]
ex3 :: Assertion
ex3 = assertSnippet (step defaultConfig)
[ "module Foo (t1, t2, t3) where"
]
[ "module Foo"
, " ( t1"
, " , t2"
, " , t3"
, " ) where"
]
ex4 :: Assertion
ex4 = assertSnippet (step defaultConfig)
[ "module Foo ("
, " t1,"
, " t3,"
, " t2"
, ") where"
, ""
, ""
, "-- | Docstring"
, "foo :: Int"
, "foo = 1"
]
[ "module Foo"
, " ( t1"
, " , t2"
, " , t3"
, " ) where"
, ""
, ""
, "-- | Docstring"
, "foo :: Int"
, "foo = 1"
]
ex5 :: Assertion
ex5 = assertSnippet (step defaultConfig)
[ "{-# LANGUAGE DerivingVia #-}"
, "-- | This module docs"
, "module Foo ("
, " t1,"
, " t3,"
, " t2"
, ") where"
]
[ "{-# LANGUAGE DerivingVia #-}"
, "-- | This module docs"
, "module Foo"
, " ( t1"
, " , t2"
, " , t3"
, " ) where"
]
ex6 :: Assertion
ex6 = assertSnippet (step defaultConfig)
[ "-- | This module docs"
, "{-# LANGUAGE DerivingVia #-}"
, "module Foo ("
, " t1,"
, " t3,"
, " t2"
, ") where"
]
[ "-- | This module docs"
, "{-# LANGUAGE DerivingVia #-}"
, "module Foo"
, " ( t1"
, " , t2"
, " , t3"
, " ) where"
]
ex7 :: Assertion
ex7 = assertSnippet (step defaultConfig)
[ "module Foo -- Foo"
, "("
, " -- * t1 something"
, " t3,"
, " t1,"
, " -- * t2 something"
, " t2"
, ") where -- x"
, "-- y"
]
[ "module Foo -- Foo"
, " ( -- * t1 something"
, " t1"
, " , t3"
, " -- * t2 something"
, " , t2"
, " ) where -- x"
, "-- y"
]
ex8 :: Assertion
ex8 = assertSnippet (step defaultConfig)
[ "module Foo ("
, " -- * t1 something"
, " t3,"
, " A(..),"
, " -- * t2 something"
, " t2,"
, " t1"
, ") where -- x"
, "-- y"
]
[ "module Foo"
, " ( -- * t1 something"
, " A (..)"
, " , t3"
, " -- * t2 something"
, " , t1"
, " , t2"
, " ) where -- x"
, "-- y"
]
ex9 :: Assertion
ex9 = assertSnippet (step defaultConfig)
[ "module Foo ("
, " -- * t1 something"
, " module A,"
, " t3,"
, " -- * t2 something"
, " t2"
, ") where -- x"
, "-- y"
]
[ "module Foo"
, " ( -- * t1 something"
, " module A"
, " , t3"
, " -- * t2 something"
, " , t2"
, " ) where -- x"
, "-- y"
]
ex10 :: Assertion
ex10 = assertSnippet (step defaultConfig)
[ "module Foo ("
, " (<&>)"
, ") where -- x"
, "-- y"
]
[ "module Foo"
, " ( (<&>)"
, " ) where -- x"
, "-- y"
]
ex11 :: Assertion
ex11 = assertSnippet (step defaultConfig)
[ "module Foo ("
, " -- group 1"
, " g1_1,"
, " g1_0,"
, " -- group 2"
, " g0_1,"
, " g0_0"
, ") where"
]
[ "module Foo"
, " ( -- group 1"
, " g1_0"
, " , g1_1"
, " -- group 2"
, " , g0_0"
, " , g0_1"
, " ) where"
]
ex12 :: Assertion
ex12 = assertSnippet (step defaultConfig)
[ "module Foo"
, " where"
, "-- hmm"
]
[ "module Foo"
, " where"
, "-- hmm"
]
ex13 :: Assertion
ex13 = assertSnippet (step defaultConfig {indent = 2})
[ "module Foo where"
]
[ "module Foo"
, " where"
]
ex14 :: Assertion
ex14 = assertSnippet (step defaultConfig {indent = 2})
[ "module Foo"
, " ( yes"
, " , no"
, " ) where"
]
[ "module Foo"
, " ( no"
, " , yes"
, " ) where"
]
ex15 :: Assertion
ex15 = assertSnippet (step defaultConfig {indent = 2})
[ "module Foo -- Foo"
, "("
, " -- * t1 something"
, " t3,"
, " t1,"
, " -- * t2 something"
, " t2"
, ") where"
]
[ "module Foo -- Foo"
, " ( -- * t1 something"
, " t1"
, " , t3"
, " -- * t2 something"
, " , t2"
, " ) where"
]
ex16 :: Assertion
ex16 = assertSnippet (step defaultConfig {sort = False}) input input
where
input =
[ "module Foo"
, " ( yes"
, " , no"
, " ) where"
]