1{- 2Copyright (C) 2006-2011 John Goerzen <jgoerzen@complete.org> 3 4All rights reserved. 5 6For license and copyright information, see the file LICENSE 7-} 8 9module ProgressTrackertest(tests) where 10import Data.Progress.Tracker 11import Test.HUnit 12import Control.Concurrent.MVar 13 14setup = 15 do timem <- newMVar 0 16 let timesource = readMVar timem 17 po <- newProgress' (ProgressStatus 0 100 0 "" timesource) [] 18 return (po, timem) 19 20settime timem newval = swapMVar timem newval >> return () 21 22test_incrP = 23 do (po, timem) <- setup 24 incrP po 5 25 withStatus po $ \s -> 26 do assertEqual "completedUnits" 5 (completedUnits s) 27 assertEqual "totalUnits" 100 (totalUnits s) 28 incrP po 95 29 withStatus po $ \s -> 30 do assertEqual "completedUnits" 100 (completedUnits s) 31 assertEqual "totalUnits" 100 (totalUnits s) 32 incrP po 5 33 withStatus po $ \s -> 34 do assertEqual "completedUnits" 105 (completedUnits s) 35 assertEqual "totalUnits" 105 (totalUnits s) 36 incrP' po 5 37 withStatus po $ \s -> 38 do assertEqual "completedUnits" 110 (completedUnits s) 39 assertEqual "totalUnits" 105 (totalUnits s) 40 incrTotal po 10 41 withStatus po $ \s -> 42 do 110 @=? completedUnits s 43 115 @=? totalUnits s 44 45test_setP = 46 do (po, timem) <- setup 47 setP po 5 48 withStatus po $ \s -> 49 do 5 @=? completedUnits s 50 100 @=? totalUnits s 51 setP po 100 52 withStatus po $ \s -> 53 do 100 @=? completedUnits s 54 100 @=? totalUnits s 55 setP po 105 56 withStatus po $ \s -> 57 do 105 @=? completedUnits s 58 105 @=? totalUnits s 59 setP' po 110 60 withStatus po $ \s -> 61 do 110 @=? completedUnits s 62 105 @=? totalUnits s 63 setTotal po 115 64 withStatus po $ \s -> 65 do 110 @=? completedUnits s 66 115 @=? totalUnits s 67 68test_speed = 69 do (po, timem) <- setup 70 getSpeed po >>= assertEqual "initial speed" 0 71 getETR po >>= assertEqual "initial ETR" 0 72 getETA po >>= assertEqual "initial ETA" 0 73 74 incrP po 10 75 getSpeed po >>= assertEqual "speed after incr" 0 76 getETR po >>= assertEqual "ETR after incr" 0 77 getETA po >>= assertEqual "ETA after incr" 0 78 79 settime timem 5 80 getSpeed po >>= assertEqual "first speed" 2.0 81 getETR po >>= assertEqual "first ETR" 45 82 getETA po >>= assertEqual "first ETA" 50 83 84 incrP po 90 85 getSpeed po >>= assertEqual "speed 2" 20.0 86 getETR po >>= assertEqual "etr 2" 0 87 getETA po >>= assertEqual "eta 2" 5 88 89 settime timem 400 90 setP po 90 91 getSpeed po >>= assertEqual "speed 3" 0.225 92 getETR po >>= assertEqual "etr 2" 44 93 getETA po >>= assertEqual "eta 2" 444 94 95test_callback = 96 do (po, _) <- setup 97 mcounter <- newMVar (0::Int) 98 mcounter1 <- newMVar (0::Int) 99 mcounter2 <- newMVar (0::Int) 100 (po2, _) <- setup 101 (po3, _) <- setup 102 103 addCallback po (minc mcounter) 104 addParent po po2 105 incrP po 5 106 readMVar mcounter >>= assertEqual "cb1" 1 107 withStatus po (\x -> 5 @=? completedUnits x) 108 withStatus po2 (\x -> do 5 @=? completedUnits x 109 200 @=? totalUnits x) 110 111 addCallback po2 (minc mcounter2) 112 incrP po 100 113 readMVar mcounter2 >>= (\x -> assertBool "cb2" (0 /= x)) 114 withStatus po2 (\x -> do 105 @=? completedUnits x 115 205 @=? totalUnits x) 116 117 incrP' po 5 118 withStatus po2 (\x -> do 110 @=? completedUnits x 119 205 @=? totalUnits x) 120 121 finishP po 122 withStatus po2 (\x -> do 110 @=? completedUnits x 123 210 @=? totalUnits x) 124 125 126 where minc mv _ _ = modifyMVar_ mv (\x -> return $ x + 1) 127 128tests = TestList [TestLabel "incrP" (TestCase test_incrP), 129 TestLabel "setP" (TestCase test_setP), 130 TestLabel "speed" (TestCase test_speed), 131 TestLabel "test_callback" (TestCase test_callback)] 132 133 134 135