{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE QuasiQuotes #-} module Zenacy.HTML.Internal.Parser.Tests ( testParser ) where import Zenacy.HTML.Internal.BS import Zenacy.HTML.Internal.Char import Zenacy.HTML.Internal.DOM import Zenacy.HTML.Internal.Lexer import Zenacy.HTML.Internal.Parser import Zenacy.HTML.Internal.Token import Zenacy.HTML.Internal.Types import Control.Monad.ST import Data.Default ( Default(..) ) import Data.Either.Extra ( fromRight ) import Data.IntMap ( IntMap ) import qualified Data.IntMap as IntMap ( fromList ) import Data.Sequence ( Seq ) import qualified Data.Sequence as Seq ( fromList ) import GHC.Exts ( IsList(..) ) import Test.Framework ( Test , testGroup ) import Test.Framework.Providers.HUnit ( testCase ) import Test.HUnit ( assertBool , assertEqual , assertFailure ) import Text.RawString.QQ import Text.Show.Pretty ( ppShow , pPrint ) testParser :: Test testParser = testGroup "Zenacy.HTML.Internal.Parser" [ testBasic , testComment , testTemplate , testType , testCode ] testBasic :: Test testBasic = testCase "parser basic" $ do assertEqual "TEST 1" domData $ parserResultDOM $ getResult htmlData testComment :: Test testComment = testCase "parser comment" $ do assertEqual "TEST 1" domComm $ parserResultDOM $ getResult htmlComm testTemplate :: Test testTemplate = testCase "parser template" $ do assertEqual "TEST 1" domTemp $ parserResultDOM $ getResult htmlTemp testType :: Test testType = testCase "parser type" $ do assertEqual "TEST 1" domType $ parserResultDOM $ getResult htmlType testCode :: Test testCode = testCase "parser code" $ do assertEqual "TEST 1" domCode $ parserResultDOM $ getResult htmlCode -- | This test case is used to make other test cases by rendering -- the results of the dom. testRender :: Test testRender = testCase "parser render" $ do let r = getResult htmlCode let d = parserResultDOM r pPrint d assertEqual "TEST 1" def $ ppShow d getResult :: BS -> ParserResult getResult s = fromRight def $ parseDocument def { parserOptionInput = s } htmlData = [r|
aaabbbccc|] htmlComm = [r||] htmlTemp = [r|