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 +7/−0
- src/Data/THGen/XML.hs +6/−4
- test/Main.hs +25/−1
- test/TestDefs.hs +26/−2
- xml-isogen.cabal +29/−9
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