packages feed

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

{-# LANGUAGE LambdaCase #-}

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

import Test.Tasty
import Test.Tasty.HUnit

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

tests :: [TestTree]
tests =
  [ testCase "itemized list" $
      blockShouldMatch
        ("<itemizedlist>"
         <> "<listitem><para>First</para></listitem>"
         <> "<listitem><para>Second</para></listitem>"
         <> "</itemizedlist>") $
        \case
          ItemizedList items -> length items @?= 2
          b -> assertFailure $ "expected itemized list: " ++ show b

  , testCase "ordered list" $
      blockShouldMatch
        ("<orderedlist>"
         <> "<listitem><para>First</para></listitem>"
         <> "<listitem><para>Second</para></listitem>"
         <> "<listitem><para>Third</para></listitem>"
         <> "</orderedlist>") $
        \case
          OrderedList items -> length items @?= 3
          b -> assertFailure $ "expected ordered list: " ++ show b

  , testCase "nested lists" $
      blockShouldMatch
        ("<itemizedlist>"
         <> "<listitem>"
         <> "  <para>Outer</para>"
         <> "  <itemizedlist>"
         <> "    <listitem><para>Inner</para></listitem>"
         <> "  </itemizedlist>"
         <> "</listitem>"
         <> "</itemizedlist>") $
        \case
          ItemizedList [item] ->
            assertBool "should have nested list" $
              any (\case ItemizedList _ -> True; _ -> False) item
          b -> assertFailure $ "expected nested list: " ++ show b

  , testCase "list item with formatted content" $
      blockShouldMatch
        ("<itemizedlist>"
         <> "<listitem><para>Use <bold>this</bold> function</para></listitem>"
         <> "</itemizedlist>") $
        \case
          ItemizedList [[Paragraph is]] ->
            assertBool "should have bold" $
              any (\case Bold _ -> True; _ -> False) is
          b -> assertFailure $ "unexpected: " ++ show b
  ]