packages feed

tasty-th (empty) → 0.1.0

raw patch · 4 files changed

+167/−0 lines, 4 filesdep +basedep +language-haskell-extractdep +tastysetup-changed

Dependencies added: base, language-haskell-extract, tasty, template-haskell

Files

+ BSD3.txt view
@@ -0,0 +1,24 @@+Copyright (c) 2010, Oscar Finnsson+All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:+    * Redistributions of source code must retain the above copyright+      notice, this list of conditions and the following disclaimer.+    * Redistributions in binary form must reproduce the above copyright+      notice, this list of conditions and the following disclaimer in the+      documentation and/or other materials provided with the distribution.+    * Neither the name of Oscar Finnsson nor the+      names of its contributors may be used to endorse or promote products+      derived from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+DISCLAIMED. IN NO EVENT SHALL Oscar Finnsson BE LIABLE FOR ANY+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ Setup.lhs view
@@ -0,0 +1,6 @@+#!/usr/bin/runhaskell +> module Main where+> import Distribution.Simple+> main :: IO ()+> main = defaultMain+
+ src/Test/Tasty/TH.hs view
@@ -0,0 +1,114 @@+-----------------------------------------------------------------------------+--+-- Module      :  MainTestGenerator+-- Copyright   :  +-- License     :  BSD4+--+-- Maintainer  :  Benno Fünfstück+-- Stability   :  +-- Portability :  +--+-- +-----------------------------------------------------------------------------+{-# OPTIONS_GHC -XTemplateHaskell #-}++module Test.Tasty.TH +  ( testGroupGenerator+  , defaultMainGenerator+  ) where++import Language.Haskell.TH+import Language.Haskell.Extract ++import Test.Tasty++-- | Generate the usual code and extract the usual functions needed in order to run HUnit/Quickcheck/Quickcheck2.+-- All functions beginning with case_, prop_ or test_ will be extracted.+-- +-- > {-# OPTIONS_GHC -fglasgow-exts -XTemplateHaskell #-}+-- > module MyModuleTest where+-- > import Test.HUnit+-- > import MainTestGenerator+-- >+-- > main = $(defaultMainGenerator)+-- >+-- > case_Foo = do 4 @=? 4+-- >+-- > case_Bar = do "hej" @=? "hej"+-- >+-- > prop_Reverse xs = reverse (reverse xs) == xs+-- > where types = xs :: [Int]+-- >+-- > test_Group =+-- > [ testCase "1" case_Foo+-- > , testProperty "2" prop_Reverse+-- > ]+-- +-- will automagically extract prop_Reverse, case_Foo, case_Bar and test_Group and run them as well as present them as belonging to the testGroup 'MyModuleTest' such as+--+-- > me: runghc MyModuleTest.hs+-- > MyModuleTest:+-- > Reverse: [OK, passed 100 tests]+-- > Foo: [OK]+-- > Bar: [OK]+-- > Group:+-- > 1: [OK]+-- > 2: [OK, passed 100 tests]+-- >+-- > Properties Test Cases Total+-- > Passed 2 3 5+-- > Failed 0 0 0+-- > Total 2 3 5+defaultMainGenerator :: ExpQ+defaultMainGenerator =+  [| defaultMain $ testGroup $(locationModule) $ $(propListGenerator) ++ $(caseListGenerator) ++ $(testListGenerator)|]++-- | Generate the usual code and extract the usual functions needed for a testGroup in HUnit/Quickcheck/Quickcheck2.+--   All functions beginning with case_, prop_ or test_ will be extracted.+--  +--   > -- file SomeModule.hs+--   > fooTestGroup = $(testGroupGenerator)+--   > main = defaultMain [fooTestGroup]+--   > case_1 = do 1 @=? 1+--   > case_2 = do 2 @=? 2+--   > prop_p xs = reverse (reverse xs) == xs+--   >  where types = xs :: [Int]+--   +--   is the same as+--+--   > -- file SomeModule.hs+--   > fooTestGroup = testGroup "SomeModule" [testProperty "p" prop_1, testCase "1" case_1, testCase "2" case_2]+--   > main = defaultMain [fooTestGroup]+--   > case_1 = do 1 @=? 1+--   > case_2 = do 2 @=? 2+--   > prop_1 xs = reverse (reverse xs) == xs+--   >  where types = xs :: [Int]+testGroupGenerator :: ExpQ+testGroupGenerator =+  [| testGroup $(locationModule) $ $(propListGenerator) ++ $(caseListGenerator) ++ $(testListGenerator) |]++listGenerator :: String -> String -> ExpQ+listGenerator beginning funcName =+  functionExtractorMap beginning (applyNameFix funcName)++propListGenerator :: ExpQ+propListGenerator = listGenerator "^prop_" "testProperty"++caseListGenerator :: ExpQ+caseListGenerator = listGenerator "^case_" "testCase"++testListGenerator :: ExpQ+testListGenerator = listGenerator "^test_" "testGroup"++-- | The same as+--   e.g. \n f -> testProperty (fixName n) f+applyNameFix :: String -> ExpQ+applyNameFix n =+  do fn <- [|fixName|]+     return $ LamE [VarP (mkName "n")] (AppE (VarE (mkName n)) (AppE (fn) (VarE (mkName "n"))))++fixName :: String -> String+fixName name = replace '_' ' ' $ drop 5 name++replace :: Eq a => a -> a -> [a] -> [a]+replace b v = map (\i -> if b == i then v else i)
+ tasty-th.cabal view
@@ -0,0 +1,23 @@+name: tasty-th+version: 0.1.0+cabal-version: >= 1.6+build-type: Simple+license: BSD3+license-file: BSD3.txt+maintainer: Oscar Finnsson+homepage: http://github.com/bennofs/tasty-th+synopsis: Automagically generate the HUnit- and Quickcheck-bulk-code using Template Haskell.+description: A fork of of test-framework-th modified to use tasty instead of test-framework.++category: Testing+author: Oscar Finnsson & Emil Nordling & Benno Fünfstück++library+  exposed-modules: Test.Tasty.TH +  build-depends: base >= 4 && < 5, tasty, language-haskell-extract >= 0.2, template-haskell+  hs-source-dirs: src+++source-repository head+  type:     git+  location: https://github.com/bennofs/tasty-th.git