ast-monad-json 0.1.0.0 → 0.1.0.1
raw patch · 4 files changed
+74/−3 lines, 4 filesdep +hspecPVP ok
version bump matches the API change (PVP)
Dependencies added: hspec
API changes (from Hackage documentation)
Files
- README.md +37/−0
- ast-monad-json.cabal +4/−1
- test/Language/ASTMonad/Json/RendererSpec.hs +32/−0
- test/Spec.hs +1/−2
README.md view
@@ -1,2 +1,39 @@ # ast-monad-json A library for writing JSON++## Example+```Haskell+{-# LANGUAGE OverloadedStrings #-}+module Main where++import Language.ASTMonad+import Language.ASTMonad.Json+import Language.ASTMonad.Json.Renderer+import qualified Data.Text.Lazy.IO as TL+import qualified Data.Text.Lazy.Builder as TB++data Parameter = Parameter { px :: Int, py :: Int }++jsonCode :: Json Parameter+jsonCode = do+ "id1" `is` "val1"+ "id2" `is` "val2"+ "flag" `isBool` True+ "point" `isArray` do+ x <- getParam px+ y <- getParam py+ "px" `isNum` x+ "py" `isNum` y++main :: IO ()+main = do+ let param = Parameter { px = 123, py = 456 }+ TL.putStrLn $ TB.toLazyText $ renderJson $ buildAST jsonCode param JsonEnvironment+```++The execution result of the above code is++```+{"id1":"val1","id2":"val2","flag":true,"point":{"px":123,"py":456}}+```+
ast-monad-json.cabal view
@@ -1,5 +1,5 @@ name: ast-monad-json-version: 0.1.0.0+version: 0.1.0.1 synopsis: A library for writing JSON -- description: homepage: https://github.com/mkdag/ast-monad-json#readme@@ -26,9 +26,12 @@ type: exitcode-stdio-1.0 hs-source-dirs: test main-is: Spec.hs+ other-modules: Language.ASTMonad.Json.RendererSpec build-depends: base , ast-monad , ast-monad-json+ , text+ , hspec ghc-options: -threaded -rtsopts -with-rtsopts=-N default-language: Haskell2010
+ test/Language/ASTMonad/Json/RendererSpec.hs view
@@ -0,0 +1,32 @@+{-# LANGUAGE OverloadedStrings #-}+module Language.ASTMonad.Json.RendererSpec+ ( spec+ ) where++import Test.Hspec+import Language.ASTMonad.Json+import Language.ASTMonad.Json.Renderer+import qualified Data.Text.Lazy as TL+import qualified Data.Text.Lazy.Builder as TB++f :: Json() -> TL.Text+f jsonCode = TB.toLazyText $ renderJson $ buildAST jsonCode () JsonEnvironment++spec :: Spec+spec = do+ describe "Language.ASTMonad.Json.Renderer.renderJson" $ do+ context "when JsonString" $ do+ it "should return \"str1\":\"str2\"" $ do+ (f $ "id1" `is` "val1") `shouldBe` "{\"id1\":\"val1\"}"+ context "when JsonNumber" $ do+ it "should return \"str\":num" $ do+ (f $ "num1" `isNum` 123) `shouldBe` "{\"num1\":123}"+ context "when JsonBool" $ do+ it "should return \"str\":true or \"str\":false" $ do+ (f $ "flag" `isBool` True) `shouldBe` "{\"flag\":true}"+ (f $ "flag" `isBool` False) `shouldBe` "{\"flag\":false}"+ context "when JsonArray" $ do+ it "should return \"str\":{..}" $ do+ (f $ "array" `isArray` do+ "id1" `is` "val1") `shouldBe` "{\"array\":{\"id1\":\"val1\"}}"+
test/Spec.hs view
@@ -1,2 +1,1 @@-main :: IO ()-main = putStrLn "Test suite not yet implemented"+{-# OPTIONS_GHC -F -pgmF hspec-discover #-}