Testing/Run-TestsFromVSCode.ps1
function Run-TestsFromVSCode { param( # The current file the tests are invoked from [Parameter(Mandatory=$false)] [string] $CurrentFile, # The current line no. in the current file [Parameter(Mandatory=$false)] [string] $CurrentLine ) if ($null -eq $CurrentFile) { Run-BCTests } else { # determine if the current file is a test codeunit if ((Get-Content $CurrentFile -Raw).Contains('Subtype = Test')) { $TestCodeunit = [Regex]::Match((Get-Content $CurrentFile).Item(0),' \d+ ').Value.Trim() if ($null -ne $CurrentLine) { $Method = Get-TestFromLine -Path $CurrentFile -LineNumber $CurrentLine if ($null -ne $Method) { Run-BCTests -TestCodeunit $TestCodeunit -TestMethod $Method } else { Run-BCTests -TestCodeunit $TestCodeunit -TestMethod '*' } } } else { Run-BCTests } } } function Get-TestFromLine { param ( # file path to search [Parameter(Mandatory=$true)] [string] $Path, # line number to start at [Parameter(Mandatory=$true)] [int] $LineNumber ) $Lines = Get-Content $Path for ($i = ($LineNumber - 1); $i -ge 0; $i--) { if ($Lines.Item($i).Contains('[Test]')) { # search forwards for the procedure declaration (it might not be the following line) for ($j = $i; $j -le $Lines.Count; $j++) { if ($Lines.Item($j).Contains('procedure')) { $ProcDeclaration = $Lines.Item($j) $ProcDeclaration = $ProcDeclaration.Substring($ProcDeclaration.IndexOf('procedure') + 10) $ProcDeclaration = $ProcDeclaration.Substring(0,$ProcDeclaration.IndexOf('(')) return $ProcDeclaration } } } } } Export-ModuleMember -Function Run-TestsFromVSCode |