Skip to content

Commit 496a049

Browse files
committed
🔨 Add a powershell script to launch unit test and a sublime build for it #8
1 parent 3704ab4 commit 496a049

File tree

2 files changed

+135
-2
lines changed

2 files changed

+135
-2
lines changed

‎Plugin/InteropUnityCUDA.sublime-project

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
{
22
"folders": [
33
{
4-
"path": "."
4+
"path": ".",
55
}
66
],
77
"build_systems": [
88
{
9-
"name": "Run Unit-Test",
9+
"name": "PluginInteropUnity - Run Unit-Test",
1010
"target": "terminus_exec",
1111
"focus": true,
1212
"timeit": false,

‎Plugin/buildtools/runUnitTest.ps1

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
2+
. $PSScriptRoot\dependencies.ps1
3+
4+
function WaitUnity([System.Diagnostics.ProcessStartInfo] $processInfo, $targetName, $unityProjectPath) {
5+
$appdata = "$env:LOCALAPPDATA"
6+
$logPath = "$appdata\Unity\Editor\Editor.log"
7+
$processLogsPath = "$unityProjectPath\TestResults"
8+
9+
$processInfo.FileName = "$Env:UNITY_2021_3_17\Unity.exe"
10+
$processInfo.RedirectStandardError = "$processLogsPath\Error.log"
11+
$processInfo.RedirectStandardOutput = "$processLogsPath\Output.log"
12+
$processInfo.UseShellExecute = $false
13+
14+
$process = New-Object System.Diagnostics.Process
15+
$process.StartInfo = $processInfo
16+
$process.Start() | Out-Null
17+
Write-Host "Starting Unity project at $(Resolve-Path $unityProjectPath) (Id = $($process.Id)) ..."
18+
19+
$time = 0
20+
$displayTime = 10
21+
while (-Not ($process.HasExited)) {
22+
if (-not (Get-Process -Id $process.Id -ErrorAction SilentlyContinue)) {
23+
$process | Stop-Process -Force
24+
}
25+
else {
26+
Write-Host " Unity (Id = $($process.Id)) work in progress... Don't run away ! (time : $time s)"
27+
Start-Sleep -Seconds $displayTime;
28+
$time += $displayTime
29+
}
30+
31+
32+
# If a key was pressed during the loop execution, check to see if it was CTRL-C (aka "3")
33+
if ($Host.UI.RawUI.KeyAvailable -and (3 -eq [int]$Host.UI.RawUI.ReadKey("AllowCtrlC,IncludeKeyUp,NoEcho").Character)) {
34+
Write-Host ""
35+
Write-Warning "CTRL-C was used - Shutting down any running jobs before exiting the script."
36+
37+
# Force end of started process
38+
$process | Stop-Process -Force
39+
}
40+
}
41+
42+
if ($process.HasExited) {
43+
# Keep a local copy of Unity logs for each targets
44+
$unityLogsCopy = "$processLogsPath\$targetName.log"
45+
Copy-Item $logPath $unityLogsCopy
46+
47+
# Unity does not send valid keycode at the end of process operation
48+
# Instead use Unity ouput to try to get information about the operation
49+
if ($null -ne $(Select-String -Path $logPath -Pattern "another Unity instance is running" -SimpleMatch) -Or $process.ExitCode -ne 0) {
50+
Write-Host "Unity report an error. More information can be found in Unity editor logs." -ForegroundColor Red
51+
52+
if ($process.ExitCode -eq 1) {
53+
Write-Host "Unity builder command line interface report and error. Operation canceled" -ForegroundColor Red
54+
}
55+
}
56+
else {
57+
$time = $process.ExitTime
58+
Write-Host "Unity operation done in $time seconds" -ForegroundColor Green
59+
}
60+
61+
# Logs for each target
62+
Write-Host "Logs available at $(Resolve-Path $unityLogsCopy)"
63+
}
64+
else {
65+
Write-Host "User cancel request." -ForegroundColor Yellow
66+
}
67+
68+
return $process.ExitCode
69+
}
70+
71+
72+
73+
function RunUnitTestWithAPI($apiName) {
74+
[OutputType([Boolean])]
75+
$xmlPath = "$Env:INTEROP_UNITY_CUDA_UNITY_PROJECT_ROOT\TestResults\test_results.xml"
76+
77+
#if we see a previous xml containing result, we delete it
78+
if ((Test-Path -Path $xmlPath -PathType Leaf) -eq 1) {
79+
Remove-Item $xmlPath
80+
}
81+
82+
#https://docs.unity3d.com/Packages/com.unity.test-framework@1.1/manual/reference-command-line.html
83+
$cmdArgs = "-runTests", "-projectPath", "`"$Env:INTEROP_UNITY_CUDA_UNITY_PROJECT_ROOT`"",
84+
"-batchmode",
85+
"-force-$apiName",
86+
"-testResults", "`"$xmlPath`"",
87+
"-testPlatform", "PlayMode"
88+
89+
90+
91+
$pinfo = New-Object System.Diagnostics.ProcessStartInfo
92+
$pinfo.Arguments = $cmdArgs
93+
WaitUnity $pinfo "UnitTest_InteropUnityCUDA" $Env:INTEROP_UNITY_CUDA_UNITY_PROJECT_ROOT
94+
95+
[xml]$c = (Get-Content $xmlPath)
96+
# Display test results
97+
$details = $c.'test-run'.'test-suite'.'test-suite'.'test-suite'.'test-case' | Select-Object name, duration, result
98+
$details | Format-Table | Out-String | ForEach-Object { Write-Host $_ }
99+
Write-Host "Passed " $c.'test-run'.'passed' "/" $c.'test-run'.'total'
100+
$resultTest = $c.'test-run'.'passed' -eq $c.'test-run'.'total'
101+
if ($resultTest -eq $True) {
102+
Write-Host "Unit tests with $apiName have passed !" -ForegroundColor Green
103+
}
104+
else {
105+
Write-Host "Unit tests with $apiName have failed !" -ForegroundColor Red
106+
107+
}
108+
$resultTest
109+
}
110+
111+
$supportedGraphicsAPI = @("glcore", "d3d11") #, "d3d12"
112+
113+
Write-Host ""
114+
Write-Host "------------------------------" -ForegroundColor DarkMagenta
115+
Write-Host "Running : Unit tests" -ForegroundColor DarkMagenta
116+
Write-Host "------------------------------" -ForegroundColor DarkMagenta
117+
118+
$testsPassed = $True
119+
foreach ($api in $supportedGraphicsAPI) {
120+
Write-Host "Run test with graphics api : $api"
121+
$result = RunUnitTestWithAPI $api
122+
$testsPassed = $testsPassed -and $result[1]
123+
}
124+
125+
if ($testsPassed -eq $True) {
126+
Write-Host "All unit tests have passed !" -ForegroundColor Green
127+
}
128+
else {
129+
Write-Host "Some Unit tests with $apiName have failed !" -ForegroundColor Red
130+
131+
}
132+
133+
Exit $testsPassed

0 commit comments

Comments
 (0)