summaryrefslogtreecommitdiffhomepage
path: root/tests/Language/Haskell/Stylish/Step/Data/Tests.hs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/Language/Haskell/Stylish/Step/Data/Tests.hs')
-rw-r--r--tests/Language/Haskell/Stylish/Step/Data/Tests.hs536
1 files changed, 536 insertions, 0 deletions
diff --git a/tests/Language/Haskell/Stylish/Step/Data/Tests.hs b/tests/Language/Haskell/Stylish/Step/Data/Tests.hs
new file mode 100644
index 0000000..b43e6dc
--- /dev/null
+++ b/tests/Language/Haskell/Stylish/Step/Data/Tests.hs
@@ -0,0 +1,536 @@
+module Language.Haskell.Stylish.Step.Data.Tests
+ ( tests
+ ) where
+
+import Language.Haskell.Stylish.Step.Data
+import Language.Haskell.Stylish.Tests.Util (testStep)
+import Test.Framework (Test, testGroup)
+import Test.Framework.Providers.HUnit (testCase)
+import Test.HUnit (Assertion, (@=?))
+
+tests :: Test
+tests = testGroup "Language.Haskell.Stylish.Step.Data.Tests"
+ [ testCase "case 00" case00
+ , testCase "case 01" case01
+ , testCase "case 02" case02
+ , testCase "case 03" case03
+ , testCase "case 04" case04
+ , testCase "case 05" case05
+ , testCase "case 06" case06
+ , testCase "case 07" case07
+ , testCase "case 08" case08
+ , testCase "case 09" case09
+ , testCase "case 10" case10
+ , testCase "case 11" case11
+ , testCase "case 12" case12
+ , testCase "case 13" case13
+ , testCase "case 14" case14
+ , testCase "case 15" case15
+ , testCase "case 16" case16
+ , testCase "case 17" case17
+ , testCase "case 18" case18
+ , testCase "case 19" case19
+ , testCase "case 20 (issue 262)" case20
+ , testCase "case 21" case21
+ , testCase "case 22" case22
+ , testCase "case 23" case23
+ , testCase "case 24" case24
+ ]
+
+case00 :: Assertion
+case00 = expected @=? testStep (step sameSameStyle) input
+ where
+ input = unlines
+ [ "module Herp where"
+ , ""
+ , "data Foo"
+ ]
+
+ expected = input
+
+case01 :: Assertion
+case01 = expected @=? testStep (step indentIndentStyle) input
+ where
+ input = unlines
+ [ "module Herp where"
+ , ""
+ , "data Foo = Foo { a :: Int }"
+ ]
+
+ expected = unlines
+ [ "module Herp where"
+ , ""
+ , "data Foo"
+ , " = Foo"
+ , " { a :: Int"
+ , " }"
+ ]
+
+case02 :: Assertion
+case02 = expected @=? testStep (step indentIndentStyle) input
+ where
+ input = unlines
+ [ "module Herp where"
+ , ""
+ , "data Foo = Foo { a :: Int, a2 :: String }"
+ ]
+ expected = unlines
+ [ "module Herp where"
+ , ""
+ , "data Foo"
+ , " = Foo"
+ , " { a :: Int"
+ , " , a2 :: String"
+ , " }"
+ ]
+
+case03 :: Assertion
+case03 = expected @=? testStep (step indentIndentStyle) input
+ where
+ input = unlines
+ [ "module Herp where"
+ , ""
+ , "data Foo a = Foo { a :: a, a2 :: String }"
+ ]
+ expected = unlines
+ [ "module Herp where"
+ , ""
+ , "data Foo a"
+ , " = Foo"
+ , " { a :: a"
+ , " , a2 :: String"
+ , " }"
+ ]
+
+case04 :: Assertion
+case04 = expected @=? testStep (step indentIndentStyle) input
+ where
+ input = unlines
+ [ "module Herp where"
+ , ""
+ , "data Foo a = Foo { a :: a, a2 :: String } | Bar { b :: a }"
+ ]
+ expected = unlines
+ [ "module Herp where"
+ , ""
+ , "data Foo a"
+ , " = Foo"
+ , " { a :: a"
+ , " , a2 :: String"
+ , " }"
+ , " | Bar"
+ , " { b :: a"
+ , " }"
+ ]
+
+case05 :: Assertion
+case05 = expected @=? testStep (step indentIndentStyle) input
+ where
+ input = unlines
+ [ "module Herp where"
+ , ""
+ , "data Foo = Foo {"
+ , " a :: Int"
+ , " , a2 :: String"
+ , " }"
+ ]
+ expected = unlines
+ [ "module Herp where"
+ , ""
+ , "data Foo"
+ , " = Foo"
+ , " { a :: Int"
+ , " , a2 :: String"
+ , " }"
+ ]
+
+case06 :: Assertion
+case06 = expected @=? testStep (step sameSameStyle) input
+ where
+ input = unlines
+ [ "module Herp where"
+ , ""
+ , "data Foo = Foo Int String"
+ ]
+ expected = input
+
+case07 :: Assertion
+case07 = expected @=? testStep (step sameSameStyle) input
+ where
+ input = unlines
+ [ "module Herp where"
+ , ""
+ , "data Phantom a = Phantom"
+ ]
+ expected = input
+
+case08 :: Assertion
+case08 = input @=? testStep (step sameSameStyle) input
+ where
+ input = unlines
+ [ "module Herp where"
+ , ""
+ , "data Phantom a ="
+ , " Phantom"
+ ]
+
+case09 :: Assertion
+case09 = expected @=? testStep (step indentIndentStyle4) input
+ where
+ input = unlines
+ [ "module Herp where"
+ , ""
+ , "data Foo a b = Foo { a :: a, a2 :: String } | Bar { b :: a, c:: b }"
+ ]
+ expected = unlines
+ [ "module Herp where"
+ , ""
+ , "data Foo a b"
+ , " = Foo"
+ , " { a :: a"
+ , " , a2 :: String"
+ , " }"
+ , " | Bar"
+ , " { b :: a"
+ , " , c :: b"
+ , " }"
+ ]
+
+case10 :: Assertion
+case10 = expected @=? testStep (step indentIndentStyle) input
+ where
+ input = unlines
+ [ "module Herp where"
+ , ""
+ , "data Foo = Foo { a :: Int } deriving (Eq, Generic) deriving (Show)"
+ ]
+
+ expected = unlines
+ [ "module Herp where"
+ , ""
+ , "data Foo"
+ , " = Foo"
+ , " { a :: Int"
+ , " }"
+ , " deriving (Eq, Generic)"
+ , " deriving (Show)"
+ ]
+
+case11 :: Assertion
+case11 = expected @=? testStep (step indentIndentStyle) input
+ where
+ input = unlines
+ [ "{-# LANGUAGE DerivingStrategies #-}"
+ , "module Herp where"
+ , ""
+ , "data Foo = Foo { a :: Int } deriving stock (Show)"
+ ]
+
+ expected = unlines
+ [ "{-# LANGUAGE DerivingStrategies #-}"
+ , "module Herp where"
+ , ""
+ , "data Foo"
+ , " = Foo"
+ , " { a :: Int"
+ , " }"
+ , " deriving stock (Show)"
+ ]
+
+case12 :: Assertion
+case12 = expected @=? testStep (step indentIndentStyle4) input
+ where
+ input = unlines
+ [ "module Herp where"
+ , ""
+ , "data Point = Point { pointX, pointY :: Double , pointName :: String} deriving (Show)"
+ ]
+
+ expected = unlines
+ [ "module Herp where"
+ , ""
+ , "data Point"
+ , " = Point"
+ , " { pointX, pointY :: Double"
+ , " , pointName :: String"
+ , " }"
+ , " deriving (Show)"
+ ]
+
+case13 :: Assertion
+case13 = expected @=? testStep (step indentIndentStyle) input
+ where
+ input = unlines
+ [ "module Herp where"
+ , ""
+ , "-- this is a comment"
+ , "data Foo = Foo { a :: Int }"
+ ]
+ expected = unlines
+ [ "module Herp where"
+ , ""
+ , "-- this is a comment"
+ , "data Foo"
+ , " = Foo"
+ , " { a :: Int"
+ , " }"
+ ]
+
+case14 :: Assertion
+case14 = expected @=? testStep (step indentIndentStyle) input
+ where
+ input = unlines
+ [ "module Herp where"
+ , ""
+ , "{- this is"
+ , " a comment -}"
+ , "data Foo = Foo { a :: Int }"
+ ]
+ expected = unlines
+ [ "module Herp where"
+ , ""
+ , "{- this is"
+ , " a comment -}"
+ , "data Foo"
+ , " = Foo"
+ , " { a :: Int"
+ , " }"
+ ]
+
+case15 :: Assertion
+case15 = expected @=? testStep (step indentIndentStyle) input
+ where
+ input = unlines
+ [ "module Herp where"
+ , ""
+ , "data Foo a = Foo"
+ , " { a :: a, -- comment"
+ , " a2 :: String"
+ , " }"
+ ]
+ expected = unlines
+ [ "module Herp where"
+ , ""
+ , "data Foo a"
+ , " = Foo"
+ , " { a :: a -- comment"
+ , " , a2 :: String"
+ , " }"
+ ]
+
+case16 :: Assertion
+case16 = expected @=? testStep (step indentIndentStyle) input
+ where
+ input = unlines
+ [ "module Herp where"
+ , ""
+ , "data Foo = Foo {"
+ , " a :: Int -- ^ comment"
+ , " }"
+ ]
+ expected = unlines
+ [ "module Herp where"
+ , ""
+ , "data Foo"
+ , " = Foo"
+ , " { a :: Int -- ^ comment"
+ , " }"
+ ]
+
+case17 :: Assertion
+case17 = expected @=? testStep (step indentIndentStyle) input
+ where
+ input = unlines
+ [ "module Herp where"
+ , ""
+ , "data Foo a = Foo"
+ , " { a :: a,"
+ , "-- comment"
+ , " a2 :: String"
+ , " }"
+ ]
+ expected = unlines
+ [ "module Herp where"
+ , ""
+ , "data Foo a"
+ , " = Foo"
+ , " { a :: a"
+ , " -- comment"
+ , " , a2 :: String"
+ , " }"
+ ]
+
+case18 :: Assertion
+case18 = expected @=? testStep (step indentIndentStyle) input
+ where
+ input = unlines
+ [ "module Herp where"
+ , ""
+ , "data Foo a = Foo"
+ , " { a :: a,"
+ , "-- ^ comment"
+ , " a2 :: String"
+ , " }"
+ ]
+ expected = unlines
+ [ "module Herp where"
+ , ""
+ , "data Foo a"
+ , " = Foo"
+ , " { a :: a"
+ , " -- ^ comment"
+ , " , a2 :: String"
+ , " }"
+ ]
+
+case19 :: Assertion
+case19 = expected @=? testStep (step indentIndentStyle) input
+ where
+ input = unlines
+ [ "module Herp where"
+ , ""
+ , "data Foo a = Foo"
+ , " { firstName, lastName :: String,"
+ , "-- ^ names"
+ , " age :: Int"
+ , " }"
+ ]
+ expected = unlines
+ [ "module Herp where"
+ , ""
+ , "data Foo a"
+ , " = Foo"
+ , " { firstName, lastName :: String"
+ , " -- ^ names"
+ , " , age :: Int"
+ , " }"
+ ]
+
+-- | Should not break Enums (data without records) formatting
+--
+-- See https://github.com/jaspervdj/stylish-haskell/issues/262
+case20 :: Assertion
+case20 = input @=? testStep (step indentIndentStyle) input
+ where
+ input = unlines
+ [ "module Herp where"
+ , ""
+ , "data Tag = Title | Text deriving (Eq, Show)"
+ ]
+
+case21 :: Assertion
+case21 = expected @=? testStep (step sameSameStyle) input
+ where
+ input = unlines
+ [ "data Foo a"
+ , " = Foo { a :: Int,"
+ , " a2 :: String"
+ , " -- ^ some haddock"
+ , " }"
+ , " | Bar { b :: a } deriving (Eq, Show)"
+ , " deriving (ToJSON)"
+ ]
+
+ expected = unlines
+ [ "data Foo a = Foo { a :: Int"
+ , " , a2 :: String"
+ , " -- ^ some haddock"
+ , " }"
+ , " | Bar { b :: a"
+ , " }"
+ , " deriving (Eq, Show)"
+ , " deriving (ToJSON)"
+ ]
+
+case22 :: Assertion
+case22 = expected @=? testStep (step sameIndentStyle) input
+ where
+ input = unlines
+ [ "data Foo a"
+ , " = Foo { a :: Int,"
+ , " a2 :: String"
+ , " -- ^ some haddock"
+ , " }"
+ , " | Bar { b :: a } deriving (Eq, Show)"
+ , " deriving (ToJSON)"
+ ]
+
+ expected = unlines
+ [ "data Foo a = Foo"
+ , " { a :: Int"
+ , " , a2 :: String"
+ , " -- ^ some haddock"
+ , " }"
+ , " | Bar"
+ , " { b :: a"
+ , " }"
+ , " deriving (Eq, Show)"
+ , " deriving (ToJSON)"
+ ]
+
+case23 :: Assertion
+case23 = expected @=? testStep (step indentSameStyle) input
+ where
+ input = unlines
+ [ "data Foo a"
+ , " = Foo { a :: Int,"
+ , " a2 :: String"
+ , " -- ^ some haddock"
+ , " }"
+ , " | Bar { b :: a } deriving (Eq, Show)"
+ , " deriving (ToJSON)"
+ ]
+
+ expected = unlines
+ [ "data Foo a"
+ , " = Foo { a :: Int"
+ , " , a2 :: String"
+ , " -- ^ some haddock"
+ , " }"
+ , " | Bar { b :: a"
+ , " }"
+ , " deriving (Eq, Show)"
+ , " deriving (ToJSON)"
+ ]
+
+case24 :: Assertion
+case24 = expected @=? testStep (step indentIndentStyle) input
+ where
+ input = unlines
+ [ "data Foo a"
+ , " = Foo { a :: Int,"
+ , " a2 :: String"
+ , " -- ^ some haddock"
+ , " }"
+ , " | Bar { b :: a } deriving (Eq, Show)"
+ , " deriving (ToJSON)"
+ ]
+
+ expected = unlines
+ [ "data Foo a"
+ , " = Foo"
+ , " { a :: Int"
+ , " , a2 :: String"
+ , " -- ^ some haddock"
+ , " }"
+ , " | Bar"
+ , " { b :: a"
+ , " }"
+ , " deriving (Eq, Show)"
+ , " deriving (ToJSON)"
+ ]
+
+sameSameStyle :: Config
+sameSameStyle = Config SameLine SameLine 2 2
+
+sameIndentStyle :: Config
+sameIndentStyle = Config SameLine (Indent 2) 2 2
+
+indentSameStyle :: Config
+indentSameStyle = Config (Indent 2) SameLine 2 2
+
+indentIndentStyle :: Config
+indentIndentStyle = Config (Indent 2) (Indent 2) 2 2
+
+indentIndentStyle4 :: Config
+indentIndentStyle4 = Config (Indent 4) (Indent 4) 4 4