Skip to content

Commit d1debed

Browse files
[TrimmableTypeMap] Wire integration tests into solution and CI
Add IntegrationTests and UserTypesFixture projects to Xamarin.Android.sln. Add CI step to run integration tests and publish results. Add InternalsVisibleTo for the integration test assembly. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent e46a93d commit d1debed

File tree

4 files changed

+44
-11
lines changed

4 files changed

+44
-11
lines changed

Xamarin.Android.sln

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xamarin.ProjectTools", "src
5959
EndProject
6060
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xamarin.Android.Build.Tests", "src\Xamarin.Android.Build.Tasks\Tests\Xamarin.Android.Build.Tests\Xamarin.Android.Build.Tests.csproj", "{53E4ABF0-1085-45F9-B964-DCAE4B819998}"
6161
EndProject
62+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Android.Sdk.TrimmableTypeMap.IntegrationTests", "tests\Microsoft.Android.Sdk.TrimmableTypeMap.IntegrationTests\Microsoft.Android.Sdk.TrimmableTypeMap.IntegrationTests.csproj", "{A14CB0A1-7A05-4F27-88B2-383798CE1DEE}"
63+
EndProject
64+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UserTypesFixture", "tests\Microsoft.Android.Sdk.TrimmableTypeMap.IntegrationTests\UserTypesFixture\UserTypesFixture.csproj", "{2498F8A0-AA04-40EF-8691-59BBD2396B4D}"
65+
EndProject
6266
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "class-parse", "external\Java.Interop\tools\class-parse\class-parse.csproj", "{38C762AB-8FD1-44DE-9855-26AAE7129DC3}"
6367
EndProject
6468
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "logcat-parse", "external\Java.Interop\tools\logcat-parse\logcat-parse.csproj", "{7387E151-48E3-4885-B2CA-A74434A34045}"
@@ -231,6 +235,14 @@ Global
231235
{53E4ABF0-1085-45F9-B964-DCAE4B819998}.Debug|AnyCPU.Build.0 = Debug|Any CPU
232236
{53E4ABF0-1085-45F9-B964-DCAE4B819998}.Release|AnyCPU.ActiveCfg = Release|Any CPU
233237
{53E4ABF0-1085-45F9-B964-DCAE4B819998}.Release|AnyCPU.Build.0 = Release|Any CPU
238+
{A14CB0A1-7A05-4F27-88B2-383798CE1DEE}.Debug|AnyCPU.ActiveCfg = Debug|Any CPU
239+
{A14CB0A1-7A05-4F27-88B2-383798CE1DEE}.Debug|AnyCPU.Build.0 = Debug|Any CPU
240+
{A14CB0A1-7A05-4F27-88B2-383798CE1DEE}.Release|AnyCPU.ActiveCfg = Release|Any CPU
241+
{A14CB0A1-7A05-4F27-88B2-383798CE1DEE}.Release|AnyCPU.Build.0 = Release|Any CPU
242+
{2498F8A0-AA04-40EF-8691-59BBD2396B4D}.Debug|AnyCPU.ActiveCfg = Debug|Any CPU
243+
{2498F8A0-AA04-40EF-8691-59BBD2396B4D}.Debug|AnyCPU.Build.0 = Debug|Any CPU
244+
{2498F8A0-AA04-40EF-8691-59BBD2396B4D}.Release|AnyCPU.ActiveCfg = Release|Any CPU
245+
{2498F8A0-AA04-40EF-8691-59BBD2396B4D}.Release|AnyCPU.Build.0 = Release|Any CPU
234246
{38C762AB-8FD1-44DE-9855-26AAE7129DC3}.Debug|AnyCPU.ActiveCfg = Debug|Any CPU
235247
{38C762AB-8FD1-44DE-9855-26AAE7129DC3}.Debug|AnyCPU.Build.0 = Debug|Any CPU
236248
{38C762AB-8FD1-44DE-9855-26AAE7129DC3}.Release|AnyCPU.ActiveCfg = Release|Any CPU
@@ -398,6 +410,8 @@ Global
398410
{645E1718-C8C4-4C23-8A49-5A37E4ECF7ED} = {04E3E11E-B47D-4599-8AFC-50515A95E715}
399411
{2DD1EE75-6D8D-4653-A800-0A24367F7F38} = {CAB438D8-B0F5-4AF0-BEBD-9E2ADBD7B483}
400412
{53E4ABF0-1085-45F9-B964-DCAE4B819998} = {CAB438D8-B0F5-4AF0-BEBD-9E2ADBD7B483}
413+
{A14CB0A1-7A05-4F27-88B2-383798CE1DEE} = {CAB438D8-B0F5-4AF0-BEBD-9E2ADBD7B483}
414+
{2498F8A0-AA04-40EF-8691-59BBD2396B4D} = {CAB438D8-B0F5-4AF0-BEBD-9E2ADBD7B483}
401415
{38C762AB-8FD1-44DE-9855-26AAE7129DC3} = {864062D3-A415-4A6F-9324-5820237BA058}
402416
{7387E151-48E3-4885-B2CA-A74434A34045} = {864062D3-A415-4A6F-9324-5820237BA058}
403417
{8A6CB07C-E493-4A4F-AB94-038645A27118} = {E351F97D-EA4F-4E7F-AAA0-8EBB1F2A4A62}

build-tools/automation/yaml-templates/build-windows-steps.yaml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,21 @@ steps:
7777
testRunTitle: Microsoft.Android.Sdk.Analysis.Tests
7878
continueOnError: true
7979

80+
- template: /build-tools/automation/yaml-templates/run-dotnet-preview.yaml@self
81+
parameters:
82+
command: test
83+
project: bin/Test$(XA.Build.Configuration)/$(DotNetTargetFramework)/Microsoft.Android.Sdk.TrimmableTypeMap.IntegrationTests.dll
84+
arguments: --logger trx --results-directory $(Agent.TempDirectory)/trimmable-typemap-integration-tests
85+
displayName: Test Microsoft.Android.Sdk.TrimmableTypeMap.IntegrationTests $(XA.Build.Configuration)
86+
87+
- task: PublishTestResults@2
88+
displayName: publish Microsoft.Android.Sdk.TrimmableTypeMap.IntegrationTests results
89+
condition: always()
90+
inputs:
91+
testResultsFormat: VSTest
92+
testResultsFiles: "$(Agent.TempDirectory)/trimmable-typemap-integration-tests/*.trx"
93+
testRunTitle: Microsoft.Android.Sdk.TrimmableTypeMap.IntegrationTests
94+
8095
- task: BatchScript@1
8196
displayName: Test dotnet-local.cmd - create template
8297
inputs:

src/Xamarin.Android.Build.Tasks/Properties/AssemblyInfo.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,4 @@
2020

2121
[assembly: InternalsVisibleTo ("Xamarin.Android.Build.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000011000000438ac2a5acfbf16cbd2b2b47a62762f273df9cb2795ceccdf77d10bf508e69e7a362ea7a45455bbf3ac955e1f2e2814f144e5d817efc4c6502cc012df310783348304e3ae38573c6d658c234025821fda87a0be8a0d504df564e2c93b2b878925f42503e9d54dfef9f9586d9e6f38a305769587b1de01f6c0410328b2c9733db")]
2222
[assembly: InternalsVisibleTo ("MSBuildDeviceIntegration, PublicKey=0024000004800000940000000602000000240000525341310004000011000000438ac2a5acfbf16cbd2b2b47a62762f273df9cb2795ceccdf77d10bf508e69e7a362ea7a45455bbf3ac955e1f2e2814f144e5d817efc4c6502cc012df310783348304e3ae38573c6d658c234025821fda87a0be8a0d504df564e2c93b2b878925f42503e9d54dfef9f9586d9e6f38a305769587b1de01f6c0410328b2c9733db")]
23+
[assembly: InternalsVisibleTo ("Microsoft.Android.Sdk.TrimmableTypeMap.IntegrationTests, PublicKey=0024000004800000940000000602000000240000525341310004000011000000438ac2a5acfbf16cbd2b2b47a62762f273df9cb2795ceccdf77d10bf508e69e7a362ea7a45455bbf3ac955e1f2e2814f144e5d817efc4c6502cc012df310783348304e3ae38573c6d658c234025821fda87a0be8a0d504df564e2c93b2b878925f42503e9d54dfef9f9586d9e6f38a305769587b1de01f6c0410328b2c9733db")]

tests/Microsoft.Android.Sdk.TrimmableTypeMap.IntegrationTests/ScannerComparisonTests.cs

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ public void ExactMarshalMethods_MonoAndroid ()
251251
var extraMethods = new List<string> ();
252252
var connectorMismatches = new List<string> ();
253253

254-
foreach (var javaName in allJavaNames.OrderBy (n => n)) {
254+
foreach (var javaName in allJavaNames.OrderBy (n => n, StringComparer.Ordinal)) {
255255
var inLegacy = legacyMethods.TryGetValue (javaName, out var legacyGroups);
256256
var inNew = newMethods.TryGetValue (javaName, out var newGroups);
257257

@@ -378,7 +378,7 @@ public void ExactBaseJavaNames_MonoAndroid ()
378378
var mismatches = new List<string> ();
379379
int compared = 0;
380380

381-
foreach (var managedName in allManagedNames.OrderBy (n => n)) {
381+
foreach (var managedName in allManagedNames.OrderBy (n => n, StringComparer.Ordinal)) {
382382
var legacy = legacyData [managedName];
383383
var newInfo = newData [managedName];
384384

@@ -433,7 +433,7 @@ public void ExactImplementedInterfaces_MonoAndroid ()
433433
var extraInterfaces = new List<string> ();
434434
int compared = 0;
435435

436-
foreach (var managedName in allManagedNames.OrderBy (n => n)) {
436+
foreach (var managedName in allManagedNames.OrderBy (n => n, StringComparer.Ordinal)) {
437437
var legacy = legacyData [managedName];
438438
var newInfo = newData [managedName];
439439

@@ -477,7 +477,7 @@ public void ExactActivationCtors_MonoAndroid ()
477477
int compared = 0;
478478
int withActivationCtor = 0;
479479

480-
foreach (var managedName in allManagedNames.OrderBy (n => n)) {
480+
foreach (var managedName in allManagedNames.OrderBy (n => n, StringComparer.Ordinal)) {
481481
var legacy = legacyData [managedName];
482482
var newInfo = newData [managedName];
483483

@@ -530,7 +530,7 @@ public void ExactJavaConstructors_MonoAndroid ()
530530
int compared = 0;
531531
int totalCtors = 0;
532532

533-
foreach (var managedName in allManagedNames.OrderBy (n => n)) {
533+
foreach (var managedName in allManagedNames.OrderBy (n => n, StringComparer.Ordinal)) {
534534
var legacy = legacyData [managedName];
535535
var newInfo = newData [managedName];
536536

@@ -575,7 +575,7 @@ public void ExactTypeFlags_MonoAndroid ()
575575
var acwMismatches = new List<string> ();
576576
int compared = 0;
577577

578-
foreach (var managedName in allManagedNames.OrderBy (n => n)) {
578+
foreach (var managedName in allManagedNames.OrderBy (n => n, StringComparer.Ordinal)) {
579579
var legacy = legacyData [managedName];
580580
var newInfo = newData [managedName];
581581

@@ -874,7 +874,8 @@ static string MonoAndroidAssemblyPath {
874874
_ = nameof (Java.Lang.Object);
875875

876876
// At runtime, find the Mono.Android.dll copy in the test output directory.
877-
var testDir = Path.GetDirectoryName (typeof (ScannerComparisonTests).Assembly.Location)!;
877+
var testDir = Path.GetDirectoryName (typeof (ScannerComparisonTests).Assembly.Location)
878+
?? throw new InvalidOperationException ("Could not determine test assembly directory.");
878879
var path = Path.Combine (testDir, "Mono.Android.dll");
879880

880881
if (!File.Exists (path)) {
@@ -890,7 +891,8 @@ static string MonoAndroidAssemblyPath {
890891
static string[] AllAssemblyPaths {
891892
get {
892893
var monoAndroidPath = MonoAndroidAssemblyPath;
893-
var dir = Path.GetDirectoryName (monoAndroidPath)!;
894+
var dir = Path.GetDirectoryName (monoAndroidPath)
895+
?? throw new InvalidOperationException ("Could not determine Mono.Android directory.");
894896
var javaInteropPath = Path.Combine (dir, "Java.Interop.dll");
895897

896898
if (!File.Exists (javaInteropPath)) {
@@ -914,7 +916,8 @@ static string NormalizeCrc64 (string javaName)
914916

915917
static string? UserTypesFixturePath {
916918
get {
917-
var testDir = Path.GetDirectoryName (typeof (ScannerComparisonTests).Assembly.Location)!;
919+
var testDir = Path.GetDirectoryName (typeof (ScannerComparisonTests).Assembly.Location)
920+
?? throw new InvalidOperationException ("Could not determine test assembly directory.");
918921
var path = Path.Combine (testDir, "UserTypesFixture.dll");
919922
return File.Exists (path) ? path : null;
920923
}
@@ -983,7 +986,7 @@ public void ExactMarshalMethods_UserTypesFixture ()
983986
var missing = new List<string> ();
984987
var methodMismatches = new List<string> ();
985988

986-
foreach (var javaName in legacyNormalized.Keys.OrderBy (n => n)) {
989+
foreach (var javaName in legacyNormalized.Keys.OrderBy (n => n, StringComparer.Ordinal)) {
987990
if (!newNormalized.TryGetValue (javaName, out var newGroups)) {
988991
missing.Add (javaName);
989992
continue;
@@ -1040,7 +1043,7 @@ void AssertTypeMapMatch (List<TypeMapEntry> legacy, List<TypeMapEntry> newEntrie
10401043
var managedNameMismatches = new List<string> ();
10411044
var skipMismatches = new List<string> ();
10421045

1043-
foreach (var javaName in allJavaNames.OrderBy (n => n)) {
1046+
foreach (var javaName in allJavaNames.OrderBy (n => n, StringComparer.Ordinal)) {
10441047
var inLegacy = legacyMap.TryGetValue (javaName, out var legacyEntries);
10451048
var inNew = newMap.TryGetValue (javaName, out var newEntriesForName);
10461049

0 commit comments

Comments
 (0)