packages feed

doxygen-parser-0.1.0: test/Test/Doxygen/Parser/CodeBlock.hs

{-# LANGUAGE LambdaCase #-}

module Test.Doxygen.Parser.CodeBlock (tests) where

import Test.Tasty
import Test.Tasty.HUnit

import Doxygen.Parser
import Test.Doxygen.Parser.Helpers

tests :: [TestTree]
tests =
  [ testCase "single code line" $
      blockShouldMatch
        ("<programlisting>"
         <> "<codeline><highlight class=\"normal\">return<sp/>0;</highlight></codeline>"
         <> "</programlisting>") $
        \case
          CodeBlock [line] -> line @?= "return 0;"
          b -> assertFailure $ "expected code block: " ++ show b

  , testCase "multiple code lines" $
      blockShouldMatch
        ("<programlisting>"
         <> "<codeline><highlight class=\"normal\">int<sp/>x;</highlight></codeline>"
         <> "<codeline><highlight class=\"normal\">x<sp/>=<sp/>0;</highlight></codeline>"
         <> "</programlisting>") $
        \case
          CodeBlock codeLines -> length codeLines @?= 2
          b -> assertFailure $ "expected 2 code lines: " ++ show b

  , testCase "code line with ref" $
      blockShouldMatch
        ("<programlisting>"
         <> "<codeline><highlight class=\"normal\">"
         <> "<ref refid=\"abc\">my_type</ref><sp/>x;</highlight></codeline>"
         <> "</programlisting>") $
        \case
          CodeBlock [line] -> line @?= "my_type x;"
          b -> assertFailure $ "expected code block: " ++ show b

  , testCase "empty code block" $
      blockShouldMatch "<programlisting></programlisting>" $
        \case
          CodeBlock [] -> pure ()
          b -> assertFailure $ "expected empty code block: " ++ show b
  ]