Test: Ensure all scripts are not LE Unicode encoded

This commit is contained in:
Matt Graeber 2015-11-05 10:36:17 -05:00
parent d1145e0540
commit 641eff706e
1 changed files with 49 additions and 0 deletions

View File

@ -0,0 +1,49 @@
Set-StrictMode -Version Latest
$TestScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent
$ModuleRoot = Resolve-Path "$TestScriptRoot\.."
filter Assert-NotLittleEndianUnicode {
[CmdletBinding()]
param (
[Parameter(Mandatory = $True,
ValueFromPipelineByPropertyName = $True,
ValueFromPipeline = $True)]
[Alias('FullName')]
[String[]]
$FilePath
)
$LittleEndianMarker = 48111 # 0xBBEF
Write-Verbose "Current file: $FilePath"
Write-Debug "Current file: $FilePath"
if ([System.IO.Directory]::Exists($FilePath)) {
Write-Debug "File is a directory."
return
}
if (-not [System.IO.File]::Exists($FilePath)) {
Write-Debug "File does not exist."
return
}
$FileBytes = Get-Content -TotalCount 3 -Encoding Byte -Path $FilePath
if ($FileBytes.Length -le 2) {
Write-Debug "File must be at least 2 bytes in length."
return
}
if ([BitConverter]::ToUInt16($FileBytes, 0) -eq $LittleEndianMarker) {
Write-Debug "File contains little endian unicode marker."
throw "$_ is little-endian unicode encoded."
}
}
Describe 'ASCII encoding of all scripts' {
It 'should not contain little-endian unicode encoded scripts or modules' {
{ Get-ChildItem -Path $ModuleRoot -Recurse -Include *.ps1,*.psd1,*.psm1 | Assert-NotLittleEndianUnicode } | Should Not Throw
}
}