mqtt-0.1.0.0: test/TopicTest.hs
{-# LANGUAGE OverloadedStrings #-}
module TopicTest ( tests ) where
import qualified Data.Attoparsec.ByteString as A
import Data.List.NonEmpty (NonEmpty (..))
import Test.Tasty
import Test.Tasty.HUnit
import Network.MQTT.Message
tests :: TestTree
tests = testGroup "Topic / Filter / Level"
[ testGroup "Topic"
[ testGroup "show / fromString"
[ testCase "\"/\"" $ assertEqual "" "\"/\"" $ show ("/" :: Topic)
, testCase "\"\x2603\"" $ assertEqual "" "\"\x2603\"" $ show ("\x2603" :: Topic)
, testCase "\"a/b/c\"" $ assertEqual "" "\"a/b/c\"" $ show ("a/b/c" :: Topic)
]
, testGroup "topicParser"
[ testCase "! \"\"" $ assertEqual "" (Left "Failed reading: invalid topic") $ topicLevels <$> A.parseOnly topicParser ""
, testCase "! \"\\NUL\"" $ assertEqual "" (Left "Failed reading: invalid topic") $ topicLevels <$> A.parseOnly topicParser "\NUL"
, testCase "! \"+\"" $ assertEqual "" (Left "Failed reading: invalid topic") $ topicLevels <$> A.parseOnly topicParser "+"
, testCase "! \"#\"" $ assertEqual "" (Left "Failed reading: invalid topic") $ topicLevels <$> A.parseOnly topicParser "#"
, testCase " \"/\"" $ assertEqual "" (Right $ "":|[""]) $ topicLevels <$> A.parseOnly topicParser "/"
, testCase " \"//\"" $ assertEqual "" (Right $ "":|["",""]) $ topicLevels <$> A.parseOnly topicParser "//"
, testCase " \"/a\"" $ assertEqual "" (Right $ "":|["a"]) $ topicLevels <$> A.parseOnly topicParser "/a"
, testCase " \"a\"" $ assertEqual "" (Right $ "a":|[]) $ topicLevels <$> A.parseOnly topicParser "a"
, testCase " \"a/\"" $ assertEqual "" (Right $ "a":|[""]) $ topicLevels <$> A.parseOnly topicParser "a/"
, testCase " \"a/bcd\"" $ assertEqual "" (Right $ "a":|["bcd"]) $ topicLevels <$> A.parseOnly topicParser "a/bcd"
, testCase "! \"a/b+d\"" $ assertEqual "" (Left "Failed reading: invalid topic") $ topicLevels <$> A.parseOnly topicParser "a/b+d"
, testCase "! \"a/b#d\"" $ assertEqual "" (Left "Failed reading: invalid topic") $ topicLevels <$> A.parseOnly topicParser "a/b#d"
]
]
, testGroup "Filter"
[ testGroup "show / fromString"
[ testCase "\"/\"" $ assertEqual "" "\"/\"" $ show ("/" :: Filter)
, testCase "\"\x2603\"" $ assertEqual "" "\"\x2603\"" $ show ("\x2603" :: Filter)
, testCase "\"a/b/c\"" $ assertEqual "" "\"a/b/c\"" $ show ("a/b/c" :: Filter)
, testCase "\"#\"" $ assertEqual "" "\"#\"" $ show ("#" :: Filter)
, testCase "\"+\"" $ assertEqual "" "\"+\"" $ show ("+" :: Filter)
, testCase "\"a/#\"" $ assertEqual "" "\"a/#\"" $ show ("a/#" :: Filter)
, testCase "\"+/+/#\"" $ assertEqual "" "\"+/+/#\"" $ show ("+/+/#" :: Filter)
, testCase "\"/#\"" $ assertEqual "" "\"/#\"" $ show ("/#" :: Filter)
]
, testGroup "filterParser"
[ testCase "! \"\"" $ assertEqual "" (Left "Failed reading: invalid filter") $ filterLevels <$> A.parseOnly filterParser ""
, testCase "! \"\\NUL\"" $ assertEqual "" (Left "Failed reading: invalid filter") $ filterLevels <$> A.parseOnly filterParser "\NUL"
, testCase " \"+\"" $ assertEqual "" (Right $ "+":|[]) $ filterLevels <$> A.parseOnly filterParser "+"
, testCase " \"#\"" $ assertEqual "" (Right $ "#":|[]) $ filterLevels <$> A.parseOnly filterParser "#"
, testCase "! \"#/\"" $ assertEqual "" (Left "Failed reading: invalid filter") $ filterLevels <$> A.parseOnly filterParser "#/"
, testCase "! \"a/a+b\"" $ assertEqual "" (Left "Failed reading: invalid filter") $ filterLevels <$> A.parseOnly filterParser "a/a+b"
, testCase "! \"a/a#b\"" $ assertEqual "" (Left "Failed reading: invalid filter") $ filterLevels <$> A.parseOnly filterParser "a/a#b"
, testCase "! \"#a\"" $ assertEqual "" (Left "Failed reading: invalid filter") $ filterLevels <$> A.parseOnly filterParser "#a"
, testCase " \"/\"" $ assertEqual "" (Right $ "":|[""]) $ filterLevels <$> A.parseOnly filterParser "/"
, testCase " \"//\"" $ assertEqual "" (Right $ "":|["",""]) $ filterLevels <$> A.parseOnly filterParser "//"
, testCase " \"/a\"" $ assertEqual "" (Right $ "":|["a"]) $ filterLevels <$> A.parseOnly filterParser "/a"
, testCase " \"a\"" $ assertEqual "" (Right $ "a":|[]) $ filterLevels <$> A.parseOnly filterParser "a"
, testCase " \"a/\"" $ assertEqual "" (Right $ "a":|[""]) $ filterLevels <$> A.parseOnly filterParser "a/"
, testCase " \"a/b\"" $ assertEqual "" (Right $ "a":|["b"]) $ filterLevels <$> A.parseOnly filterParser "a/b"
, testCase " \"a/+/c123/#\"" $ assertEqual "" (Right $ "a":|["+","c123","#"]) $ filterLevels <$> A.parseOnly filterParser "a/+/c123/#"
, testCase "! \"a/+/c123/#/d\"" $ assertEqual "" (Left "Failed reading: invalid filter") $ filterLevels <$> A.parseOnly filterParser "a/+/c123/#/d"
]
]
]