Skip to content

Commit d156315

Browse files
alexbiehlLysxia
authored andcommitted
Property test for encodeUtf8Builder
1 parent bdb6483 commit d156315

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

tests/Tests/Properties/Transcoding.hs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ module Tests.Properties.Transcoding
99
import Control.Applicative ((<$>), (<*>))
1010
import Data.Bits ((.&.), shiftR)
1111
import Data.Char (chr, ord)
12+
import Data.Text.Encoding (encodeUtf8Builder, encodeUtf8BuilderEscaped)
1213
import Data.Text.Encoding.Error (UnicodeException)
1314
import Data.Text.Internal.Encoding.Utf8 (ord2, ord3, ord4)
1415
import Test.QuickCheck hiding ((.&.))
@@ -19,6 +20,9 @@ import Tests.QuickCheckUtils
1920
import qualified Control.Exception as Exception
2021
import qualified Data.Bits as Bits (shiftL, shiftR)
2122
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
2226
import qualified Data.ByteString.Char8 as BC
2327
import qualified Data.ByteString.Lazy as BL
2428
import qualified Data.ByteString.Lazy.Char8 as BLC
@@ -49,6 +53,26 @@ tl_utf32LE = (EL.decodeUtf32LE . EL.encodeUtf32LE) `eq` id
4953
t_utf32BE = (E.decodeUtf32BE . E.encodeUtf32BE) `eq` id
5054
tl_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+
5276
t_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

Comments
 (0)