@@ -9,6 +9,7 @@ module Tests.Properties.Transcoding
9
9
import Control.Applicative ((<$>) , (<*>) )
10
10
import Data.Bits ((.&.) , shiftR )
11
11
import Data.Char (chr , ord )
12
+ import Data.Text.Encoding (encodeUtf8Builder , encodeUtf8BuilderEscaped )
12
13
import Data.Text.Encoding.Error (UnicodeException )
13
14
import Data.Text.Internal.Encoding.Utf8 (ord2 , ord3 , ord4 )
14
15
import Test.QuickCheck hiding ((.&.) )
@@ -19,6 +20,9 @@ import Tests.QuickCheckUtils
19
20
import qualified Control.Exception as Exception
20
21
import qualified Data.Bits as Bits (shiftL , shiftR )
21
22
import 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
22
26
import qualified Data.ByteString.Char8 as BC
23
27
import qualified Data.ByteString.Lazy as BL
24
28
import qualified Data.ByteString.Lazy.Char8 as BLC
@@ -49,6 +53,26 @@ tl_utf32LE = (EL.decodeUtf32LE . EL.encodeUtf32LE) `eq` id
49
53
t_utf32BE = (E. decodeUtf32BE . E. encodeUtf32BE) `eq` id
50
54
tl_utf32BE = (EL. decodeUtf32BE . EL. encodeUtf32BE) `eq` id
51
55
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
+
52
76
t_utf8_incr (Positive n) =
53
77
(T. concat . map fst . feedChunksOf n E. streamDecodeUtf8 . E. encodeUtf8) `eq` id
54
78
@@ -207,6 +231,13 @@ testTranscoding =
207
231
testProperty " tl_utf32LE" tl_utf32LE,
208
232
testProperty " t_utf32BE" t_utf32BE,
209
233
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
+ ],
210
241
testGroup " errors" [
211
242
testProperty " t_utf8_err" t_utf8_err,
212
243
testProperty " t_utf8_err'" t_utf8_err'
0 commit comments