From 2fd3e4c9ad28b77a0d167ceefe879ca80ee1ee04 Mon Sep 17 00:00:00 2001 From: Griffin Smith Date: Sun, 1 Sep 2019 13:54:27 -0400 Subject: 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. --- test/Spec.hs | 4 ++++ test/Xanthous/MessageSpec.hs | 53 ++++++++++++++++++++++++++++++++++++++++++++ test/Xanthous/OrphansSpec.hs | 31 ++++++++++++++++++++++++++ 3 files changed, 88 insertions(+) create mode 100644 test/Xanthous/MessageSpec.hs create mode 100644 test/Xanthous/OrphansSpec.hs (limited to 'test') diff --git a/test/Spec.hs b/test/Spec.hs index c9f3150a744a..6f955aa6964d 100644 --- a/test/Spec.hs +++ b/test/Spec.hs @@ -2,6 +2,8 @@ import Test.Prelude import qualified Xanthous.DataSpec import qualified Xanthous.Data.EntityMapSpec import qualified Xanthous.GameSpec +import qualified Xanthous.MessageSpec +import qualified Xanthous.OrphansSpec main :: IO () main = defaultMain test @@ -11,4 +13,6 @@ test = testGroup "Xanthous" [ Xanthous.DataSpec.test , Xanthous.Data.EntityMapSpec.test , Xanthous.GameSpec.test + , Xanthous.MessageSpec.test + , Xanthous.OrphansSpec.test ] 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 + ] + ] -- cgit 1.4.1