Skip to content

Commit 8120c1c

Browse files
committed
Added more quickcheck testing.
1 parent b6dbd4d commit 8120c1c

File tree

2 files changed

+29
-16
lines changed

2 files changed

+29
-16
lines changed

json-stream.cabal

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,7 @@ library
4141
, vector
4242
, unordered-containers
4343
, scientific
44-
, QuickCheck
45-
, quickcheck-unicode
46-
44+
4745
default-language: Haskell2010
4846

4947

test/UnescapeSpec.hs

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,20 @@
22

33
module UnescapeSpec where
44

5-
import Data.Text.Encoding (encodeUtf8)
6-
import qualified Data.Text as T
7-
import Data.Either (isLeft)
8-
import qualified Data.ByteString as BS
9-
import qualified Data.ByteString.Lazy as BSL
10-
import qualified Data.Aeson as AE
5+
import Control.Applicative ((<$>))
6+
import qualified Data.Aeson as AE
7+
import qualified Data.ByteString as BS
8+
import qualified Data.ByteString.Char8 as BSC
9+
import qualified Data.ByteString.Lazy as BSL
10+
import Data.Either (isLeft)
11+
import qualified Data.Text as T
12+
import Data.Text.Encoding (encodeUtf16BE, encodeUtf8)
13+
import Numeric (showHex)
1114

12-
import Test.QuickCheck
13-
import Test.Hspec
14-
import Data.JsonStream.Unescape
15-
import qualified Test.QuickCheck.Unicode as QUNI
15+
import Data.JsonStream.Unescape
16+
import Test.Hspec
17+
import Test.QuickCheck
18+
import qualified Test.QuickCheck.Unicode as QUNI
1619

1720
spec :: Spec
1821
spec = do
@@ -52,11 +55,23 @@ spec = do
5255
let txt = "žluťoučký kůň úpěl ďábelské kódy" :: T.Text
5356
unescapeText (BS.drop 1 $ encodeUtf8 txt) `shouldSatisfy` isLeft
5457

55-
describe "It correctly decodes aeson encoded string" $
56-
it "QuickCheck with aeson encode" $ do
58+
describe "It correctly decodes aeson encoded string" $ do
59+
it "QuickCheck with aeson encode - standard UTF8" $ do
5760
let check txt =
5861
let encoded = BS.init $ BS.tail (BS.concat $ BSL.toChunks $ AE.encode (AE.String txt))
59-
in unescapeText encoded `shouldBe ` Right txt
62+
in unescapeText encoded `shouldBe` Right txt
63+
deepCheck check
64+
it "QuickCheck with aeson encode - \\u encoded data" $ do
65+
let check txt = -- Convert everything to \\uXXXX notation
66+
let u16chars = BS.concat $ map ((BS.append "\\u" . btohex) . BS.take 2)
67+
$ take (BS.length u16 `div` 2)
68+
$ iterate (BS.drop 2) u16
69+
u16 = encodeUtf16BE txt
70+
btohex cb = BSC.pack $ concatMap tohex $ BS.unpack cb
71+
tohex c
72+
| c < 16 = "0" ++ showHex c ""
73+
| otherwise = showHex c ""
74+
in unescapeText u16chars `shouldBe` Right txt
6075
deepCheck check
6176

6277
deepCheck :: (T.Text -> Expectation) -> IO ()

0 commit comments

Comments
 (0)