{-# LANGUAGE CPP #-} {-# LANGUAGE ScopedTypeVariables #-} module Main where import Control.Exception ( SomeException, try ) import Data.Bifunctor ( bimap ) import qualified Hedgehog as HH import Test.Tasty import Test.Tasty.HUnit import Test.Tasty.Hedgehog import Test.Tasty.Sugar #if MIN_VERSION_prettyprinter(1,7,0) import Prettyprinter #else import Data.Text.Prettyprint.Doc #endif import TestMultiAssoc import TestNoAssoc import TestSingleAssoc import TestUtils import TestParamsAssoc import TestWildcard main :: IO () main = defaultMain $ testGroup "tasty-sweet tests" [ testProperty "empty file list" $ HH.withTests 10000 $ HH.property $ do cube <- HH.forAll $ genCube HH.assert $ null $ fst $ findSugarIn cube [] , testGroup "invalid separators" $ [ testCase "duplicate separators" $ (Left "Duplicate separator characters" @=?) =<< runTestOrErr (CUBE "." "*.foo" "e" ".-." [] []) , testCase "many duplicate separators" $ (Left "Duplicate separator characters" @=?) =<< runTestOrErr (CUBE "." "*.foo" "e" ".---....---" [] []) ] , testGroup "invalid parameters" $ let c1 = CUBE "." "*.foo" "e" "." [] [("a", Nothing) ,("b", Nothing) ] msg1 = "Only one parameter can have unconstrained values (i.e. Nothing)" c2 = CUBE "." "*.foo" "e" "." [] [("a", Just [])] msg2 = "Blank validParams values are not allowed (a)" c3 = CUBE "." "*.foo" "e" "." [] [("a", Just ["hi", ""]) ,("b", Just ["one", "two"]) ,("c", Just [""])] msg3 = "Parameter values cannot be blank (a, c)" c4 = CUBE "." "*.foo" "e" "." [] [("a", Just ["hi", "two"]) ,("b", Just ["one", "two"]) ,("c", Just ["end"])] msg4 = "Parameter values cannot be duplicated " <> show [(("a","b"), "two")] c5 = CUBE "." "*.foo" "e" "." [] [("a", Just ["two", "two"]) ,("b", Just ["one", "hi"]) ,("c", Just ["one"])] msg5 = "Parameter values cannot be duplicated " <> show [ (("a","a"), "two") , (("b", "c"), "one") ] c6 = CUBE "." "*.foo" "e" ".-o" [] [("a", Just ["two", "t"]) ,("b", Just [".1", "one" , "hi.u"]) ,("c", Just ["o"])] msg6 = "Parameter values cannot contain separators " <> show ["a", "b", "b", "b", "c"] in [ testCase "too many ambiguous parameters" $ (Left msg1 @=?) =<< runTestOrErr c1 , testCase "empty parameter value list" $ (Left msg2 @=?) =<< runTestOrErr c2 , testCase "blank parameter values" $ (Left msg3 @=?) =<< runTestOrErr c3 , testCase "inter-duplicated parameter values" $ (Left msg4 @=?) =<< runTestOrErr c4 , testCase "intra-duplicated parameter values" $ (Left msg5 @=?) =<< runTestOrErr c5 , testCase "parameter values containing separators" $ (Left msg6 @=?) =<< runTestOrErr c6 ] , testGroup "no associated file" $ noAssocTests , testGroup "single associated file" $ singleAssocTests , testGroup "multiple associated files" $ multiAssocTests , testGroup "params association" $ paramsAssocTests , testGroup "wildcard tests" $ wildcardAssocTests ] runTestOrErr :: CUBE -> IO (Either String String) runTestOrErr c = bimap (head . lines . show) show <$> (try (return $! findSugarIn c []) :: IO (Either SomeException ([Sweets], Doc ann))) -- , testGroup "samples tests" $ samplesTests -- , testGroup "expected matching" $ expectedTests