Skip to content

Vscci output cleanup #201

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
May 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 20 additions & 20 deletions Build/CommonFunctionsAndMethods.psm1
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
$__=$__ #quiesce warnings
$CommonFunctionsAndMethodsDir = $PSScriptRoot
Write-Host "Loading CommonFunctionsAndMethods.psm1 from: $PSCommandPath"
Write-Verbose "Loading CommonFunctionsAndMethods.psm1 from: $PSCommandPath"
. (Join-Path $CommonFunctionsAndMethodsDir 'SQLServerConnection.ps1');

$MergeHashTables = {param([HashTable]$base,[HashTable]$new);$new.GetEnumerator()|%{$base.remove($_.Key);$base += @{$_.Key=$_.Value}};$base;};
Expand Down Expand Up @@ -40,10 +40,10 @@ Function Invoke-SqlFile
$parameters['Verbose'] = $true
}

$dddbefore = Get-Date;Write-Warning("------->>BEFORE<<-------(CommonFunctionsAndMethods.p1:Invoke-SqlFile:Invoke-SqlCommand[$($dddbefore|Get-Date -Format "yyyy:MM:dd;HH:mm:ss.fff")])")
$dddbefore = Get-Date;Write-Verbose("------->>BEFORE<<-------(CommonFunctionsAndMethods.p1:Invoke-SqlFile:Invoke-SqlCommand[$($dddbefore|Get-Date -Format "yyyy:MM:dd;HH:mm:ss.fff")])")
$results = (Invoke-SqlCmd @parameters)
$dddafter = Get-Date;Write-Warning("------->>After<<-------(CommonFunctionsAndMethods.p1:Invoke-SqlFile:Invoke-SqlCommand[$($dddafter|Get-Date -Format "yyyy:MM:dd;HH:mm:ss.fff")])")
Write-Warning("Runtime in Milliseconds: $(($dddafter-$dddbefore).TotalMilliseconds)")
$dddafter = Get-Date;Write-Verbose("------->>After<<-------(CommonFunctionsAndMethods.p1:Invoke-SqlFile:Invoke-SqlCommand[$($dddafter|Get-Date -Format "yyyy:MM:dd;HH:mm:ss.fff")])")
Write-Verbose("Runtime in Milliseconds: $(($dddafter-$dddbefore).TotalMilliseconds)")
return $results
}

Expand Down Expand Up @@ -100,11 +100,11 @@ Function Invoke-SQLFileOrQuery
AdditionalParameters = $AdditionalParameters
PrintSqlOutput = $PrintSqlOutput
}
$dddbefore = Get-Date;Write-Warning("------->>BEFORE<<-------(tSQLt_Validate.ps1:Invoke-SQLFileOrQuery:Invoke-SqlFile[$($dddbefore|Get-Date -Format "yyyy:MM:dd;HH:mm:ss.fff")])")
$dddbefore = Get-Date;Write-Verbose("------->>BEFORE<<-------(tSQLt_Validate.ps1:Invoke-SQLFileOrQuery:Invoke-SqlFile[$($dddbefore|Get-Date -Format "yyyy:MM:dd;HH:mm:ss.fff")])")
$QueryOutput = Invoke-SqlFile @parameters
$dddafter = Get-Date;Write-Warning("------->>After<<-------(tSQLt_Validate.ps1:Invoke-SQLFileOrQuery:Invoke-SqlFile[$($dddafter|Get-Date -Format "yyyy:MM:dd;HH:mm:ss.fff")])")
$dddafter-$dddbefore
return $QueryOutput
$dddafter = Get-Date;Write-Verbose("------->>After<<-------(tSQLt_Validate.ps1:Invoke-SQLFileOrQuery:Invoke-SqlFile[$($dddafter|Get-Date -Format "yyyy:MM:dd;HH:mm:ss.fff")])")
Write-Verbose("Runtime in Milliseconds: $(($dddafter-$dddbefore).TotalMilliseconds)")
return $QueryOutput
}
catch{
throw
Expand Down Expand Up @@ -186,46 +186,46 @@ Function Remove-ResourceGroup{
[Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()][string] $ResourceGroupName,
[Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()][string] $BuildId);

Write-Output "▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-";
Write-Output ("[{0}]Start processing delete for {1}" -f ((get-date).toString("O")), ($ResourceGroupName));
Write-Verbose "▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-";
Write-Verbose ("[{0}]Start processing delete for {1}" -f ((get-date).toString("O")), ($ResourceGroupName));

$MyAzResourceGroup = (Get-AzResourceGroup -name "$ResourceGroupName");
if(("RemovalBy" -in $MyAzResourceGroup.tags.keys) -and (![string]::isnullorempty($MyAzResourceGroup.tags.RemovalBy))) {
$MyAzResourceGroup = $null;
}
if($null -ne $MyAzResourceGroup) {
$Tags = @{};
Write-Output ("Add Tag to {0}" -f $ResourceGroupName);
Write-Verbose ("Add Tag to {0}" -f $ResourceGroupName);
$Tags = $MyAzResourceGroup.Tags;
$Tags.remove("RemovalBy");
$Tags += @{"RemovalBy"="$BuildId"};
$MyAzResourceGroup | Set-AzResourceGroup -Tags $Tags;
Start-Sleep 10;
Write-Output ("Confirming Tags are still in place for {0}" -f $ResourceGroupName);
Write-Verbose ("Confirming Tags are still in place for {0}" -f $ResourceGroupName);
$MyAzResourceGroup = $MyAzResourceGroup | Get-AZResourceGroup | Where-Object {$_.Tags.RemovalBy -eq "$BuildId"};
$MyAzResourceGroup.Tags | Format-Table;

if($null -ne $MyAzResourceGroup) {
Write-Output "Removing Locks"
Write-Verbose "Removing Locks"
$retrievedResourceGroupName = $MyAzResourceGroup.ResourceGroupName;
Get-AzResource -ResourceGroupName $retrievedResourceGroupName | ForEach-Object {
Get-AzResourceLock -ResourceType $_.ResourceType -ResourceName $_.Name -ResourceGroupName $_.ResourceGroupName | ForEach-Object{
Write-Output ("{0} -> {1}" -f $_.ResourceType, $_.ResourceName);
Write-Verbose ("{0} -> {1}" -f $_.ResourceType, $_.ResourceName);
$_ | Remove-AzResourceLock -Force
}
}
Write-Output ("Removing RG {0}" -f $retrievedResourceGroupName);
Write-Verbose ("Removing RG {0}" -f $retrievedResourceGroupName);
$MyAzResourceGroup | Remove-AzResourceGroup -Force;
}
else {
Write-Output ("Tags changed by another process. Resource Group {0} is no longer eligible to be deleted." -f $ResourceGroupName);
Write-Verbose ("Tags changed by another process. Resource Group {0} is no longer eligible to be deleted." -f $ResourceGroupName);
}
}
else {
Write-Output ("Processing skipped for Resource Group: {0} Build Id: {1}" -f $ResourceGroupName, $BuildId);
Write-Verbose ("Processing skipped for Resource Group: {0} Build Id: {1}" -f $ResourceGroupName, $BuildId);
}
Write-Output ("[{0}]Done processing delete for {1}" -f ((get-date).toString("O")), ($ResourceGroupName))
Write-Output "▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-";
Write-Verbose ("[{0}]Done processing delete for {1}" -f ((get-date).toString("O")), ($ResourceGroupName))
Write-Verbose "▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-▀-▄-_-▄-";
}

Function Get-SnipContent {
Expand Down Expand Up @@ -267,7 +267,7 @@ Function Replace-InFile {
$isRegex = $true
$rv = $rv[0]
}
Write-Host("Replacing >$_< with >$rv<...");
Write-Verbose("Replacing >$_< with >$rv<...");
if($isRegex){
$fileContent = $fileContent -replace $_, $rv
}else{
Expand Down
21 changes: 11 additions & 10 deletions Build/LocalBuild.ps1
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
[CmdletBinding()]
param(
[Parameter(Mandatory=$false)][ValidateNotNullOrEmpty()][string] $ServerName = 'localhost,1433',
[Parameter(Mandatory=$true, ParameterSetName = 'UserPass')][ValidateNotNullOrEmpty()][string] $UserName = "sa" ,
Expand All @@ -12,12 +13,12 @@ param(
$PSDefaultParameterValues = $PSDefaultParameterValues.clone()
$PSDefaultParameterValues += @{'*:ErrorAction' = 'Stop'}

Write-Host "Starting execution of LocalBuild.ps1"
Write-Verbose "Starting execution of LocalBuild.ps1"
$__=$__ #quiesce warnings
$invocationDir = $PSScriptRoot
Push-Location -Path $invocationDir
$cfam = (Join-Path $invocationDir "CommonFunctionsAndMethods.psm1" | Resolve-Path)
Write-Host "Attempting to load module from: $cfam"
Write-Verbose "Attempting to load module from: $cfam"
Import-Module "$cfam" -Force -Verbose
. (Join-Path $invocationDir 'SQLServerConnection.ps1');

Expand All @@ -36,20 +37,20 @@ $invocationDir = $PSScriptRoot
Push-Location -Path $invocationDir
try{

if($TrustedConnection){
Write-Warning('GH:TC')
$SqlServerConnection = [SqlServerConnection]::new($ServerName,"LocalBuild");
}else{
Write-Warning('GH:UP')
$SqlServerConnection = [SqlServerConnection]::new($ServerName,$UserName,$Password,"LocalBuild");
}

Log-Output('');
Log-Output("+--------------------------------------------------------------------+");
Log-Output("| ***** Executing Local tSQLt Build ***** |");
Log-Output("+--------------------------------------------------------------------+");
Log-Output('');

if($TrustedConnection){
Log-Output('Selecting Trusted Connection')
$SqlServerConnection = [SqlServerConnection]::new($ServerName,"LocalBuild");
}else{
Log-Output('Selecting UserName/Password Connection')
$SqlServerConnection = [SqlServerConnection]::new($ServerName,$UserName,$Password,"LocalBuild");
}


Log-Output('+ - - - - - - - - - - - - - - - - - +')
Log-Output(': Cleaning Environment :')
Expand Down
9 changes: 5 additions & 4 deletions Build/LocalValidate.ps1
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
[CmdletBinding()]
param(
[Parameter(Mandatory=$false)][ValidateNotNullOrEmpty()][string] $ServerName = 'localhost,1433',
[Parameter(Mandatory=$true, ParameterSetName = 'UserPass')][ValidateNotNullOrEmpty()][string] $UserName = "sa" ,
Expand All @@ -9,23 +10,23 @@ param(
$PSDefaultParameterValues = $PSDefaultParameterValues.clone()
$PSDefaultParameterValues += @{'*:ErrorAction' = 'Stop'}

Write-Host "Starting execution of LocalBuild.ps1"
Write-Verbose "Starting execution of LocalBuild.ps1"
$__=$__ #quiesce warnings
$invocationDir = $PSScriptRoot
Push-Location -Path $invocationDir
$cfam = (Join-Path $invocationDir "CommonFunctionsAndMethods.psm1" | Resolve-Path)
Write-Host "Attempting to load module from: $cfam"
Write-Verbose "Attempting to load module from: $cfam"
Import-Module "$cfam" -Force -Verbose
. (Join-Path $invocationDir 'SQLServerConnection.ps1');


try{

if($TrustedConnection){
Write-Warning('GH:TC')
Log-Output('Selecting Trusted Connection')
$SqlServerConnection = [SqlServerConnection]::new($ServerName,"LocalBuild");
}else{
Write-Warning('GH:UP')
Log-Output('Selecting UserName/Password Connection')
$SqlServerConnection = [SqlServerConnection]::new($ServerName,$UserName,$Password,"LocalBuild");
}

Expand Down
24 changes: 12 additions & 12 deletions Build/tSQLt_Build/ConcatenateFiles.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -58,17 +58,17 @@ function Concatenate-Files {

$output = @()
foreach ($file in $fileIterator) {
Write-Host("-->$file")
Write-Verbose("-->$file")
$fileContent = Get-FileContent -filePath $file -bracket $bracket -includeFromStart $includeFromStart -separator $separator
$output += $fileContent
}

return $output
}

Write-Host("OutputFile: $OutputFile")
Write-Host("SeparatorTemplate: >$SeparatorTemplate<")
Write-Host("Input: $InputPath")
Write-Verbose("OutputFile: $OutputFile")
Write-Verbose("SeparatorTemplate: >$SeparatorTemplate<")
Write-Verbose("Input: $InputPath")

if([string]::IsNullOrWhiteSpace($SeparatorTemplate)){
if($null -eq $SeparatorContent){
Expand All @@ -78,30 +78,30 @@ if([string]::IsNullOrWhiteSpace($SeparatorTemplate)){
else{
$SeparatorContent = Get-Content $SeparatorTemplate -ErrorAction Stop
}
Write-Host(">--Separator Template-->")
$SeparatorContent|%{Write-Host(">:$_")}
Write-Host("<--Separator Template--<")
Write-Verbose(">--Separator Template-->")
$SeparatorContent|%{Write-Verbose(">:$_")}
Write-Verbose("<--Separator Template--<")
if($Bracket -eq ''){
$IncludeFromStart = $true;
}

try{

if($null -eq $InputPath){
Write-Host("scriptPath: <no files>")
Write-Verbose("scriptPath: <no files>")
$fileIterator = @()
}
elseif($InputPath -is [System.Collections.IEnumerable]){
Write-Host("scriptPath: /")
Write-Verbose("scriptPath: /")
$fileIterator = $InputPath
}
elseif (Test-Path $InputPath -PathType Container) {
Write-Host("scriptPath: $InputPath")
Write-Verbose("scriptPath: $InputPath")
$fileIterator = Get-ChildItem $InputPath -Filter $IncludePattern
}
else {
$scriptPath = (Split-Path $InputPath)
Write-Host("scriptPath: $scriptPath")
Write-Verbose("scriptPath: $scriptPath")
$fileList = Get-Content $InputPath -ErrorAction Stop
$fileIterator = $fileList | ForEach-Object { Join-Path $scriptPath $_ | Resolve-Path}
}
Expand All @@ -111,7 +111,7 @@ try{
$sv = $_["s"]
$rv=$_["r"];
$isRegex = $_.ContainsKey("isRegex") -and $_["isRegex"];
Write-Host("Replacing >$sv< with >$rv< [regex:$isRegex]...");
Write-Verbose("Replacing >$sv< with >$rv< [regex:$isRegex]...");
if($isRegex){
$concatenatedContent = $concatenatedContent -replace $sv, $rv
}else{
Expand Down
2 changes: 1 addition & 1 deletion Build/tSQLt_BuildCLR.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ param(
[Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()][securestring] $pfxPassword
)
Push-Location -Path $PSScriptRoot
Write-Warning((Get-Location).Path)
Write-Verbose((Get-Location).Path)
try{
$OutputPath = "./output/tSQLtCLR/";
$TempPath = "./temp/tSQLtCLR/";
Expand Down
4 changes: 2 additions & 2 deletions Build/tSQLt_BuildDacpac.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ $__=$__ #quiesce warnings
$invocationDir = $PSScriptRoot
Push-Location -Path $invocationDir
$cfam = (Join-Path $invocationDir "CommonFunctionsAndMethods.psm1" | Resolve-Path)
Write-Host "Attempting to load module from: $cfam"
Write-Verbose "Attempting to load module from: $cfam"
Import-Module "$cfam" -Force
Get-Module -Name CommonFunctionsAndMethods # Verify if module is loaded

Expand Down Expand Up @@ -41,7 +41,7 @@ try{
Invoke-SqlFile -SqlServerConnection $SqlServerConnection -FileNames "CreateBuildDb.sql" -Database "tempdb" -AdditionalParameters @{NewDbName=$DacPacDatabaseName} -PrintSqlOutput $true;
Log-Output('-- Executing tSQLt.class.sql')
Invoke-SqlFile -SqlServerConnection $SqlServerConnection -FileNames "tSQLt.class.sql" -Database "$DacPacDatabaseName";
Write-Host('Building DACPAC')
Log-Output('Building DACPAC')
$FriendlySQLServerVersion = Get-FriendlySQLServerVersion -SqlServerConnection $SqlServerConnection;
$tSQLtDacpacFileName = "tSQLt."+$FriendlySQLServerVersion+".dacpac";
$tSQLtApplicationName = "tSQLt."+$FriendlySQLServerVersion;
Expand Down
30 changes: 23 additions & 7 deletions Build/tSQLt_Validate.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Param(
);



$validateStartTime = Get-Date;

$__=$__ #quiesce warnings
$invocationDir = $PSScriptRoot
Expand Down Expand Up @@ -204,17 +204,33 @@ try{
$missingFiles = ($ExpectedTestResultFiles|Where-Object{$ActualTestResultFiles -NotContains $_})
$superfluousFiles = ($ActualTestResultFiles|Where-Object{$ExpectedTestResultFiles -NotContains $_})
$matchingFiles = ($ActualTestResultFiles|Where-Object{$ExpectedTestResultFiles -Contains $_})
Write-Warning("Matching Files:")
$matchingFiles
Write-Warning("Missing Files:")
$missingFiles
Write-Warning("Unexpected Files:")
$superfluousFiles
Log-Output("+------------------------------------------------");
Log-Output("| Expected Test Result Files:");
$matchingFiles|%{Log-Output("| - $_");}
Log-Output("+------------------------------------------------");
if($missingFiles.length -gt 0){
Log-Output("| Missing Test Result Files:");
$missingFiles|%{Log-Output("| - $_");}
}else{
Log-Output("| No Missing Test Result Files");
}
Log-Output("+------------------------------------------------");
if($superfluousFiles.length -gt 0){
Log-Output("| Unexpected Test Result Files:")
$superfluousFiles|%{Log-Output("| - $_");}
}else{
Log-Output("| No Unexpected Test Result Files");
}
Log-Output("+------------------------------------------------");
if($missingFiles.Length + $superfluousFiles.Length -gt 0){
Write-Error("Missing or Unexpected Test Result Files!")
}
}
finally{
Pop-Location
$validateEndTime = Get-Date;
Log-Output("------------------------------------")
Log-Output("Total Duration: $($validateEndTime-$validateStartTime)")
Log-Output("------------------------------------")
}

18 changes: 9 additions & 9 deletions Build/tSQLt_ValidateRunAll.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -67,28 +67,28 @@ Function Invoke-Tests
DatabaseName = $DatabaseName
PrintSqlOutput = $true
}
$dddbefore = Get-Date;Write-Warning("------->>BEFORE<<-------(tSQLt_Validate.ps1:Invoke-Tests:Invoke-SQLFileOrQuery[$($dddbefore|Get-Date -Format "yyyy:MM:dd;HH:mm:ss.fff")])")
$dddbefore = Get-Date;Write-Verbose("------->>BEFORE<<-------(tSQLt_Validate.ps1:Invoke-Tests:Invoke-SQLFileOrQuery[$($dddbefore|Get-Date -Format "yyyy:MM:dd;HH:mm:ss.fff")])")
$parameters;
Invoke-SQLFileOrQuery @parameters;
$dddafter = Get-Date;Write-Warning("------->>After<<-------(tSQLt_Validate.ps1:Invoke-Tests:Invoke-SQLFileOrQuery[$($dddafter|Get-Date -Format "yyyy:MM:dd;HH:mm:ss.fff")])")
$dddafter-$dddbefore
$dddafter = Get-Date;Write-Verbose("------->>After<<-------(tSQLt_Validate.ps1:Invoke-Tests:Invoke-SQLFileOrQuery[$($dddafter|Get-Date -Format "yyyy:MM:dd;HH:mm:ss.fff")])")
Write-Verbose("Duration: $($dddafter-$dddbefore)")

$dddbefore = Get-Date;Write-Warning("------->>BEFORE<<-------(tSQLt_Validate.ps1:Invoke-Tests:Copy-SQLXmlToFile[$($dddbefore|Get-Date -Format "yyyy:MM:dd;HH:mm:ss.fff")])")
$dddbefore = Get-Date;Write-Verbose("------->>BEFORE<<-------(tSQLt_Validate.ps1:Invoke-Tests:Copy-SQLXmlToFile[$($dddbefore|Get-Date -Format "yyyy:MM:dd;HH:mm:ss.fff")])")
Copy-SQLXmlToFile $SqlServerConnection $DatabaseName "EXEC [tSQLt].[XmlResultFormatter]" $OutputFile
$dddafter = Get-Date;Write-Warning("------->>After<<-------(tSQLt_Validate.ps1:Invoke-Tests:Copy-SQLXmlToFile[$($dddafter|Get-Date -Format "yyyy:MM:dd;HH:mm:ss.fff")])")
$dddafter-$dddbefore
$dddafter = Get-Date;Write-Verbose("------->>After<<-------(tSQLt_Validate.ps1:Invoke-Tests:Copy-SQLXmlToFile[$($dddafter|Get-Date -Format "yyyy:MM:dd;HH:mm:ss.fff")])")
Write-Verbose("Duration: $($dddafter-$dddbefore)")

$parameters = @{
SqlServerConnection = $SqlServerConnection
HelperSQLPath = $HelperSQLPath
DatabaseName = $DatabaseName
Query = "EXEC tSQLt_testutil.LogMultiRunResult '$TestSetName';"
}
$dddbefore = Get-Date;Write-Warning("------->>BEFORE<<-------(tSQLt_Validate.ps1:Invoke-Tests:Invoke-SQLFileOrQuery[$($dddbefore|Get-Date -Format "yyyy:MM:dd;HH:mm:ss.fff")])")
$dddbefore = Get-Date;Write-Verbose("------->>BEFORE<<-------(tSQLt_Validate.ps1:Invoke-Tests:Invoke-SQLFileOrQuery[$($dddbefore|Get-Date -Format "yyyy:MM:dd;HH:mm:ss.fff")])")
# $parameters;
Invoke-SQLFileOrQuery @parameters;
$dddafter = Get-Date;Write-Warning("------->>After<<-------(tSQLt_Validate.ps1:Invoke-Tests:Invoke-SQLFileOrQuery[$($dddafter|Get-Date -Format "yyyy:MM:dd;HH:mm:ss.fff")])")
$dddafter-$dddbefore
$dddafter = Get-Date;Write-Verbose("------->>After<<-------(tSQLt_Validate.ps1:Invoke-Tests:Invoke-SQLFileOrQuery[$($dddafter|Get-Date -Format "yyyy:MM:dd;HH:mm:ss.fff")])")
Write-Verbose("Duration: $($dddafter-$dddbefore)")

}
Function Invoke-TestsFromFile
Expand Down