packages feed

cassava-conduit 0.3.5 → 0.3.5.1

raw patch · 3 files changed

+127/−1 lines, 3 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

Files

cassava-conduit.cabal view
@@ -1,5 +1,5 @@ name:               cassava-conduit-version:            0.3.5+version:            0.3.5.1 license:            BSD3 license-file:       etc/LICENCE.md author:             Dom De Re@@ -55,6 +55,9 @@     type:               exitcode-stdio-1.0     main-is:            Main.hs     hs-source-dirs:     quickcheck+    other-modules:      Test.Arbitrary+                        Test.Data.Csv.Conduit+     build-depends:      base                >= 4 && < 5                       , bytestring          == 0.10.*                       , cassava             == 0.4.*
+ quickcheck/Test/Arbitrary.hs view
@@ -0,0 +1,60 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+-------------------------------------------------------------------+-- |+-- Module       : Test.Arbitrary+-- Copyright    : (C) 2016+-- License      : BSD-style (see the file etc/LICENSE.md)+-- Maintainer   : Dom De Re+--+-------------------------------------------------------------------+module Test.Arbitrary (+  -- * Generators+    intCsvNoTrailingNewline+  , intCsvTrailingNewline+  , diceIt+  ) where++import Control.Monad (replicateM)++import qualified Data.ByteString as BS+import qualified Data.Text as T+import qualified Data.Text.Encoding as T++import Test.QuickCheck (Arbitrary(..))+import Test.QuickCheck.Gen (Gen, choose)++import Prelude++intColumns :: Int -> Gen [Int]+intColumns s = replicateM s arbitrary++intCsvNoTrailingNewlineText :: Gen (Int, T.Text)+intCsvNoTrailingNewlineText = do+  colSize <- choose (1, 30)+  numRows <- choose (0, 150)+  rows <- replicateM numRows (intColumns colSize)+  let t = T.intercalate "\n" . fmap (T.intercalate "," . fmap (T.pack . show)) $ rows+  pure (numRows, t)++intCsvNoTrailingNewline :: Gen (Int, BS.ByteString)+intCsvNoTrailingNewline = fmap T.encodeUtf8 <$> intCsvNoTrailingNewlineText++intCsvTrailingNewline :: Gen (Int, BS.ByteString)+intCsvTrailingNewline =+  fmap (T.encodeUtf8 . flip T.snoc '\n') <$> intCsvNoTrailingNewlineText++diceIt :: Gen (a, BS.ByteString) -> Gen (a, [BS.ByteString])+diceIt g =+  let+    diceIt' :: BS.ByteString -> Gen [BS.ByteString]+    diceIt' "" = pure []+    diceIt' bs = do+      chunkSize <- choose (3, 50)+      let (chunk, remainder) = (BS.take chunkSize bs, BS.drop chunkSize bs)+      (chunk :) <$> diceIt' remainder+  in do+    (rows, bs) <- g+    ((,) rows) <$> diceIt' bs++
+ quickcheck/Test/Data/Csv/Conduit.hs view
@@ -0,0 +1,63 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE TemplateHaskell #-}+-------------------------------------------------------------------+-- |+-- Module       : Test.Data.Csv.Conduit+-- Copyright    : (C) 2016+-- License      : BSD-style (see the file etc/LICENSE.md)+-- Maintainer   : Dom De Re+--+-------------------------------------------------------------------+module Test.Data.Csv.Conduit where++import Data.Csv.Conduit++import qualified Data.ByteString as BS+import Data.Csv (HasHeader(..), defaultDecodeOptions)+import Data.Conduit (($$), (=$=))+import Data.Conduit.List (sourceList, consume)+import Data.Functor ((<$>))+import Data.List (length)++import Control.Applicative (pure)+import Control.Monad (return)++import Test.Arbitrary (+    intCsvNoTrailingNewline+  , intCsvTrailingNewline+  , diceIt+  )++import Test.QuickCheck (Property, (===), forAll, quickCheckAll)+import Test.QuickCheck.Gen (Gen)++import Prelude (+    IO+  , Bool(..)+  , Either+  , Int+  , ($)+  )++parsesAllRows :: Gen (Int, BS.ByteString) -> Property+parsesAllRows g =+  forAll (diceIt g) $ \(expectedRows, chunks) ->+    let+      result :: Either CsvParseError [[Int]]+      result =+            sourceList chunks+        $$  fromCsv defaultDecodeOptions NoHeader+        =$= consume+    in (length <$> result) === pure expectedRows++prop_parsesAllRowsWithNewline :: Property+prop_parsesAllRowsWithNewline =+  parsesAllRows intCsvTrailingNewline++prop_parsesAllRowsWithNoNewline :: Property+prop_parsesAllRowsWithNoNewline =+  parsesAllRows intCsvNoTrailingNewline++return []+tests :: IO Bool+tests = $quickCheckAll