Repository : ssh://darcs.haskell.org//srv/darcs/packages/bytestring

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/023e95ff9dac7d0ac30b6e8c8d8d2cff744b366f

>---------------------------------------------------------------

commit 023e95ff9dac7d0ac30b6e8c8d8d2cff744b366f
Author: Duncan Coutts <[email protected]>
Date:   Wed Nov 16 23:29:20 2011 +0000

    Make the testHandlePutBuilder conditional and add char8 version
    The testHandlePutBuilder does not apply to older ghc with the pre-Unicode
    Handles. Extra char8 test covers old ghc and should work with new too.

>---------------------------------------------------------------

 .../builder/Data/ByteString/Lazy/Builder/Tests.hs  |   41 ++++++++++++++++++++
 1 files changed, 41 insertions(+), 0 deletions(-)

diff --git a/tests/builder/Data/ByteString/Lazy/Builder/Tests.hs 
b/tests/builder/Data/ByteString/Lazy/Builder/Tests.hs
index 04fd7e7..2b6e67a 100644
--- a/tests/builder/Data/ByteString/Lazy/Builder/Tests.hs
+++ b/tests/builder/Data/ByteString/Lazy/Builder/Tests.hs
@@ -51,7 +51,10 @@ import           Test.QuickCheck.Property (printTestCase)
 tests :: [Test]
 tests =
   [ testBuilderRecipe
+#if MIN_VERSION_base(4,2,0)
   , testHandlePutBuilder
+#endif
+  , testHandlePutBuilderChar8
   , testPut
   ] ++
   testsEncodingToBuilder ++
@@ -82,6 +85,7 @@ testBuilderRecipe =
           , "diff  : " ++ show (dropWhile (uncurry (==)) $ zip x1 x2)
           ]
 
+#if MIN_VERSION_base(4,2,0)
 testHandlePutBuilder :: Test
 testHandlePutBuilder =
     testProperty "hPutBuilder" testRecipe
@@ -117,6 +121,43 @@ testHandlePutBuilder =
             success = lbs == lbsRef
         unless success (error msg)
         return success
+#endif
+
+testHandlePutBuilderChar8 :: Test
+testHandlePutBuilderChar8 =
+    testProperty "char8 hPutBuilder" testRecipe
+  where
+    testRecipe :: (String, String, String, Recipe) -> Bool
+    testRecipe args@(before, between, after, recipe) = unsafePerformIO $ do
+        tempDir <- getTemporaryDirectory
+        (tempFile, tempH) <- openTempFile tempDir "TestBuilder"
+        -- switch to binary / latin1 encoding
+        hSetBinaryMode tempH True
+        -- output recipe with intermediate direct writing to handle
+        let b = fst $ recipeComponents recipe
+        hPutStr tempH before
+        hPutBuilder tempH b
+        hPutStr tempH between
+        hPutBuilder tempH b
+        hPutStr tempH after
+        hClose tempH
+        -- read file
+        lbs <- L.readFile tempFile
+        _ <- evaluate (L.length $ lbs)
+        removeFile tempFile
+        -- compare to pure builder implementation
+        let lbsRef = toLazyByteString $ mconcat
+              [string8 before, b, string8 between, b, string8 after]
+        -- report
+        let msg = unlines
+              [ "task:     " ++ show args
+              , "via file: " ++ show lbs
+              , "direct :  " ++ show lbsRef
+              -- , "diff  : " ++ show (dropWhile (uncurry (==)) $ zip x1 x2)
+              ]
+            success = lbs == lbsRef
+        unless success (error msg)
+        return success
 
 
 -- Recipes with which to test the builder functions



_______________________________________________
Cvs-libraries mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-libraries

Reply via email to