parameters: - name: configuration type: string default: "Release" - name: platform type: string default: "" - name: inputArtifactStem type: string default: "" - name: useLatestWebView2 type: boolean default: false - name: useLatestOfficialBuild type: boolean default: true - name: useCurrentBranchBuild type: boolean default: false - name: uiTestModules type: object default: [] - name: installMode type: string default: 'machine' values: - 'machine' - 'peruser' - name: jobSuffix type: string default: '' jobs: - job: Test${{ parameters.platform }}${{ parameters.configuration }}${{ parameters.jobSuffix }} displayName: Test ${{ parameters.platform }} ${{ parameters.configuration }}${{ parameters.jobSuffix }} timeoutInMinutes: 300 variables: ${{ if or(eq(parameters.platform, 'x64Win10'), eq(parameters.platform, 'x64Win11')) }}: BuildPlatform: x64 ${{ else }}: BuildPlatform: ${{ parameters.platform }} TestPlatform: ${{ parameters.platform }} BuildConfiguration: ${{ parameters.configuration }} SrcPath: $(Build.Repository.LocalPath) TestArtifactsName: build-${{ variables.BuildPlatform }}-${{ parameters.configuration }}${{ parameters.inputArtifactStem }} pool: ${{ if eq(variables['System.CollectionId'], 'cb55739e-4afe-46a3-970f-1b49d8ee7564') }}: ${{ if ne(parameters.platform, 'ARM64') }}: name: SHINE-INT-Testing-x64 ${{ if eq(parameters.platform, 'x64Win11') }}: demands: ImageOverride -equals SHINE-W11-Testing ${{ else }}: name: SHINE-INT-Testing-arm64 ${{ else }}: ${{ if ne(parameters.platform, 'ARM64') }}: name: SHINE-OSS-Testing-x64 ${{ if eq(parameters.platform, 'x64Win11') }}: demands: ImageOverride -equals SHINE-W11-Testing ${{ else }}: name: SHINE-OSS-Testing-arm64 steps: - checkout: self submodules: false clean: true fetchDepth: 1 fetchTags: false - ${{ if eq(parameters.useLatestWebView2, true) }}: - powershell: | $edge_url = 'https://go.microsoft.com/fwlink/?linkid=2084649&Channel=Canary&language=en' $timeout = New-TimeSpan -Minutes 6 $timeoutSeconds = [int]$timeout.TotalSeconds $command = { Invoke-WebRequest -Uri $using:edge_url -OutFile $(Pipeline.Workspace)\MicrosoftEdgeSetup.exe Write-Host "##[command]Installing Canary channel of Microsoft Edge" Start-Process $(Pipeline.Workspace)\MicrosoftEdgeSetup.exe -ArgumentList '/silent /install' -Wait } $job = Start-Job -ScriptBlock $command Wait-Job $job -Timeout $timeoutSeconds if ($job.State -eq "Running") { Stop-Job $job Write-Host "##[warning]The job was stopped because it exceeded the time limit." } displayName: "Install the latest MSEdge Canary" - script: reg add "HKLM\Software\Policies\Microsoft\Edge\WebView2\ReleaseChannels" /v PowerToys.exe /t REG_SZ /d "3" displayName: "Enable WebView2 Canary Channel" - ${{ if ne(parameters.platform, 'arm64') }}: - download: current displayName: Download artifacts artifact: $(TestArtifactsName) patterns: |- ** !**\*.pdb !**\*.lib - ${{ else }}: - template: steps-download-artifacts-with-azure-cli.yml parameters: artifactName: $(TestArtifactsName) - template: steps-ensure-dotnet-version.yml parameters: sdk: true version: '9.0' - task: VisualStudioTestPlatformInstaller@1 displayName: Ensure VSTest Platform - pwsh: |- & '$(build.sourcesdirectory)\.pipelines\InstallWinAppDriver.ps1' displayName: Download and install WinAppDriver - ${{ if eq(parameters.useLatestOfficialBuild, true) }}: - task: DownloadPipelineArtifact@2 inputs: buildType: 'specific' project: 'Dart' definition: '76541' buildVersionToDownload: 'latestFromBranch' ${{ if eq(parameters.useCurrentBranchBuild, true) }}: branchName: '$(Build.SourceBranch)' ${{ else }}: branchName: 'refs/heads/main' artifactName: 'build-$(BuildPlatform)-Release' targetPath: '$(Build.ArtifactStagingDirectory)' ${{ if eq(parameters.installMode, 'peruser') }}: patterns: | **/PowerToysUserSetup*.exe ${{ else }}: patterns: | **/PowerToysSetup*.exe - ${{ if eq(parameters.useLatestOfficialBuild, true) }}: - ${{ if eq(parameters.installMode, 'peruser') }}: - pwsh: |- & "$(build.sourcesdirectory)\.pipelines\installPowerToys.ps1" -InstallMode "PerUser" displayName: Install PowerToys (Per-User) - ${{ if eq(parameters.installMode, 'machine') }}: - pwsh: |- & "$(build.sourcesdirectory)\.pipelines\installPowerToys.ps1" -InstallMode "Machine" displayName: Install PowerToys (Machine-Level) - ${{ if ne(parameters.platform, 'arm64') }}: - task: ScreenResolutionUtility@1 inputs: displaySettings: 'optimal' - ${{ if eq(length(parameters.uiTestModules), 0) }}: - task: VSTest@3 displayName: Run UI Tests inputs: platform: '$(BuildPlatform)' configuration: '$(BuildConfiguration)' testSelector: 'testAssemblies' searchFolder: '$(Pipeline.Workspace)\$(TestArtifactsName)' vsTestVersion: 'toolsInstaller' uiTests: true rerunFailedTests: true # Since UITests-FancyZonesEditor.dll is generated in both UITests-FancyZonesEditor and UITests-FancyZones, removed one to avoid duplicate test runs testAssemblyVer2: | **\*UITest*.dll !**\obj\** !**\ref\** !**\UITests-FancyZones\**\UITests-FancyZonesEditor.dll env: platform: '$(TestPlatform)' useInstallerForTest: ${{ parameters.useLatestOfficialBuild }} - ${{ if ne(length(parameters.uiTestModules), 0) }}: - ${{ each module in parameters.uiTestModules }}: - task: VSTest@3 displayName: Run UI Test - ${{ module }} inputs: platform: '$(BuildPlatform)' configuration: '$(BuildConfiguration)' testSelector: 'testAssemblies' searchFolder: '$(Pipeline.Workspace)\$(TestArtifactsName)' vsTestVersion: 'toolsInstaller' uiTests: true rerunFailedTests: true testAssemblyVer2: | **\*${{ module }}*.dll !**\obj\** !**\ref\** !**\UITests-FancyZones\**\UITests-FancyZonesEditor.dll env: platform: '$(TestPlatform)' useInstallerForTest: ${{ parameters.useLatestOfficialBuild }}