packages feed

xml-isogen 0.2.0 → 0.2.1

raw patch · 5 files changed

+93/−16 lines, 5 filesdep +data-defaultdep +generic-arbitrarydep +hspecdep ~QuickCheckdep ~dom-parserdep ~semigroups

Dependencies added: data-default, generic-arbitrary, hspec, quickcheck-instances

Dependency ranges changed: QuickCheck, dom-parser, semigroups, xml-conduit, xml-conduit-writer

Files

CHANGELOG.md view
@@ -1,3 +1,10 @@+0.2.1+------++* Workaround for the GHC 8.2.1 attribute generation bug++* Add tests checking run-time behaviour of generated code+ 0.2.0 ------- 
src/Data/THGen/XML.hs view
@@ -392,7 +392,8 @@             XmlFieldPluralMandatory  -> [e|id|]             _                        -> [e|traverse|]           exprFieldValue   = [e|$(TH.varE fName) $(TH.varE objName)|]-          exprFieldRender  = [e|mkElement $exprFieldStrName|]+          exprFieldRender  =+            [e|(\a -> XW.elementA $exprFieldStrName (toXmlParentAttributes a) a)|]         return [e|$exprForField $exprFieldRender $exprFieldValue|]       toXmlExpr         = TH.lamE [if null exprFields then TH.wildP else TH.varP objName]@@ -422,16 +423,17 @@       toXmlParentAttributesExpr         = TH.lamE [if null exprAttributes then TH.wildP else TH.varP objName]         $ [e|mapMaybe distribPair $(TH.listE exprAttributes)|]+#if __GLASGOW_HASKELL__ < 800     TH.instanceD+#else+    TH.instanceWithOverlapD (Just TH.Overlapping)+#endif       (return [])       [t|ToXmlParentAttributes $(TH.conT name)|]       [funSimple 'toXmlParentAttributes toXmlParentAttributesExpr]    return $ [dataDecl] ++ lensDecls ++     [fromDomInst, toXmlInst, toXmlParentAttributesInst]--mkElement :: (XW.ToXML a, ToXmlParentAttributes a) => X.Name -> a -> XW.XML-mkElement name a = XW.elementA name (toXmlParentAttributes a) a  distribPair :: Functor f => (a, f b) -> f (a, b) distribPair (a, fb) = (a,) <$> fb
test/Main.hs view
@@ -1,7 +1,31 @@ {-# OPTIONS -fno-warn-unused-imports #-} module Main where +import Control.Exception+import Text.XML+import Data.Default+import System.IO.Unsafe+import Test.Hspec+import Test.Hspec.QuickCheck+import Test.QuickCheck import TestDefs+import Text.XML.DOM.Parser+import Text.XML.Writer +isomorphicFoo :: XmlRoot -> Property+isomorphicFoo a = a === isogen+  where+    isogen :: XmlRoot+    isogen =+      let+        doc = document "Root" $ toXML a+        res = case runDomParser doc fromDom of+          Left e -> unsafePerformIO $ do+            pprint doc+            throwIO e+          Right a' -> a'+      in res+ main :: IO ()-main = return ()+main = hspec $ do+  prop "isomorphic" isomorphicFoo
test/TestDefs.hs view
@@ -1,12 +1,14 @@ {-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE TemplateHaskell #-}  {-# OPTIONS -ddump-splices #-}  module TestDefs where +import Data.List.NonEmpty import Data.THGen.XML+import GHC.Generics (Generic)+import Test.QuickCheck.Arbitrary.Generic+import Test.QuickCheck.Instances ()  "Bar" =:= enum   & "baroque"@@ -25,3 +27,25 @@   + "Bar"   ? "Baz" [t|Text|]   !% "Quux"+  ?% "Muux" [t|XmlQuux|]++"Root" =:= record+  ! "Foo"++deriving instance Generic XmlRoot++instance Arbitrary XmlRoot where+  arbitrary = genericArbitrary+  shrink = genericShrink++deriving instance Generic XmlFoo++instance Arbitrary XmlFoo where+  arbitrary = genericArbitrary+  shrink = genericShrink++#if __GLASGOW_HASKELL__ < 800+instance Arbitrary (NonEmpty XmlBar) where+  arbitrary = genericArbitrary+  shrink = genericShrink+#endif
xml-isogen.cabal view
@@ -1,5 +1,5 @@ name:                xml-isogen-version:             0.2.0+version:             0.2.1 synopsis:            Generate XML-isomorphic types description:     TemplateHaskell generators for XML-isomorphic data types, including@@ -28,8 +28,8 @@  library   exposed-modules:     Data.THGen.Enum-                       Data.THGen.XML-                       Text.XML.ParentAttributes+                     , Data.THGen.XML+                     , Text.XML.ParentAttributes   other-modules:       Data.THGen.Compat   build-depends:       QuickCheck >= 2.8                      , base >=4.8 && <5@@ -45,17 +45,37 @@   hs-source-dirs:      src    default-language:    Haskell2010-  default-extensions:  TemplateHaskell-                       LambdaCase-                       FlexibleInstances-                       TypeFamilies-                       TupleSections+  default-extensions:  CPP+                     , FlexibleInstances+                     , LambdaCase+                     , TemplateHaskell+                     , TupleSections+                     , TypeFamilies  test-suite spec   type:               exitcode-stdio-1.0   hs-source-dirs:     test   main-is:            Main.hs   other-modules:      TestDefs-  build-depends:      base, xml-isogen+  build-depends:      base+                    , QuickCheck+                    , data-default+                    , dom-parser+                    , generic-arbitrary+                    , hspec+                    , quickcheck-instances+                    , semigroups+                    , xml-conduit+                    , xml-conduit-writer+                    , xml-isogen   default-language:   Haskell2010+  default-extensions:  CPP+                     , DeriveGeneric+                     , FlexibleInstances+                     , LambdaCase+                     , OverloadedStrings+                     , StandaloneDeriving+                     , TemplateHaskell+                     , TupleSections+                     , TypeFamilies   ghc-options:        -Wall -fno-warn-missing-signatures