MarkdownToHtml.tests.ps1

#
# This is a PowerShell Unit Test file.
# You need a unit test framework such as Pester to run PowerShell Unit tests.
# You can download Pester from http://go.microsoft.com/fwlink/?LinkID=534084
#

[System.IO.DirectoryInfo]$SCRIPT:moduleDir = Split-Path -Parent $MyInvocation.MyCommand.Path
[System.IO.DirectoryInfo]$SCRIPT:testdata = Join-Path $SCRIPT:moduleDir -ChildPath 'TestData'
[System.IO.DirectoryInfo]$SCRIPT:refdata  = Join-Path $SCRIPT:moduleDir -ChildPath 'ReferenceData'
[System.IO.FileInfo]$SCRIPT:template      = Join-Path $SCRIPT:testdata  -ChildPath 'Template'

Describe 'Convert-MarkdownToHTML' {
    It 'Converts markdown file(s) from ''<Path>'' to HTML' `
       -TestCases @(
           @{Path='markdown/mermaid.md'; ReferencePath='html/mermaid.html';       ResultPath='TestDrive:/mermaid.html' ;             Extensions = 'diagrams'}
           @{Path='markdown/KaTex.md';   ReferencePath='html/KaTex.html';         ResultPath='TestDrive:/KaTex.html' ;               Extensions = 'mathematics'}
           @{Path='markdown/KaMaid.md';  ReferencePath='html/KaMaid.html';        ResultPath='TestDrive:/KaMaid.html' ;              Extensions = 'diagrams','mathematics'}
           @{Path='markdown/Code.md';    ReferencePath='html/Code.html';          ResultPath='TestDrive:/Code.html' ;                Extensions = 'advanced'}
           @{Path='markdown/Dir';        ReferencePath='html/SubDir/SubDirSingle.html';  ResultPath='TestDrive:/Subdir/SubdirSingle.html' ; Extensions = 'advanced'}
           @{Path='markdown/Dir2';       ReferencePath='html/SubDir2/SubDir2/SubDirSingle.html';  ResultPath='TestDrive:/Subdir2/SubDir2/SubdirSingle.html' ; Extensions = 'advanced'}
       ) `
       {
           param($Path,$ReferencePath,$ResultPath,$Extensions)

           $testPath = Join-Path $SCRIPT:testdata -ChildPath $Path
           $refPath  = Join-Path $SCRIPT:refdata  -ChildPath $ReferencePath

           $destination =  'TestDrive:/'
           #$destination = 'e:/temp/ttt'
           Convert-MarkdownToHTML -Path $testPath `
                                  -Template $SCRIPT:template `
                                  -Destination $destination `
                                  -IncludeExtension $Extensions `
                                  -Verbose

           $refPath    | Should -Exist
           $ResultPath | Should -Exist

           $refFileContents = Get-Content -LiteralPath $refPath -Encoding UTF8 | Out-String
           Get-Content -LiteralPath $ResultPath -Encoding UTF8 | Out-String | Should -BeExactly $refFileContents
       }
}

Describe 'Convert-MarkdownToHTMLFragment' {
    It 'Converts markdown file(s) from ''<Path>'' to HTMLFragments' `
        -TestCases @(
           @{Path='markdown/mermaid.md'; ReferencePath='mermaid.html'; Extensions = 'diagrams' ; Title = 'Mermaid Diagramming Tool'}
           @{Path='markdown/KaTex.md';   ReferencePath='KaTex.html';   Extensions = 'mathematics'; Title = 'KaTEx Typesetting'}
           @{Path='markdown/KaMaid.md';  ReferencePath='KaMaid.html';  Extensions = 'diagrams','mathematics'; Title = 'KaTEx Typesetting'}
           @{Path='markdown/Code.md';    ReferencePath='Code.html';    Extensions = 'advanced'; Title = 'Testing Code Symtax Highlighting '}
        ) `
        {
            param($Path,$ReferencePath,$Extensions, $Title)

            [System.IO.FileInfo]$testPath = Join-Path $SCRIPT:testdata -ChildPath $Path
            $refPath  = Join-Path $SCRIPT:refdata  -ChildPath $ReferencePath

            $ResultPath = Join-Path 'TestDrive:/' $ReferencePath
            #$ResultPath = Join-Path 'e:\temp\ttt' $ReferencePath

            $fragment = Get-Item -LiteralPath $testPath `
            | Convert-MarkdownToHTMLFragment -IncludeExtension $Extensions
        
            $fragment.RelativePath | Should -BeExactly $testPath.Name # Should be Markdown Filename
            $fragment.Title | Should -BeExactly $Title

            Out-File -InputObject $fragment.HtmlFragment -LiteralPath $ResultPath -Encoding utf8

            $refPath    | Should -Exist
            $ResultPath | Should -Exist
            $refFileContents = Get-Content -LiteralPath $refPath -Encoding UTF8 | Out-String
            Get-Content -LiteralPath $ResultPath -Encoding UTF8 | Out-String | Should -BeExactly $refFileContents
        }
}