Skip to content

Commit 4c6001a

Browse files
authored
Enable AOT running of UnitTests; Migrate UnitTests from XUnit to MSTest Framework (#2257)
1 parent 39b97b6 commit 4c6001a

17 files changed

Lines changed: 1705 additions & 1603 deletions

build/AzurePipelineTemplates/CsWinRT-BuildAndTest-Stage-GitHub.yml

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ stages:
3030
ob_outputDirectory: '$(Build.SourcesDirectory)\out'
3131
ob_artifactSuffix: $(BuildConfiguration)_$(BuildPlatform)
3232
StagingFolder: $(ob_outputDirectory)
33+
3334
steps:
3435
- checkout: self
3536
clean: true
@@ -48,8 +49,6 @@ stages:
4849
# Run Functional Tests
4950
- template: CsWinRT-FunctionalTest-Steps.yml@self
5051
parameters:
51-
BuildConfiguration: $(BuildConfiguration)
52-
BuildPlatform: $(BuildPlatform)
5352
FunctionalTests:
5453
- JsonValueFunctionCalls
5554
- ClassActivation
@@ -62,10 +61,7 @@ stages:
6261
- CCW
6362
- TypeMarshaling
6463

65-
# - template: CsWinRT-Test-Steps.yml@self
66-
# parameters:
67-
# BuildConfiguration: $(BuildConfiguration)
68-
# BuildPlatform: $(BuildPlatform)
64+
- template: CsWinRT-Test-Steps.yml@self
6965

7066
templateContext:
7167
outputs:

build/AzurePipelineTemplates/CsWinRT-FunctionalTest-Steps.yml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
11
parameters:
2-
- name: "BuildConfiguration"
3-
type: string
4-
- name: "BuildPlatform"
5-
type: string
62
- name: "FunctionalTests"
73
type: object
84
default:

build/AzurePipelineTemplates/CsWinRT-Test-Steps.yml

Lines changed: 71 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,3 @@
1-
parameters:
2-
- name: "BuildConfiguration"
3-
type: string
4-
- name: "BuildPlatform"
5-
type: string
61

72
steps:
83
# Enable GC stress
@@ -14,14 +9,26 @@ steps:
149
script: |
1510
Write-Host "##vso[task.setvariable variable=DOTNET_GCStress;]0xC"
1611
12+
- task: UseDotNet@2
13+
displayName: Use .NET Core SDK 10.0 x86
14+
condition: eq(variables['BuildPlatform'], 'x86')
15+
inputs:
16+
packageType: sdk
17+
version: 10.x
18+
installationPath: $(LocalAppData)\Microsoft\dotnet\x86\
19+
env:
20+
PROCESSOR_ARCHITECTURE: x86
21+
1722
# Run Unit Tests
1823
- task: DotNetCoreCLI@2
1924
displayName: Run Unit Tests
2025
condition: and(succeeded(), or(eq(variables['BuildPlatform'], 'x86'), eq(variables['BuildPlatform'], 'x64')))
2126
inputs:
2227
command: test
2328
projects: 'src/Tests/UnitTest/UnitTest.csproj'
24-
arguments: --diag $(Build.ArtifactStagingDirectory)\unittest\test.log --no-build --logger xunit;LogFilePath=UNITTEST-$(Build.BuildNumber).xml /nologo /m /p:platform=$(BuildPlatform);configuration=$(BuildConfiguration);CIBuildReason=CI -- RunConfiguration.TreatNoTestsAsError=true
29+
arguments: >
30+
/p:platform=$(BuildPlatform);configuration=$(BuildConfiguration)
31+
--no-build
2532
testRunTitle: Unit Tests
2633

2734
# Run Host Tests
@@ -57,11 +64,66 @@ steps:
5764
dir _build\$(BuildPlatform)\$(BuildConfiguration)\AuthoringWuxConsumptionTest\bin
5865
_build\$(BuildPlatform)\$(BuildConfiguration)\AuthoringWuxConsumptionTest\bin\AuthoringWuxConsumptionTest.exe --gtest_output=xml:AUTHORINGWUXTEST-$(Build.BuildNumber).xml
5966
67+
- task: UseDotNet@2
68+
displayName: Use .NET Core SDK 10.0
69+
inputs:
70+
packageType: sdk
71+
version: 10.x
72+
installationPath: $(LocalAppData)\Microsoft\dotnet\
73+
74+
- task: MSBuild@1
75+
displayName: Restore cswinrt.slnx
76+
condition: and(succeeded(), or(eq(variables['BuildConfiguration'], 'release'), eq(variables['BuildPlatform'], 'x64')))
77+
inputs:
78+
solution: $(Build.SourcesDirectory)\src\cswinrt.slnx
79+
msbuildArguments: /t:restore /p:RuntimeIdentifier=win-$(BuildPlatform),RestorePackagesConfig=true,TargetFramework=net10.0,solutiondir=$(Build.SourcesDirectory)\src\,GenerateTestProjection=true
80+
platform: $(BuildPlatform)
81+
configuration: $(BuildConfiguration)
82+
83+
- task: MSBuild@1
84+
displayName: Restore WinRT.Generator.Tasks.csproj
85+
condition: and(succeeded(), and(eq(variables['BuildConfiguration'], 'release'), eq(variables['BuildPlatform'], 'x64')))
86+
inputs:
87+
solution: $(Build.SourcesDirectory)\src\WinRT.Generator.Tasks\WinRT.Generator.Tasks.csproj
88+
msbuildArguments: /t:restore /p:RuntimeIdentifier=win-$(BuildPlatform),TargetFramework=netstandard2.0,solutiondir=$(Build.SourcesDirectory)\src\,GenerateTestProjection=true
89+
platform: $(BuildPlatform)
90+
configuration: $(BuildConfiguration)
91+
92+
- task: MSBuild@1
93+
displayName: Publish UnitTests for AOT (net10.0)
94+
condition: and(succeeded(), and(eq(variables['BuildConfiguration'], 'release'), eq(variables['BuildPlatform'], 'x64')))
95+
inputs:
96+
solution: $(Build.SourcesDirectory)\src\Tests\UnitTest\UnitTest.csproj
97+
msbuildArguments: /t:publish /p:RuntimeIdentifier=win-$(BuildPlatform),TargetFramework=net10.0,solutiondir=$(Build.SourcesDirectory)\src\,GenerateTestProjection=true,BuildToolArch=$(CsWinRTBuildToolsArch),VersionNumber=$(VersionNumber),VersionString=$(Build.BuildNumber),AssemblyVersionNumber=$(WinRT.Runtime.AssemblyVersion),AllowedReferenceRelatedFileExtensions=".xml;.pri;.dll.config;.exe.config"
98+
platform: $(BuildPlatform)
99+
configuration: $(BuildConfiguration)
100+
101+
- task: CmdLine@2
102+
displayName: Run UnitTest for AOT (net10.0)
103+
continueOnError: True
104+
condition: and(succeeded(), and(eq(variables['BuildConfiguration'], 'release'), eq(variables['BuildPlatform'], 'x64')))
105+
inputs:
106+
workingDirectory: $(Build.SourcesDirectory)\src\Tests\UnitTest\bin\$(BuildPlatform)\$(BuildConfiguration)\net10.0\win-$(BuildPlatform)\publish
107+
script: |
108+
dir
109+
echo Running UnitTest.exe
110+
UnitTest.exe --report-trx --report-trx-filename UNITTEST-AOT-$(Build.BuildNumber).trx
111+
if %Errorlevel% NEQ 100 (
112+
exit /b !ErrorLevel!
113+
)
114+
exit /b 0
115+
116+
- task: PublishTestResults@2
117+
displayName: Publish UnitTest AOT (net10.0) Results
118+
condition: and(always(), and(eq(variables['BuildConfiguration'], 'release'), eq(variables['BuildPlatform'], 'x64')))
119+
inputs:
120+
testResultsFormat: VSTest
121+
testResultsFiles: '**/UNITTEST-AOT-$(Build.BuildNumber).trx'
122+
searchFolder: $(Build.SourcesDirectory)\src\Tests\UnitTest\bin\$(BuildPlatform)\$(BuildConfiguration)\net10.0\win-$(BuildPlatform)\publish\TestResults
123+
testRunTitle: Unit Tests AOT (net10.0)
124+
60125
# Run Functional Tests
61126
- template: CsWinRT-FunctionalTest-Steps.yml@self
62-
parameters:
63-
BuildConfiguration: $(BuildConfiguration)
64-
BuildPlatform: $(BuildPlatform)
65127

66128
# Disable GC stress
67129
- task: PowerShell@2

global.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"test": {
3+
"runner": "Microsoft.Testing.Platform"
4+
},
5+
"sdk": {
6+
"allowPrerelease": true
7+
}
8+
}

src/Directory.Packages.props

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,6 @@
3535
<PackageVersion Include="Microsoft.WindowsAppSDK.InteractiveExperiences" Version="$(MicrosoftWinAppSDKIxpVersion)" />
3636
<PackageVersion Include="Microsoft.WindowsAppSDK.WinUI" Version="$(MicrosoftWinAppSDKWinUIVersion)" />
3737
<PackageVersion Include="Mono.Cecil" Version="0.11.6" />
38-
<PackageVersion Include="MSTest.TestAdapter" Version="3.10.1" />
39-
<PackageVersion Include="MSTest.TestFramework" Version="3.10.1" />
4038
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
4139
<PackageVersion Include="NUnit" Version="3.12.0" />
4240
<PackageVersion Include="NUnit3TestAdapter" Version="3.16.1" />
@@ -52,5 +50,12 @@
5250
<PackageVersion Include="xunit.runner.console" Version="2.9.3" />
5351
<PackageVersion Include="xunit.runner.visualstudio" Version="3.1.3" />
5452
<PackageVersion Include="XunitXml.TestLogger" Version="6.1.0" />
53+
<PackageVersion Include="MSTest.TestAdapter" Version="4.1.0" />
54+
<PackageVersion Include="MSTest.TestFramework" Version="4.1.0" />
55+
<PackageVersion Include="MSTest.Analyzers" Version="4.1.0" />
56+
<PackageVersion Include="MSTest.Engine" Version="2.0.0-alpha.26103.11" />
57+
<PackageVersion Include="MSTest.SourceGeneration" Version="2.0.0-alpha.26103.11" />
58+
<PackageVersion Include="Microsoft.Testing.Extensions.TrxReport" Version="2.1.0" />
59+
<PackageVersion Include="Microsoft.Testing.Platform.MSBuild" Version="2.1.0" />
5560
</ItemGroup>
5661
</Project>

src/Tests/UnitTest/ApiCompatTests.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
using System.Numerics;
1010
using System.Threading;
1111
using System.Threading.Tasks;
12-
using Xunit;
1312
using WinRT;
1413

1514
using WFC = Windows.Foundation.Collections;
@@ -33,16 +32,17 @@ namespace UnitTest
3332
using A = IEnumerable<IStringable>;
3433
using B = KeyValuePair<string, IAsyncOperationWithProgress</*A*/IEnumerable<IStringable>, float>>;
3534

35+
[TestClass]
3636
public class TestAPIs
3737
{
3838

39-
[Fact]
39+
[TestMethod]
4040
public void TestCalendarAPIs()
4141
{
4242
List<string> languages = new List<string>();
4343
languages.Add("en-us");
4444
Calendar cal = new Calendar(languages);
45-
Assert.NotEqual("", cal.DayOfWeekAsString());
45+
Assert.AreNotEqual("", cal.DayOfWeekAsString());
4646
}
4747

4848
#if ENABLE_WORKSTATION_TESTS
@@ -74,7 +74,7 @@ async Task InvokeGeolocation()
7474
}
7575
}
7676

77-
[Fact]
77+
[TestMethod]
7878
public void TestGeolocation()
7979
{
8080
Assert.True(InvokeGeolocation().Wait(1000));
@@ -93,7 +93,7 @@ async Task InvokeDeviceEnumeration()
9393
}
9494
}
9595

96-
[Fact]
96+
[TestMethod]
9797
public void TestDeviceEnumeration()
9898
{
9999
Assert.True(InvokeDeviceEnumeration().Wait(5*1000));
@@ -129,13 +129,13 @@ async Task ValidateFileIO()
129129
Assert.NotNull(propValue);
130130
}
131131

132-
[Fact]
132+
[TestMethod]
133133
public void TestFileIO()
134134
{
135135
Assert.True(ValidateFileIO().Wait(5 * 1000));
136136
}
137137

138-
[Fact]
138+
[TestMethod]
139139
public void TestJSONAPIs()
140140
{
141141
string sampleText = "{\r\n" +
Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,6 @@
11
using System;
22
using System.Runtime.InteropServices;
33
using System.Runtime.InteropServices.Marshalling;
4-
using Windows.ApplicationModel.DataTransfer.DragDrop.Core;
5-
using Windows.Graphics.Display;
6-
using Windows.Graphics.Printing;
7-
using Windows.Media;
8-
using Windows.Media.PlayTo;
9-
using Windows.Security.Authentication.Web.Core;
10-
using Windows.Security.Credentials;
11-
using Windows.Security.Credentials.UI;
12-
using Windows.UI.ApplicationSettings;
13-
using Windows.UI.Input;
14-
using Windows.UI.Input.Core;
15-
using Windows.UI.Input.Spatial;
16-
using Windows.UI.ViewManagement;
17-
using Xunit;
18-
using WinRT;
194
using TestComponentCSharp;
205

216
namespace UnitTest
@@ -27,28 +12,30 @@ internal partial interface IComInteropGenerated
2712
Int64 ReturnWindowHandle(IntPtr hwnd, Guid iid);
2813
}
2914

15+
[TestClass]
3016
public class ComGenerationTests
3117
{
3218
private static readonly Guid IID_IComInterop = new Guid("15651B9F-6C6B-4CC0-944C-C7D7B0F36F81");
3319

34-
[Fact]
20+
[TestMethod]
3521
public void TestHWND()
3622
{
3723
var comInterop = (IComInteropGenerated)(object)Class.ComInterop;
38-
if (System.Environment.Is64BitProcess)
24+
25+
if (Environment.Is64BitProcess)
3926
{
4027
var hwnd = new IntPtr(0x0123456789ABCDEF);
4128
var value = comInterop.ReturnWindowHandle(hwnd, IID_IComInterop);
4229
var hwndValue = hwnd.ToInt64();
43-
Assert.Equal(hwndValue, value);
30+
Assert.AreEqual(hwndValue, value);
4431
}
4532
else
4633
{
4734
var hwnd = new IntPtr(0x01234567);
4835
var value = comInterop.ReturnWindowHandle(hwnd, IID_IComInterop);
4936
var hwndValue = hwnd.ToInt32();
50-
Assert.Equal(hwndValue, value);
37+
Assert.AreEqual(hwndValue, value);
5138
}
5239
}
5340
}
54-
}
41+
}

0 commit comments

Comments
 (0)