{-# LANGUAGE OverloadedStrings #-}
import Debug.Trace
import Control.Monad (liftM)
import Control.Monad.Trans.Resource (runExceptionT)
import Control.Exception (throw)
import Data.Functor.Identity (runIdentity)
import qualified Data.ByteString.Lazy as L
import qualified Data.Text.Encoding as T
import Data.Aeson (encode)
import Text.XML.ToJSON (xmlToJSON)
import Test.Hspec
toLazy s = L.fromChunks [s]
cases :: [(String, L.ByteString, L.ByteString)]
cases =
[ ( "basic"
, toLazy $ T.encodeUtf8 $
"\
\foo\
\bar road\
\"
, toLazy $ T.encodeUtf8 $
"{\"user\":{\"name\":\"foo\",\"addr\":\"bar road\"}}"
)
, ( "unicode"
, toLazy $ T.encodeUtf8 $
"\n\
\\
\测试\
\bar road\
\"
, toLazy $ T.encodeUtf8 $
"{\"user\":{\"name\":\"测试\",\"addr\":\"bar road\"}}"
)
, ( "array"
, toLazy $ T.encodeUtf8 $
"\
\\
\foo\
\foo road\
\\
\\
\bar\
\bar road\
\\
\\
\test\
\test road\
\\
\"
, toLazy $ T.encodeUtf8 $
"{\"users\":\
\{\"user\":\
\[{\"name\":\"foo\",\"addr\":\"foo road\"}\
\,{\"name\":\"bar\",\"addr\":\"bar road\"}\
\,{\"name\":\"test\",\"addr\":\"test road\"}\
\]\
\}\
\}"
)
]
one (desc, xml, json) =
it desc $
let m = liftM encode (xmlToJSON xml)
in either throw
(==json)
(runIdentity (runExceptionT m))
main :: IO ()
main = hspec $ do
describe "basic cases" $ mapM_ one cases