diff options
author | Griffin Smith <root@gws.fyi> | 2019-09-01T17·54-0400 |
---|---|---|
committer | Griffin Smith <root@gws.fyi> | 2019-09-01T17·54-0400 |
commit | 2fd3e4c9ad28b77a0d167ceefe879ca80ee1ee04 (patch) | |
tree | 5eff1afdc250b733d8a001b6524afef49a062759 /test/Xanthous | |
parent | 4ef19aa35a6d63a8d9f7b6a7a11ac82c2a525783 (diff) |
Implement messages
Implement messages almost the same as in the Rust version, only with YAML instead of TOML this time, and a regular old mustache template instead of something handrolled. Besides that, pretty much everything here is the same.
Diffstat (limited to 'test/Xanthous')
-rw-r--r-- | test/Xanthous/MessageSpec.hs | 53 | ||||
-rw-r--r-- | test/Xanthous/OrphansSpec.hs | 31 |
2 files changed, 84 insertions, 0 deletions
diff --git a/test/Xanthous/MessageSpec.hs b/test/Xanthous/MessageSpec.hs new file mode 100644 index 000000000000..b681e537efe6 --- /dev/null +++ b/test/Xanthous/MessageSpec.hs @@ -0,0 +1,53 @@ +{-# LANGUAGE OverloadedLists #-} +module Xanthous.MessageSpec ( main, test ) where + +import Test.Prelude +import Xanthous.Messages +import Data.Aeson +import Text.Mustache +import Control.Lens.Properties + +main :: IO () +main = defaultMain test + +test :: TestTree +test = testGroup "Xanthous.Messages" + [ testGroup "Message" + [ testGroup "JSON decoding" + [ testCase "Single" + $ decode "\"Test Single Template\"" + @?= Just (Single + $ compileMustacheText "template" "Test Single Template" + ^?! _Right) + , testCase "Choice" + $ decode "[\"Choice 1\", \"Choice 2\"]" + @?= Just + (Choice + [ compileMustacheText "template" "Choice 1" ^?! _Right + , compileMustacheText "template" "Choice 2" ^?! _Right + ]) + ] + ] + , localOption (QuickCheckTests 50) + . localOption (QuickCheckMaxSize 10) + $ testGroup "MessageMap" + [ testGroup "instance Ixed" + [ testProperty "traversal laws" $ \k -> + isTraversal $ ix @MessageMap k + , testCase "preview when exists" $ + let + Right tpl = compileMustacheText "foo" "bar" + msg = Single tpl + mm = Nested $ [("foo", Direct msg)] + in mm ^? ix ["foo"] @?= Just msg + ] + , testGroup "lookupMessage" + [ testProperty "is equivalent to preview ix" $ \msgMap path -> + lookupMessage path msgMap === msgMap ^? ix path + ] + ] + + , testGroup "Messages" + [ testCase "are all valid" $ messages `deepseq` pure () + ] + ] diff --git a/test/Xanthous/OrphansSpec.hs b/test/Xanthous/OrphansSpec.hs new file mode 100644 index 000000000000..3fe79ee56313 --- /dev/null +++ b/test/Xanthous/OrphansSpec.hs @@ -0,0 +1,31 @@ +{-# LANGUAGE BlockArguments #-} +module Xanthous.OrphansSpec where + +import Test.Prelude +import Xanthous.Orphans +import Text.Mustache +import Text.Megaparsec (errorBundlePretty) + +import Xanthous.Orphans () + +main :: IO () +main = defaultMain test + +test :: TestTree +test = testGroup "Xanthous.Orphans" + [ localOption (QuickCheckTests 50) + . localOption (QuickCheckMaxSize 10) + $ testGroup "Template" + [ testProperty "ppTemplate / compileMustacheText " \tpl -> + let src = ppTemplate tpl + res :: Either String Template + res = over _Left errorBundlePretty + $ compileMustacheText (templateActual tpl) src + expected = templateCache tpl ^?! at (templateActual tpl) + in + counterexample (unpack src) + $ Right expected === do + (Template actual cache) <- res + maybe (Left "Template not found") Right $ cache ^? at actual + ] + ] |