~ubuntu-branches/ubuntu/trusty/haskell-cereal-conduit/trusty

« back to all changes in this revision

Viewing changes to Test/CerealConduit.hs

  • Committer: Package Import Robot
  • Author(s): Clint Adams
  • Date: 2012-05-15 15:19:14 UTC
  • mfrom: (1.1.1)
  • Revision ID: package-import@ubuntu.com-20120515151914-tltxpreo00ysd295
Tags: 0.0.5-1
New upstream version.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
module Test.CerealConduit (tests) where
 
2
 
 
3
import Control.Monad.Identity
 
4
import Test.HUnit
 
5
import qualified Data.Conduit as C
 
6
import Data.Conduit.Cereal
 
7
import Data.Conduit.List
 
8
import Data.Serialize
 
9
import qualified Data.ByteString as BS
 
10
import Test.Framework.Providers.HUnit
 
11
import System.Exit
 
12
import Data.Word
 
13
 
 
14
sinktest1 :: Test
 
15
sinktest1 = TestCase (assertEqual "Handles starting with empty bytestring"
 
16
  (Right 1)
 
17
  (runIdentity $ (sourceList [BS.pack [], BS.pack [1]]) C.$$ (sinkGet getWord8)))
 
18
 
 
19
sinktest2 :: Test
 
20
sinktest2 = TestCase (assertEqual "Handles empty bytestring in middle"
 
21
  (Right [1, 3])
 
22
  (runIdentity $ (sourceList [BS.pack [1], BS.pack [], BS.pack [3]]) C.$$ (sinkGet (do
 
23
    x <- getWord8
 
24
    y <- getWord8
 
25
    return [x, y]))))
 
26
 
 
27
sinktest3 :: Test
 
28
sinktest3 = TestCase (assertBool "Handles no data"
 
29
  (case (runIdentity $ (sourceList []) C.$$ (sinkGet getWord8)) of
 
30
    Right _ -> False
 
31
    Left _ -> True))
 
32
 
 
33
sinktest4 :: Test
 
34
sinktest4 = TestCase (assertEqual "Consumes no data"
 
35
  (Right ())
 
36
  (runIdentity $ (sourceList [BS.pack [1]]) C.$$ (sinkGet $ return ())))
 
37
 
 
38
twoItemGet :: Get Word8
 
39
twoItemGet = do
 
40
  x <- getWord8
 
41
  y <- getWord8
 
42
  return $ x + y
 
43
 
 
44
conduittest1 :: Test
 
45
conduittest1 = TestCase (assertEqual "Handles starting with empty bytestring"
 
46
  []
 
47
  (runIdentity $ (sourceList [BS.pack [], BS.pack [1]]) C.$= conduitGet twoItemGet C.$$ consume))
 
48
 
 
49
conduittest2 :: Test
 
50
conduittest2 = TestCase (assertEqual "Works when the get is split across items"
 
51
  [3]
 
52
  (runIdentity $ (sourceList [BS.pack [1], BS.pack [2]]) C.$= conduitGet twoItemGet C.$$ consume))
 
53
 
 
54
conduittest3 :: Test
 
55
conduittest3 = TestCase (assertEqual "Works when empty bytestring in middle of get"
 
56
  [3]
 
57
  (runIdentity $ (sourceList [BS.pack [1], BS.pack [], BS.pack [2]]) C.$= conduitGet twoItemGet C.$$ consume))
 
58
 
 
59
conduittest4 :: Test
 
60
conduittest4 = TestCase (assertEqual "Works when empty bytestring at end of get"
 
61
  [3, 7]
 
62
  (runIdentity $ (sourceList [BS.pack [1, 2], BS.pack [], BS.pack [3, 4]]) C.$= conduitGet twoItemGet C.$$ consume))
 
63
 
 
64
conduittest5 :: Test
 
65
conduittest5 = TestCase (assertEqual "Works when multiple gets are in an item"
 
66
  [3, 7]
 
67
  (runIdentity $ (sourceList [BS.pack [1, 2, 3, 4]]) C.$= conduitGet twoItemGet C.$$ consume))
 
68
 
 
69
conduittest6 :: Test
 
70
conduittest6 = TestCase (assertEqual "Works with leftovers"
 
71
  [3]
 
72
  (runIdentity $ (sourceList [BS.pack [1, 2, 3]]) C.$= conduitGet twoItemGet C.$$ consume))
 
73
 
 
74
sinktests = TestList [sinktest1, sinktest2, sinktest3, sinktest4]
 
75
 
 
76
conduittests = TestList [conduittest1, conduittest2, conduittest3, conduittest4, conduittest5, conduittest6]
 
77
 
 
78
hunittests = TestList [sinktests, conduittests]
 
79
 
 
80
tests = hUnitTestToTests hunittests
 
81
 
 
82
main = do
 
83
  counts <- runTestTT hunittests
 
84
  if errors counts == 0 && failures counts == 0
 
85
    then exitSuccess
 
86
    else exitFailure