packages feed

xrefcheck-0.2.2: tests/Test/Xrefcheck/AnchorsSpec.hs

{- SPDX-FileCopyrightText: 2019 Serokell <https://serokell.io>
 -
 - SPDX-License-Identifier: MPL-2.0
 -}

module Test.Xrefcheck.AnchorsSpec (test_anchors) where

import Universum

import Test.Tasty (TestTree, testGroup)
import Test.Tasty.HUnit (testCase, (@?=))

import Test.Xrefcheck.Util
import Xrefcheck.Core

checkHeaderConversions :: Flavor -> [(Text, Text)] -> TestTree
checkHeaderConversions fl suites =
  testGroup (show fl) $
    [testCase (show a <> " == " <> show b) $ headerToAnchor fl a @?= b | (a,b) <- suites]
    ++
    [ testCase "Non-stripped header name should be stripped" $ do
        (fi, errs) <- parse fl "tests/markdowns/without-annotations/non_stripped_spaces.md"
        getAnchors fi @?= [ case fl of GitHub -> "header--with-leading-spaces"
                                       GitLab -> "header-with-leading-spaces"
                          , "edge-case"
                          ]
        errs @?= []
    ]
  where
    getAnchors :: FileInfo -> [Text]
    getAnchors fi = map aName $ fi ^. fiAnchors

test_anchors :: TestTree
test_anchors = do
  testGroup "Header-to-anchor conversion"
    [ checkHeaderConversions GitHub
      [ ( "Some header"
        , "some-header"
        )
      , ( "Do +5 times"
        , "do-5-times"
        )
      , ( "a # b"
        , "a--b"
        )
      , ( "a ## b"
        , "a--b"
        )
      , ( "a - b"
        , "a---b"
        )
      , ( "a * b"
        , "a--b"
        )
      , ( "a / b"
        , "a--b"
        )
      , ( "a \\ b"
        , "a--b"
        )
      , ( "a + b"
        , "a--b"
        )
      , ( "a+b"
        , "ab"
        )
      , ( "a & b"
        , "a--b"
        )
      , ( "a &b"
        , "a-b"
        )
      , ( "a - -- - b"
        , "a--------b"
        )
      , ( "a -+--|- b"
        , "a------b"
        )
      , ( "Some *italic* text"
        , "some-italic-text"
        )
      , ( "-Some-text-with--many----hyphens-"
        , "-some-text-with--many----hyphens-"
        )
      , ( "- A -"
        , "--a--"
        )
      , ( "Some-+++++--mess++-mda"
        , "some---mess-mda"
        )
      , ( ":white_check_mark: Checklist for your Pull Request"
        , "white_check_mark-checklist-for-your-pull-request"
        )
      ]
    , checkHeaderConversions GitLab
      [ ( "a # b"
        , "a-b"
        )
      , ( "a - b"
        , "a-b"
        )
      , ( "a -- b"
        , "a-b"
        )
      , ( "a & b"
        , "a-b"
        )
      , ( "a + b"
        , "a-b"
        )
      , ( "a+b"
        , "ab"
        )
      , ( "a - -- - b"
        , "a-b"
        )
      , ( "a -+--|- b"
        , "a-b"
        )
      , ( "Some *italic* text"
        , "some-italic-text"
        )
      , ( "-Some-text-with--many----hyphens-"
        , "-some-text-with-many-hyphens-"
        )
      , ( "- A -"
        , "-a-"
        )
      , ( "Some-+++++--mess++-mda"
        , "some-mess-mda"
        )
      , ( ":white_check_mark: Checklist for your Pull Request"
        , "white_check_mark-checklist-for-your-pull-request"
        )
      ]
    ]