@@ -9,6 +9,7 @@ module Tests.Properties.Transcoding
99import Control.Applicative ((<$>) , (<*>) )
1010import Data.Bits ((.&.) , shiftR )
1111import Data.Char (chr , ord )
12+ import Data.Text.Encoding (encodeUtf8Builder , encodeUtf8BuilderEscaped )
1213import Data.Text.Encoding.Error (UnicodeException )
1314import Data.Text.Internal.Encoding.Utf8 (ord2 , ord3 , ord4 )
1415import Test.QuickCheck hiding ((.&.) )
@@ -19,6 +20,9 @@ import Tests.QuickCheckUtils
1920import qualified Control.Exception as Exception
2021import qualified Data.Bits as Bits (shiftL , shiftR )
2122import qualified Data.ByteString as B
23+ import qualified Data.ByteString.Builder as B
24+ import qualified Data.ByteString.Builder.Extra as B
25+ import qualified Data.ByteString.Builder.Prim as BP
2226import qualified Data.ByteString.Char8 as BC
2327import qualified Data.ByteString.Lazy as BL
2428import qualified Data.ByteString.Lazy.Char8 as BLC
@@ -49,6 +53,26 @@ tl_utf32LE = (EL.decodeUtf32LE . EL.encodeUtf32LE) `eq` id
4953t_utf32BE = (E. decodeUtf32BE . E. encodeUtf32BE) `eq` id
5054tl_utf32BE = (EL. decodeUtf32BE . EL. encodeUtf32BE) `eq` id
5155
56+ runBuilder :: B. Builder -> B. ByteString
57+ runBuilder =
58+ -- Use smallish buffers to exercise bufferFull case as well
59+ BL. toStrict . B. toLazyByteStringWith (B. safeStrategy 5 5 ) " "
60+
61+ t_encodeUtf8Builder_ toBuilder = (runBuilder . toBuilder) `eq` E. encodeUtf8
62+
63+ t_encodeUtf8Builder_nonZeroOffset_ toBuilder (Positive n) =
64+ (runBuilder . toBuilder . T. drop n) `eq` (E. encodeUtf8 . T. drop n)
65+
66+ t_encodeUtf8Builder = t_encodeUtf8Builder_ E. encodeUtf8Builder
67+ t_encodeUtf8Builder_nonZeroOffset = t_encodeUtf8Builder_nonZeroOffset_ E. encodeUtf8Builder
68+
69+ t_encodeUtf8BuilderEscaped = t_encodeUtf8Builder_ (E. encodeUtf8BuilderEscaped (BP. liftFixedToBounded BP. word8))
70+ t_encodeUtf8BuilderEscaped_nonZeroOffset = t_encodeUtf8Builder_nonZeroOffset_ (E. encodeUtf8BuilderEscaped (BP. liftFixedToBounded BP. word8))
71+
72+ t_encodeUtf8Builder_sanity t =
73+ (runBuilder . E. encodeUtf8Builder) t ===
74+ (runBuilder . E. encodeUtf8BuilderEscaped (BP. liftFixedToBounded BP. word8)) t
75+
5276t_utf8_incr (Positive n) =
5377 (T. concat . map fst . feedChunksOf n E. streamDecodeUtf8 . E. encodeUtf8) `eq` id
5478
@@ -207,6 +231,13 @@ testTranscoding =
207231 testProperty " tl_utf32LE" tl_utf32LE,
208232 testProperty " t_utf32BE" t_utf32BE,
209233 testProperty " tl_utf32BE" tl_utf32BE,
234+ testGroup " builder" [
235+ testProperty " t_encodeUtf8Builder" t_encodeUtf8Builder,
236+ testProperty " t_encodeUtf8Builder_nonZeroOffset" t_encodeUtf8Builder_nonZeroOffset,
237+ testProperty " t_encodeUtf8BuilderEscaped" t_encodeUtf8BuilderEscaped,
238+ testProperty " t_encodeUtf8BuilderEscaped_nonZeroOffset" t_encodeUtf8BuilderEscaped_nonZeroOffset,
239+ testProperty " t_encodeUtf8Builder_sanity" t_encodeUtf8Builder_sanity
240+ ],
210241 testGroup " errors" [
211242 testProperty " t_utf8_err" t_utf8_err,
212243 testProperty " t_utf8_err'" t_utf8_err'
0 commit comments