Files

159 lines
5.5 KiB
PowerShell

Set-Variable DefaultRestoreTimeoutInSeconds 20 -Option Constant
function Test-NetCoreProjectExecuteInitScriptOnInstall {
param($context)
Remove-Variable PackageInitPS1Var -Scope Global -Force -ErrorAction Ignore
$componentModel = Get-VSComponentModel
$restoreEvents = $componentModel.GetService([NuGet.VisualStudio.IRestoreEvents])
$restoreEvent = $null
Get-Event | Remove-Event
Register-ObjectEvent -InputObject $restoreEvents -EventName SolutionRestoreCompleted -SourceIdentifier RestoreEventSource
Try {
$p = New-NetCoreConsoleApp
# Wait for initial restore
$restoreEvent = Wait-Event -SourceIdentifier RestoreEventSource -TimeoutSec $DefaultRestoreTimeoutInSeconds
Assert-NotNull $restoreEvent
Assert-AreEqual 'Succeeded' $restoreEvent.SourceEventArgs.RestoreStatus
# Act
$p | Install-Package PackageInitPS1 -Source $context.RepositoryRoot
$restoreEvent = Wait-Event -SourceIdentifier RestoreEventSource -TimeoutSec $DefaultRestoreTimeoutInSeconds
Assert-NotNull $restoreEvent
Assert-AreEqual 'Succeeded' $restoreEvent.SourceEventArgs.RestoreStatus
Assert-AreEqual 1 $global:PackageInitPS1Var
}
Finally {
Unregister-Event RestoreEventSource
}
}
function Test-NetCoreProjectExecuteInitScriptOnlyOnce {
[SkipTest('https://github.com/NuGet/Home/issues/7891')]
param($context)
Remove-Variable PackageInitPS1Var -Scope Global -Force -ErrorAction Ignore
$componentModel = Get-VSComponentModel
$restoreEvents = $componentModel.GetService([NuGet.VisualStudio.IRestoreEvents])
$restoreEvent = $null
Get-Event | Remove-Event
Register-ObjectEvent -InputObject $restoreEvents -EventName SolutionRestoreCompleted -SourceIdentifier RestoreEventSource
Try {
$p = New-NetCoreConsoleApp
# Wait for initial restore
Wait-Event -SourceIdentifier RestoreEventSource -TimeoutSec $DefaultRestoreTimeoutInSeconds
$p | Install-Package PackageInitPS1 -Source $context.RepositoryRoot
Wait-Event -SourceIdentifier RestoreEventSource -TimeoutSec $DefaultRestoreTimeoutInSeconds
# Act
$p | Install-Package NuGet.Versioning -Version 3.5.0
$restoreEvent = Wait-Event -SourceIdentifier RestoreEventSource -TimeoutSec $DefaultRestoreTimeoutInSeconds
Assert-NotNull $restoreEvent
Assert-AreEqual 'Succeeded' $restoreEvent.SourceEventArgs.RestoreStatus
Assert-AreEqual 1 $global:PackageInitPS1Var
}
Finally {
Unregister-Event RestoreEventSource
}
}
function Test-NetCoreProjectExecuteInitScriptAfterReopen {
[SkipTest('Needs diagnostics event. NuGet/Home#5625')]
param($context)
$componentModel = Get-VSComponentModel
$restoreEvents = $componentModel.GetService([NuGet.VisualStudio.IRestoreEvents])
$restoreEvent = $null
Get-Event | Remove-Event
Register-ObjectEvent -InputObject $restoreEvents -EventName SolutionRestoreCompleted -SourceIdentifier RestoreEventSource
Try {
$p = New-NetCoreConsoleApp
# Wait for initial restore
Wait-Event -SourceIdentifier RestoreEventSource -TimeoutSec $DefaultRestoreTimeoutInSeconds
$p | Install-Package PackageInitPS1 -Source $context.RepositoryRoot
Wait-Event -SourceIdentifier RestoreEventSource -TimeoutSec $DefaultRestoreTimeoutInSeconds
$p.Save($p.FullName)
$solutionFile = Get-SolutionFullName
SaveAs-Solution $solutionFile
Close-Solution
Remove-Variable PackageInitPS1Var -Scope Global -Force -ErrorAction Ignore
# Reset script execution cache
New-NetCoreConsoleApp
Wait-Event -SourceIdentifier RestoreEventSource -TimeoutSec $DefaultRestoreTimeoutInSeconds
Close-Solution
# Act
Open-Solution $solutionFile
Wait-ForSolutionLoad
$restoreEvent = Wait-Event -SourceIdentifier RestoreEventSource -TimeoutSec $DefaultRestoreTimeoutInSeconds
Assert-NotNull $restoreEvent
Assert-AreEqual 'Succeeded' $restoreEvent.SourceEventArgs.RestoreStatus
Write-Verbose "Sleeping to let the host execute init scripts..."
Start-Sleep -s 10
Assert-AreEqual 1 $global:PackageInitPS1Var
}
Finally {
Unregister-Event RestoreEventSource
}
}
function Test-NetCoreProjectExecuteInitScriptOnSolutionRestore {
[SkipTest('Needs diagnostics event. NuGet/Home#5625')]
param($context)
$componentModel = Get-VSComponentModel
$restoreEvents = $componentModel.GetService([NuGet.VisualStudio.IRestoreEvents])
$restoreEvent = $null
Get-Event | Remove-Event
Register-ObjectEvent -InputObject $restoreEvents -EventName SolutionRestoreCompleted -SourceIdentifier RestoreEventSource
Try {
$p = New-NetCoreConsoleApp
# Wait for initial restore
Wait-Event -SourceIdentifier RestoreEventSource -TimeoutSec $DefaultRestoreTimeoutInSeconds
$p | Install-Package PackageInitPS1 -Source $context.RepositoryRoot
Wait-Event -SourceIdentifier RestoreEventSource -TimeoutSec $DefaultRestoreTimeoutInSeconds
Remove-Variable PackageInitPS1Var -Scope Global -Force -ErrorAction Ignore
# Act
Build-Solution
$restoreEvent = Wait-Event -SourceIdentifier RestoreEventSource -TimeoutSec $DefaultRestoreTimeoutInSeconds
Assert-NotNull $restoreEvent
Assert-AreEqual 'Succeeded' $restoreEvent.SourceEventArgs.RestoreStatus
Assert-Null $global:PackageInitPS1Var
}
Finally {
Unregister-Event RestoreEventSource
}
}