packages feed

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 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 #-}