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 # Describe 'Convert-MarkdownToHTML' { It 'Converts markdown file ''<Markdown>'' to ''<ResultPath>''' -ForEach @( @{Markdown='markdown/mermaid.md'; ReferencePath='html/mermaid.html'; ResultPath='TestDrive:/mermaid.html'; Extensions = 'diagrams'} @{Markdown='markdown/KaTex.md'; ReferencePath='html/KaTex.html'; ResultPath='TestDrive:/KaTex.html' ; Extensions = 'mathematics'} @{Markdown='markdown/KaMaid.md'; ReferencePath='html/KaMaid.html'; ResultPath='TestDrive:/KaMaid.html'; Extensions = 'diagrams','mathematics'} @{Markdown='markdown/Code.md'; ReferencePath='html/Code.html'; ResultPath='TestDrive:/Code.html'; Extensions = 'advanced'} ) { $testPath = Join-Path $testdata -ChildPath $Markdown $refPath = Join-Path $refdata -ChildPath $ReferencePath $destination = 'TestDrive:/' #$destination = 'e:/temp/ttt/' #$ResultPath = $ResultPath -replace 'TestDrive:/',$destination Convert-MarkdownToHTML -Path $testPath ` -Template $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 } BeforeAll { [System.IO.DirectoryInfo]$moduleDir = (Get-Location).Path [System.IO.DirectoryInfo]$testdata = Join-Path $moduleDir -ChildPath 'TestData' [System.IO.DirectoryInfo]$refdata = Join-Path $moduleDir -ChildPath 'ReferenceData' [System.IO.DirectoryInfo]$template = $null $template = Join-Path ([System.IO.Path]::GetTempPath()) ([System.IO.Path]::GetRandomFileName()) New-HTMLTemplate -Destination $template } AfterAll { Remove-Item $template -Recurse } } Describe 'Convert-MarkdownToHTMLFragment' { It 'Converts markdown file ''<MDPath>'' to HTMLFragments' -ForEach @( @{MDPath='markdown/mermaid.md'; ReferencePath='mermaid.html'; Extensions = 'diagrams' ; Title = 'Mermaid Diagramming Tool'} @{MDPath='markdown/KaTex.md'; ReferencePath='KaTex.html'; Extensions = 'mathematics'; Title = 'KaTEx Typesetting'} @{MDPath='markdown/KaMaid.md'; ReferencePath='KaMaid.html'; Extensions = 'diagrams','mathematics'; Title = 'KaTEx Typesetting'} @{MDPath='markdown/Code.md'; ReferencePath='Code.html'; Extensions = 'advanced'; Title = 'Testing Code Symtax Highlighting '} ) { [System.IO.FileInfo]$testPath = Join-Path $testdata -ChildPath $MDPath $refPath = Join-Path $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 } BeforeAll { [System.IO.DirectoryInfo]$moduleDir = (Get-Location).Path [System.IO.DirectoryInfo]$testdata = Join-Path $moduleDir -ChildPath 'TestData' [System.IO.DirectoryInfo]$refdata = Join-Path $moduleDir -ChildPath 'ReferenceData' } } Describe 'ConversionProjects' { It 'Converts markdown file(s) from ''<MDPath>'' to ''<ResultPath>'' with a custom converter pipeline' -ForEach @( @{MDPath='markdown'; Config='ProjectConfigs/Build1.json';ReferencePath='html_p1'; ResultPath='TestDrive:/P1'} @{MDPath='markdown'; Config='ProjectConfigs/Build2.json';ReferencePath='html_p2'; ResultPath='TestDrive:/P2'} @{MDPath='markdown'; Config='ProjectConfigs/Build3.json';ReferencePath='html_p3'; ResultPath='TestDrive:/P3'} ) ` { [string]$markdown = Join-Path $testdata -ChildPath $MDPath $configPath = (Join-Path $testdata -ChildPath $Config) $config = Get-Content $configPath -Encoding UTF8 | ConvertFrom-Json # Debug #$ResultPath = $ResultPath -replace 'TestDrive:/',"e:/temp/ttt/" # Create a new Project New-StaticHTMLSiteProject -ProjectDirectory $ResultPath # copy the build config Copy-Item -Path $configPath -Destination (Join-Path $ResultPath 'Build.json') # cleanup the readme $readme = (Join-Path $ResultPath 'markdown/README.md') Remove-Item -LiteralPath $readme $readme | Should -Not -Exist $ResultPath | Should -Exist # populate the project with markdown content Copy-Item "$markdown/*" -Destination (Join-Path $ResultPath $config.markdown_dir) -Recurse # Build the project &(Join-Path $ResultPath 'Build.ps1') # Verify the results $excluded = $config.Exclude | ForEach-Object { [System.IO.Path]::ChangeExtension($_,'html') } $html = Join-Path $ResultPath $config.site_dir if ($config.Exclude.Count -gt 0) { # Check that excluded files do not exist $found = (Get-ChildItem $html -Recurse -Include $excluded | Measure-Object).Count $found | Should -BeExactly 0 } # check that all files exists and are equal $ref = Join-Path $refdata $ReferencePath Get-ChildItem $ref -Include '*.html' -Exclude $excluded -Recurse | ForEach-Object { $relpath = $_.Fullname.Substring($ref.Length) $target = Join-Path $html $relpath $target | Should -Exist # compare contents $refFileContents = Get-Content -LiteralPath $_ -Encoding UTF8 | Out-String Write-Verbose "Comparing with $_" Get-Content -LiteralPath $target -Encoding UTF8 | Out-String | Should -BeExactly $refFileContents } } BeforeAll { [System.IO.DirectoryInfo]$moduleDir = (Get-Location).Path [System.IO.DirectoryInfo]$testdata = Join-Path $moduleDir -ChildPath 'TestData' [System.IO.DirectoryInfo]$refdata = Join-Path $moduleDir -ChildPath 'ReferenceData' } } Describe 'ConvertTo-NavigationItem' { It 'Converts links relative to root ''<Link>'' to navitems relative to page' -ForEach @( @{Link='test.doc'; RelativePath='intro/page.md'; Result = '<button class="navitem"><a href="../test.doc">Test</a></button>'} @{Link='#test'; RelativePath='intro/page.md'; Result = '<button class="navitem"><a href="#test">Test</a></button>'} @{Link='test.md'; RelativePath='intro/page.md'; Result = '<button class="navitem"><a href="../test.html">Test</a></button>'} @{Link='test.md#test'; RelativePath='intro/page.md'; Result = '<button class="navitem"><a href="../test.html#test">Test</a></button>'} @{Link='http://www.hp.com/test.md'; RelativePath='intro/page.md'; Result = '<button class="navitem"><a href="http://www.hp.com/test.md">Test</a></button>'} ) ` { @{'Test' = $Link} | ConvertTo-NavigationItem -RelativePath $RelativePath ` -NavTemplate @{navitem='<button class="navitem"><a href="{{navurl}}">{{navtext}}</a></button>'}` | Should -BeExactly $result } } Describe 'ConvertTo-PageHeadingNavigation' { It 'Converts heading ''<html>'' to page local navitem' -ForEach @( @{html='<h1 id="bob">Test</h1>'; Result = '<button class="navitem"><a href="#bob"><span class="navitem1">Test</span></a></button>'} @{html='<h1 id="bob"><b>Test</b></h1>'; Result = '<button class="navitem"><a href="#bob"><span class="navitem1"><b>Test</b></span></a></button>'} @{html='<h1 id="bob"><b>Test</b>'; Result = '<button class="navitem"><a href="#bob"><span class="navitem1"><b>Test</b></span></a></button>'} @{html='<h1 id="bob"><a href="x.md">Test</a></h1>'; Result = '<button class="navitem"><a href="#bob"><span class="navitem1">Test</span></a></button>'} ) ` { ConvertTo-PageHeadingNavigation $html -NavTemplate @{navitem='<button class="navitem"><a href="{{navurl}}">{{navtext}}</a></button>'}` | Should -BeExactly $result } } |