{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE QuasiQuotes #-} module Zenacy.HTML.Internal.HTML.Tests ( testHtml ) where import Zenacy.HTML import Data.Default ( Default(..) ) import Test.Framework ( Test , testGroup ) import Test.Framework.Providers.HUnit ( testCase ) import Test.HUnit ( assertBool , assertEqual , assertFailure ) import Data.Text ( Text ) import qualified Data.Text as T ( pack ) import Text.RawString.QQ testHtml :: Test testHtml = testGroup "Zenacy.HTML.Internal.HTML" [ testBasic , testAA1 , testAA2 , testOmit , testTableSparse , testMath , testScript , testInput , testList , testScriptBeforeHead , testComment , testEntity , testAfterHead ] genNormal x = case htmlParse def x of Left e -> T.pack $ show e Right r -> htmlRender $ htmlResultDocument r genPretty x = case htmlParse def x of Left e -> T.pack $ show e Right r -> htmlRenderPretty $ htmlResultDocument r genEntity x y = case htmlParse (def { htmlOptionIgnoreEntities = y }) x of Left e -> T.pack $ show e Right r -> htmlRender $ htmlResultDocument r testBasic :: Test testBasic = testCase "html basic" $ do assertEqual "TEST 1" htmlPretty $ genPretty htmlIn assertEqual "TEST 2" htmlNormal $ genNormal htmlIn htmlIn = "\ \
HEY
YOU
\ \\ \MEGADETH |
HEY
\n\ \YOU
\n\ \ \n\ \ \n\ \ \n\ \\n\ \ | MEGADETH | \n\ \
HEY
\ \YOU
\ \\ \\ \\ \\ \ | MEGADETH | \ \
12345
\ \\ \" htmlAA1Pretty = "\n\ \\n\ \ \n\ \\n\ \ 1\n\ \ \n\ \ 2\n\ \ 3\n\ \ \n\ \ 4\n\ \ 5\n\ \
\n\ \ \n\ \" htmlAA1Normal = "\ \\ \\ \\ \1\ \\ \2\ \3\ \\ \4\ \5\ \
\ \\ \" testAA2 :: Test testAA2 = testCase "html adoption agency 2" $ do assertEqual "TEST 1" htmlAA2Pretty $ genPretty htmlAA2In assertEqual "TEST 2" htmlAA2Normal $ genNormal htmlAA2In htmlAA2In = "\ \123
\ \" htmlAA2Pretty = "\n\ \\n\ \ \n\ \ \n\ \ 1\n\ \\n\ \ 2\n\ \ 3\n\ \
\n\ \ \n\ \" htmlAA2Normal = "\ \\ \\ \\ \1\ \\ \2\ \3\ \
\ \\ \" testOmit :: Test testOmit = testCase "html omit" $ do assertEqual "TEST 1" htmlOmitOut $ genNormal htmlOmitIn1 assertEqual "TEST 2" htmlOmitOut $ genNormal htmlOmitIn2 assertEqual "TEST 3" htmlOmit3Out $ genNormal htmlOmit3In htmlOmitIn1 = "example.
" htmlOmitIn2 = "example." htmlOmitOut = "\ \
example.
" htmlOmit3In = "\ \example." htmlOmit3Out = "\ \
example.
" testTableSparse :: Test testTableSparse = testCase "html table sparse" $ do assertEqual "TEST 1" htmlTableSparseOut $ genNormal htmlTableSparseIn htmlTableSparseIn = "\ \Function | Control Unit | Central\ \ |
---|---|---|
Headlights | ✔ | ✔\ \ |
Interior Lights | ✔ | ✔\ \ |
Electric locomotive sounds | ✔ | ✔\ \ |
Engineer's cab lighting | ✔\ \ | |
Station Announce - Swiss | ✔\ \ |
Function | \ \Control Unit | \ \Central | \ \
---|---|---|
Headlights | \ \\10004 | \ \\10004 | \ \
Interior Lights | \ \\10004 | \ \\10004 | \ \
Electric locomotive sounds | \ \\10004 | \ \\10004 | \ \
Engineer's cab lighting | \ \\ \ | \10004 | \ \
Station Announce - Swiss | \ \\ \ | \10004 | \ \
You can add a string to a number, but this stringifies the number:
\ \" htmlMathOut = "\ \\ \You can add a string to a number, but this stringifies the number:
\ \" testScript :: Test testScript = testCase "html script" $ do assertEqual "TEST 1" htmlScript1Out $ genNormal htmlScript1In assertEqual "TEST 2" htmlScript2Out $ genNormal htmlScript2In assertEqual "TEST 3" htmlScript3Out $ genNormal htmlScript3In assertEqual "TEST 4" htmlScript4Out $ genNormal htmlScript4In htmlScript1In = "\ \" htmlScript1Out = "\ \\ \\ \\ \\ \\ \" htmlScript2In = "\ \&
" htmlEntity1Out = "\ \\ \\ \\ \\ \&
\ \\ \" htmlEntity2Out = "\ \\ \\ \\ \\ \&
\ \\ \" htmlEntityNumIn = "−Δ
" htmlEntityNum1Out = "\ \\8722\916
" htmlEntityNum2Out = "\ \−Δ
" testAfterHead :: Test testAfterHead = testCase "html after head" $ do assertEqual "TEST 1" htmlAfterHead1Out $ genNormal htmlAfterHead1In htmlAfterHead1In = "\ \\ \\ \\ \\ \\ \\ \" htmlAfterHead1Out = "\ \\ \\ \\ \\ \\ \\ \"