diff --git a/Cabal/tests/PackageTests/BenchmarkOptions/BenchmarkOptions.cabal b/Cabal/tests/PackageTests/BenchmarkOptions/BenchmarkOptions.cabal new file mode 100644 index 0000000000000000000000000000000000000000..e35702c10e7d604296d0754238bc093999f92f5f --- /dev/null +++ b/Cabal/tests/PackageTests/BenchmarkOptions/BenchmarkOptions.cabal @@ -0,0 +1,20 @@ +name: BenchmarkOptions +version: 0.1 +license: BSD3 +author: Johan Tibell +stability: stable +category: PackageTests +build-type: Simple +cabal-version: >= 1.9.2 + +description: + Check that Cabal passes the correct test options to test suites. + +executable dummy + main-is: test-BenchmarkOptions.hs + build-depends: base + +benchmark test-BenchmarkOptions + main-is: test-BenchmarkOptions.hs + type: exitcode-stdio-1.0 + build-depends: base diff --git a/Cabal/tests/PackageTests/BenchmarkOptions/Check.hs b/Cabal/tests/PackageTests/BenchmarkOptions/Check.hs new file mode 100644 index 0000000000000000000000000000000000000000..dbb7a74e8c1dce2b4f3c3db91f42f7b389c7668d --- /dev/null +++ b/Cabal/tests/PackageTests/BenchmarkOptions/Check.hs @@ -0,0 +1,23 @@ +module PackageTests.BenchmarkOptions.Check where + +import Test.HUnit +import System.FilePath +import PackageTests.PackageTester + +suite :: Test +suite = TestCase $ do + let directory = "PackageTests" </> "BenchmarkOptions" + pdFile = directory </> "BenchmarkOptions" <.> "cabal" + spec = PackageSpec directory ["--enable-benchmarks"] + _ <- cabal_build spec + result <- cabal_bench spec ["--benchmark-options=1 2 3"] + let message = "\"cabal bench\" did not pass the correct options to the " + ++ "benchmark executable with \"--benchmark-options\"" + assertEqual message True $ successful result + result' <- cabal_bench spec [ "--benchmark-option=1" + , "--benchmark-option=2" + , "--benchmark-option=3" + ] + let message = "\"cabal bench\" did not pass the correct options to the " + ++ "benchmark executable with \"--benchmark-option\"" + assertEqual message True $ successful result' diff --git a/Cabal/tests/PackageTests/BenchmarkOptions/Setup.hs b/Cabal/tests/PackageTests/BenchmarkOptions/Setup.hs new file mode 100644 index 0000000000000000000000000000000000000000..200a2e51d0b46fa8a38d91b749f59f20eb97a46d --- /dev/null +++ b/Cabal/tests/PackageTests/BenchmarkOptions/Setup.hs @@ -0,0 +1,3 @@ +import Distribution.Simple +main = defaultMain + diff --git a/Cabal/tests/PackageTests/BenchmarkOptions/test-BenchmarkOptions.hs b/Cabal/tests/PackageTests/BenchmarkOptions/test-BenchmarkOptions.hs new file mode 100644 index 0000000000000000000000000000000000000000..7c21bff136c0f76d85739b0e694b391fccdc1930 --- /dev/null +++ b/Cabal/tests/PackageTests/BenchmarkOptions/test-BenchmarkOptions.hs @@ -0,0 +1,11 @@ +module Main where + +import System.Environment ( getArgs ) +import System.Exit ( exitFailure, exitSuccess ) + +main :: IO () +main = do + args <- getArgs + if args == ["1", "2", "3"] + then exitSuccess + else putStrLn ("Got: " ++ show args) >> exitFailure diff --git a/Cabal/tests/PackageTests/PackageTester.hs b/Cabal/tests/PackageTests/PackageTester.hs index e7a233d674f484420315da5cf4a1994e788c197b..ca458d3bcb8f7814022330e7acf2d9d1f75d478d 100644 --- a/Cabal/tests/PackageTests/PackageTester.hs +++ b/Cabal/tests/PackageTests/PackageTester.hs @@ -5,6 +5,7 @@ module PackageTests.PackageTester ( cabal_configure, cabal_build, cabal_test, + cabal_bench, cabal_install, unregister, run @@ -32,7 +33,13 @@ data PackageSpec = configOpts :: [String] } -data Success = Failure | ConfigureSuccess | BuildSuccess | InstallSuccess | TestSuccess deriving (Eq, Show) +data Success = Failure + | ConfigureSuccess + | BuildSuccess + | InstallSuccess + | TestSuccess + | BenchSuccess + deriving (Eq, Show) data Result = Result { successful :: Bool, @@ -111,6 +118,13 @@ cabal_test spec extraArgs = do record spec r return r +cabal_bench :: PackageSpec -> [String] -> IO Result +cabal_bench spec extraArgs = do + res <- cabal spec $ "bench" : extraArgs + let r = recordRun res BenchSuccess nullResult + record spec r + return r + -- | Returns the command that was issued, the return code, and hte output text cabal :: PackageSpec -> [String] -> IO (String, ExitCode, String) cabal spec cabalArgs = do diff --git a/Cabal/tests/suite.hs b/Cabal/tests/suite.hs index 93320eef85aaf761dc6d97a750290e62cec95763..2e32069585ba6fb0c38b7a4721fb1c2982573b4e 100644 --- a/Cabal/tests/suite.hs +++ b/Cabal/tests/suite.hs @@ -11,6 +11,7 @@ import Test.Framework.Providers.HUnit import Test.Framework.Providers.QuickCheck2 import qualified Test.HUnit as HUnit import PackageTests.BenchmarkExeV10.Check +import PackageTests.BenchmarkOptions.Check import PackageTests.BenchmarkStanza.Check import PackageTests.BuildDeps.SameDepsAllRound.Check import PackageTests.BuildDeps.TargetSpecificDeps1.Check @@ -50,10 +51,11 @@ tests cabalVersion = [ (PackageTests.TestSuiteExeV10.Check.checkTestWithHpc cabalVersion), hunit "PackageTests/TestOptions" PackageTests.TestOptions.Check.suite, hunit "PackageTests/BenchmarkStanza/" (PackageTests.BenchmarkStanza.Check.suite cabalVersion), - hunit "PackageTests/BenchmarkExeV10/Test" - (PackageTests.BenchmarkExeV10.Check.checkBenchmark cabalVersion) -- ^ The benchmark stanza test will eventually be required -- only for higher versions. + hunit "PackageTests/BenchmarkExeV10/Test" + (PackageTests.BenchmarkExeV10.Check.checkBenchmark cabalVersion), + hunit "PackageTests/BenchmarkOptions" PackageTests.BenchmarkOptions.Check.suite ] ++ -- These tests are only required to pass on cabal version >= 1.7 (if cabalVersion >= Version [1, 7] []