git.iko.soy/servant-quickcheck
on master help sign in
Fix serversEqual and tests.
commitc1b92215c3217b407cc009d0c54417a7de33dd51 authorJulian K. Arni <jkarni@gmail.com> dateSat 23 Apr 2016, 11:50 (11 years ago) parent2050487
3 files changed+21−12
src/Servant/QuickCheck/Internal/QuickCheck.hs+18−7 test/Servant/QuickCheck/InternalSpec.hs+2−4 test/Spec.hs+1−1
src/Servant/QuickCheck/Internal/QuickCheck.hs+18−7
@@ -17,10 +17,12 @@ import System.IO (hPutStrLn, hFlush)
1717import System.IO.Temp (withSystemTempFile)
1818import System.Mem (performGC)
1919import System.Process (callCommand)
20−import Test.Hspec (Expectation, expectationFailure)
20+import Test.Hspec (Expectation, expectationFailure, shouldBe)
2121import Test.QuickCheck (Args (..), Property, forAll, Result (..),
2222 Testable, property, ioProperty,
2323 quickCheckWithResult, stdArgs)
24+import System.IO.Unsafe (unsafePerformIO)
25+import Test.QuickCheck.Monadic
2426
2527import Servant.QuickCheck.Internal.HasGenRequest
2628import Servant.QuickCheck.Internal.Predicates
@@ -47,12 +49,21 @@ withServantServer api server t
4749-- Evidently, if the behaviour of the server is expected to be
4850-- non-deterministic, this function may produce spurious failures
4951serversEqual :: HasGenRequest a =>
50− Proxy a -> BaseUrl -> BaseUrl -> Manager -> Property
51−serversEqual api burl1 burl2 mgr =
52+ Proxy a -> BaseUrl -> BaseUrl -> Args -> Expectation
53+serversEqual api burl1 burl2 args = do
5254 let reqs = (\f -> (f burl1, f burl2)) <$> genRequest api
53− in forAll reqs $ \(req1, req2) -> ioProperty $ do
54− resp1 <- httpLbs req1 mgr
55− resp2 <- httpLbs req2 mgr
56− return $ resp1 == resp2
55+ r <- quickCheckWithResult args $ monadicIO $ forAllM reqs $ \(req1, req2) -> do
56+ resp1 <- run $ httpLbs req1 defManager
57+ resp2 <- run $ httpLbs req2 defManager
58+ assert $ resp1 == resp2
59+ case r of
60+ Success {} -> return ()
61+ GaveUp { numTests = n } -> expectationFailure $ "Gave up after " ++ show n ++ " tests"
62+ Failure { output = m } -> expectationFailure $ "Failed:\n" ++ show m
63+ NoExpectedFailure {} -> expectationFailure $ "No expected failure"
64+ InsufficientCoverage {} -> expectationFailure $ "Insufficient coverage"
5765
66+defManager :: Manager
67+defManager = unsafePerformIO $ newManager defaultManagerSettings
68+{-# NOINLINE defManager #-}
5869
test/Servant/QuickCheck/InternalSpec.hs+2−4
@@ -23,11 +23,9 @@ serversEqualSpec :: Spec
2323serversEqualSpec = describe "serversEqual" $ do
2424
2525 it "considers equal servers equal" $ do
26− mgr <- newManager defaultManagerSettings
2726 withServantServer api server $ \burl1 ->
2827 withServantServer api server $ \burl2 -> do
29− return $ serversEqual api burl1 burl2 mgr
30−
28+ serversEqual api burl1 burl2 stdArgs { maxSuccess = 10000 }
3129
3230
3331
@@ -44,7 +42,7 @@ api = Proxy
4442server :: IO (Server API)
4543server = do
4644 mvar <- newMVar ""
47− return $ (\x -> liftIO $ print 'a' >> swapMVar mvar x)
45+ return $ (\x -> liftIO $ swapMVar mvar x)
4846 :<|> (liftIO $ readMVar mvar >>= return . length)
4947
5048
test/Spec.hs+1−1
@@ -1 +1 @@
1−{-# OPTIONS_GHC -F -pgmF hspec-discover -optF --module-name=Spec #-}
1+{-# OPTIONS_GHC -F -pgmF hspec-discover #-}