From 2a824be5e10b56820bc3031ec4c85f641b74719d Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Wed, 20 May 2026 10:08:33 -0500 Subject: [PATCH 1/5] Add AssertCommercialBuild() to incremental build tests These tests verify MSBuild targets are skipped on incremental builds, which only holds true when Fast Deployment is available (commercial builds). Without it, additional targets run and the assertions fail. Fixes: https://github.com/dotnet/android/issues/11419 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Xamarin.Android.Build.Tests/AndroidUpdateResourcesTest.cs | 1 + .../Tests/Xamarin.Android.Build.Tests/AotTests.cs | 3 ++- .../Tests/Xamarin.Android.Build.Tests/AssetPackTests.cs | 1 + .../Tests/Xamarin.Android.Build.Tests/IncrementalBuildTest.cs | 3 +++ .../Tests/Xamarin.Android.Build.Tests/ManifestTest.cs | 1 + 5 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidUpdateResourcesTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidUpdateResourcesTest.cs index f04aabcb3dd..2a854257421 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidUpdateResourcesTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidUpdateResourcesTest.cs @@ -1029,6 +1029,7 @@ public void CheckDontUpdateResourceIfNotNeeded ([Values] bool useDesignerAssembl if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } + AssertCommercialBuild (); // Incremental build assertions require Fast Deployment var path = Path.Combine ("temp", TestName); var target = "_CreateAar"; var foo = new BuildItem.Source ("Foo.cs") { diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AotTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AotTests.cs index 92ab6c1e846..f24cafbd399 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AotTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AotTests.cs @@ -254,8 +254,9 @@ public void BuildAotApplicationAndÜmläüts (string supportedAbis, bool enableL { if (IsWindows) Assert.Ignore ("https://github.com/dotnet/runtime/issues/88625"); + AssertCommercialBuild (); // Incremental build assertions require Fast Deployment - var abisSanitized = supportedAbis.Replace (";", "").Replace ("-", "").Replace ("_", ""); + var abisSanitized= supportedAbis.Replace (";", "").Replace ("-", "").Replace ("_", ""); var path = Path.Combine ("temp", string.Format ("BuildAot AndÜmläüts_{0}_{1}_{2}", abisSanitized, enableLLVM, usesAssemblyBlobs)); var proj = new XamarinAndroidApplicationProject () { IsRelease = true, diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AssetPackTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AssetPackTests.cs index 5b1a3831c71..917f817a366 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AssetPackTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AssetPackTests.cs @@ -165,6 +165,7 @@ public void BuildApplicationWithAssetPack ([Values] bool isRelease, [Values] And if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } + AssertCommercialBuild (); // Incremental build assertions require Fast Deployment var path = Path.Combine ("temp", TestName); var asset3 = new AndroidItem.AndroidAsset ("Assets\\asset3.txt") { TextContent = () => "Asset3", diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/IncrementalBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/IncrementalBuildTest.cs index 80223eb77bd..c22b3369904 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/IncrementalBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/IncrementalBuildTest.cs @@ -670,6 +670,7 @@ public void ManifestMergerIncremental ([Values] AndroidRuntime runtime) if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } + AssertCommercialBuild (); // Incremental build assertions require Fast Deployment var proj = new XamarinAndroidApplicationProject { IsRelease = isRelease, @@ -1028,6 +1029,7 @@ public void ResolveLibraryProjectImports ([Values] AndroidRuntime runtime) if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } + AssertCommercialBuild (); // Incremental build assertions require Fast Deployment var proj = new XamarinFormsAndroidApplicationProject { IsRelease = isRelease, @@ -1669,6 +1671,7 @@ public void AndroidResourceChange ([Values] AndroidRuntime runtime) if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } + AssertCommercialBuild (); // Incremental build assertions require Fast Deployment var proj = new XamarinAndroidApplicationProject { IsRelease = isRelease, }; diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/ManifestTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/ManifestTest.cs index fe564b277a4..7cb6ca9d0bb 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/ManifestTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/ManifestTest.cs @@ -220,6 +220,7 @@ public void OverlayManifestIncrementalBuildTest ([Values] AndroidRuntime runtime if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } + AssertCommercialBuild (); // Incremental build assertions require Fast Deployment var proj = new XamarinAndroidApplicationProject () { IsRelease = isRelease, ManifestMerger = "manifestmerger.jar", From bf1325851db85db73c16941e7f3a0fcb1b5b6353 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Wed, 20 May 2026 11:40:28 -0500 Subject: [PATCH 2/5] Add AssertCommercialBuild() to remaining incremental build tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Additional tests found failing in build 1428373 that also need Fast Deployment for their incremental build assertions to hold. Tests fixed across 8 files: - IncrementalBuildTest: BasicApplicationRepetitiveBuild, BasicApplicationRepetitiveReleaseBuild, JavacTaskDoesNotRunOnSecondBuild, AppProjectTargetsDoNotBreak, ProduceReferenceAssembly, LinkAssembliesNoShrink, ConvertCustomView, GenerateJavaStubsAndAssembly - BindingBuildTest: BindingLibraryIncremental, BindingWithAndroidJavaSource - TrimmableTypeMapBuildTests: Build_WithTrimmableTypeMap_IncrementalBuild - AotTests: BuildAotApplicationWithNdkAndBundleAndÜmläüts - AndroidUpdateResourcesTest: RepetiviteBuildUpdateSingleResource, CheckXmlResourcesFilesAreProcessed, BuildAppWithManagedResourceParser, CustomViewAddResourceId, InvalidFilenames - AndroidGradleProjectTests: BuildIncremental - BuildTest2: BuildXamarinFormsMapsApplication, SwitchBetweenDesignTimeBuild, CheckTimestamps - PackagingTest: CheckAppBundle Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../AndroidGradleProjectTests.cs | 1 + .../AndroidUpdateResourcesTest.cs | 5 +++++ .../Tests/Xamarin.Android.Build.Tests/AotTests.cs | 1 + .../Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs | 2 ++ .../Tests/Xamarin.Android.Build.Tests/BuildTest2.cs | 3 +++ .../Xamarin.Android.Build.Tests/IncrementalBuildTest.cs | 8 ++++++++ .../Tests/Xamarin.Android.Build.Tests/PackagingTest.cs | 1 + .../TrimmableTypeMapBuildTests.cs | 1 + 8 files changed, 22 insertions(+) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidGradleProjectTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidGradleProjectTests.cs index a1d13e8d1a0..16f83aefd75 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidGradleProjectTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidGradleProjectTests.cs @@ -214,6 +214,7 @@ public void BuildIncremental ([Values] AndroidRuntime runtime) if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } + AssertCommercialBuild (); // Incremental build assertions require Fast Deployment var gradleProject = AndroidGradleProject.CreateDefault (GradleTestProjectDir); var gradleModule = gradleProject.Modules.First (); diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidUpdateResourcesTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidUpdateResourcesTest.cs index 2a854257421..516c6241860 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidUpdateResourcesTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidUpdateResourcesTest.cs @@ -277,6 +277,7 @@ public void RepetiviteBuildUpdateSingleResource ([Values] AndroidRuntime runtime if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } + AssertCommercialBuild (); // Incremental build assertions require Fast Deployment var proj = new XamarinAndroidApplicationProject { IsRelease = isRelease, @@ -386,6 +387,7 @@ public void CheckXmlResourcesFilesAreProcessed ([Values] AndroidRuntime runtime) if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } + AssertCommercialBuild (); // Incremental build assertions require Fast Deployment // TODO: NativeAOT fails with: 'classlibrary1.CustomTextView should have been replaced with an $(Hash).CustomTextView' if (runtime == AndroidRuntime.NativeAOT) { @@ -1145,6 +1147,7 @@ public void BuildAppWithManagedResourceParser ([Values] AndroidRuntime runtime) if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } + AssertCommercialBuild (); // Incremental build assertions require Fast Deployment var path = Path.Combine ("temp", TestName); var appProj = new XamarinAndroidApplicationProject () { IsRelease = isRelease, @@ -1436,6 +1439,7 @@ public void CustomViewAddResourceId ([Values] AndroidRuntime runtime) if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } + AssertCommercialBuild (); // Incremental build assertions require Fast Deployment var proj = new XamarinAndroidApplicationProject { IsRelease = isRelease, }; @@ -1501,6 +1505,7 @@ public void InvalidFilenames ([Values] AndroidRuntime runtime) if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } + AssertCommercialBuild (); // Incremental build assertions require Fast Deployment BuildItem CreateItem (string include) => new AndroidItem.AndroidResource (include) { TextContent = () => "", diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AotTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AotTests.cs index f24cafbd399..3954a712b0d 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AotTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AotTests.cs @@ -195,6 +195,7 @@ public void BuildAotApplicationWithNdkAndBundleAndÜmläüts (string supportedAb { if (IsWindows) Assert.Ignore ("https://github.com/dotnet/runtime/issues/88625"); + AssertCommercialBuild (); // Incremental build assertions require Fast Deployment var abisSanitized = supportedAbis.Replace (";", "").Replace ("-", "").Replace ("_", ""); var path = Path.Combine ("temp", string.Format ("BuildAotNdk AndÜmläüts_{0}_{1}_{2}", abisSanitized, enableLLVM, usesAssemblyBlobs)); diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index 50ff67da91b..ff668416003 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -97,6 +97,7 @@ public void BindingLibraryIncremental (string classParser, AndroidRuntime runtim if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } + AssertCommercialBuild (); // Incremental build assertions require Fast Deployment var targets = new List { "_ExportJarToXml", @@ -834,6 +835,7 @@ public void BindingWithAndroidJavaSource ([Values] AndroidRuntime runtime) if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } + AssertCommercialBuild (); // Incremental build assertions require Fast Deployment var path = Path.Combine ("temp", TestName); var lib = new XamarinAndroidBindingProject () { IsRelease = isRelease, diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest2.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest2.cs index 1b553987264..cbb2b4cde87 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest2.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest2.cs @@ -896,6 +896,7 @@ public void BuildXamarinFormsMapsApplication ([Values] bool multidex, [Values] A if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } + AssertCommercialBuild (); // Incremental build assertions require Fast Deployment var proj = new XamarinFormsMapsApplicationProject { IsRelease = isRelease, @@ -1142,6 +1143,7 @@ public void SwitchBetweenDesignTimeBuild ([Values] AndroidRuntime runtime) if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } + AssertCommercialBuild (); // Incremental build assertions require Fast Deployment var proj = new XamarinAndroidApplicationProject () { IsRelease = isRelease, }; @@ -1299,6 +1301,7 @@ public void CheckTimestamps ([Values] bool isRelease, [Values] AndroidRuntime ru if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } + AssertCommercialBuild (); // Incremental build assertions require Fast Deployment var start = DateTime.UtcNow.AddSeconds (-1); var proj = new XamarinFormsAndroidApplicationProject { diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/IncrementalBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/IncrementalBuildTest.cs index c22b3369904..2cf48244cad 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/IncrementalBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/IncrementalBuildTest.cs @@ -22,6 +22,7 @@ public void BasicApplicationRepetitiveBuild ([Values] AndroidRuntime runtime) if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } + AssertCommercialBuild (); // Incremental build assertions require Fast Deployment var proj = new XamarinAndroidApplicationProject { IsRelease = isRelease, }; @@ -68,6 +69,7 @@ public void BasicApplicationRepetitiveReleaseBuild ([Values] AndroidRuntime runt if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } + AssertCommercialBuild (); // Incremental build assertions require Fast Deployment if (runtime != AndroidRuntime.MonoVM) { // temporarily Assert.Ignore ("Runtimes other than MonoVM are currently broken here."); @@ -352,6 +354,7 @@ public void JavacTaskDoesNotRunOnSecondBuild ([Values] AndroidRuntime runtime) if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } + AssertCommercialBuild (); // Incremental build assertions require Fast Deployment var app = new XamarinAndroidApplicationProject () { IsRelease = isRelease, @@ -532,6 +535,7 @@ public void AppProjectTargetsDoNotBreak ([Values] AndroidRuntime runtime) if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } + AssertCommercialBuild (); // Incremental build assertions require Fast Deployment var targets = new List<(string target, bool ignoreOnNAOT)> { ("_GeneratePackageManagerJava", true), // TODO: NativeAOT doesn't skip this target on 3rd attempt, check if that's ok? @@ -699,6 +703,7 @@ public void ProduceReferenceAssembly ([Values] AndroidRuntime runtime) if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } + AssertCommercialBuild (); // Incremental build assertions require Fast Deployment if (runtime == AndroidRuntime.NativeAOT) { // Fails on NativeAOT with: @@ -849,6 +854,7 @@ public void LinkAssembliesNoShrink ([Values] AndroidRuntime runtime) if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } + AssertCommercialBuild (); // Incremental build assertions require Fast Deployment var proj = new XamarinFormsAndroidApplicationProject { IsRelease = isRelease, }; @@ -917,6 +923,7 @@ public void ConvertCustomView ([Values] AndroidRuntime runtime) if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } + AssertCommercialBuild (); // Incremental build assertions require Fast Deployment var path = Path.Combine ("temp", TestName); var app = new XamarinAndroidApplicationProject { @@ -1235,6 +1242,7 @@ public void GenerateJavaStubsAndAssembly ([Values] bool isRelease, [Values] Andr if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } + AssertCommercialBuild (); // Incremental build assertions require Fast Deployment // TODO: NativeAOT build doesn't add android/environment.arm64-v8a.o to file writes if (runtime == AndroidRuntime.NativeAOT) { diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs index 1a728d030da..fc709d5ee39 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs @@ -593,6 +593,7 @@ public void CheckAppBundle ([Values] bool isRelease, [Values] AndroidRuntime run if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } + AssertCommercialBuild (); // Incremental build assertions require Fast Deployment var proj = new XamarinAndroidApplicationProject () { IsRelease = isRelease, }; diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/TrimmableTypeMapBuildTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/TrimmableTypeMapBuildTests.cs index 795f135d1a1..180c2d11c3a 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/TrimmableTypeMapBuildTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/TrimmableTypeMapBuildTests.cs @@ -36,6 +36,7 @@ public void Build_WithTrimmableTypeMap_IncrementalBuild ([Values] bool isRelease if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } + AssertCommercialBuild (); // Incremental build assertions require Fast Deployment var proj = new XamarinAndroidApplicationProject { IsRelease = isRelease, From f4944d9ae378a76e53684a43c0b684e71cb6931e Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Wed, 20 May 2026 11:51:07 -0500 Subject: [PATCH 3/5] Wrap incremental assertions conditionally for non-incremental tests For tests whose primary purpose is NOT testing incremental builds, wrap only the target-skipping assertions with `if (TestEnvironment.CommercialBuildAvailable)` instead of skipping the entire test with `AssertCommercialBuild()`. This allows the functional aspects of these tests (AOT compilation, binding generation, asset pack packaging, XML resource processing, timestamps, DTB switching, etc.) to continue running on public CI, while only skipping the incremental build assertions that require Fast Deployment. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../AndroidUpdateResourcesTest.cs | 57 ++++++++++-------- .../Xamarin.Android.Build.Tests/AotTests.cs | 16 ++--- .../AssetPackTests.cs | 11 ++-- .../BindingBuildTest.cs | 9 +-- .../Xamarin.Android.Build.Tests/BuildTest2.cs | 44 +++++++------- .../IncrementalBuildTest.cs | 58 ++++++++++--------- .../PackagingTest.cs | 7 ++- 7 files changed, 110 insertions(+), 92 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidUpdateResourcesTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidUpdateResourcesTest.cs index 516c6241860..d3cf57552ad 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidUpdateResourcesTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidUpdateResourcesTest.cs @@ -387,9 +387,8 @@ public void CheckXmlResourcesFilesAreProcessed ([Values] AndroidRuntime runtime) if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } - AssertCommercialBuild (); // Incremental build assertions require Fast Deployment - // TODO: NativeAOT fails with: 'classlibrary1.CustomTextView should have been replaced with an $(Hash).CustomTextView' + // TODO:NativeAOT fails with: 'classlibrary1.CustomTextView should have been replaced with an $(Hash).CustomTextView' if (runtime == AndroidRuntime.NativeAOT) { Assert.Ignore ("NativeAOT fails here atm"); } @@ -545,7 +544,9 @@ protected override void OnClick() Assert.IsFalse (StringAssertEx.ContainsText (b.LastBuildOutput, "AndroidResgen: Warning while updating Resource XML"), "Warning while processing resources should not have been raised."); Assert.IsTrue (b.Build (proj, doNotCleanupOnUpdate: true), "Build should have succeeded."); - Assert.IsTrue (b.Output.IsTargetSkipped ("_GenerateJavaStubs"), "Target _GenerateJavaStubs should have been skipped"); + if (TestEnvironment.CommercialBuildAvailable) { + Assert.IsTrue (b.Output.IsTargetSkipped ("_GenerateJavaStubs"), "Target _GenerateJavaStubs should have been skipped"); + } lib.Touch ("CustomTextView.cs"); @@ -1031,8 +1032,7 @@ public void CheckDontUpdateResourceIfNotNeeded ([Values] bool useDesignerAssembl if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } - AssertCommercialBuild (); // Incremental build assertions require Fast Deployment - var path = Path.Combine ("temp", TestName); + var path= Path.Combine ("temp", TestName); var target = "_CreateAar"; var foo = new BuildItem.Source ("Foo.cs") { TextContent = () => @"using System; @@ -1087,10 +1087,14 @@ public string GetFoo () { appBuilder.Output.AssertTargetIsNotSkipped ("_UpdateAndroidResgen"); foo.Timestamp = DateTimeOffset.UtcNow; Assert.IsTrue (libBuilder.Build (libProj, doNotCleanupOnUpdate: true, saveProject: false), "Library project should have built"); - libBuilder.Output.AssertTargetIsSkipped (target); + if (TestEnvironment.CommercialBuildAvailable) { + libBuilder.Output.AssertTargetIsSkipped (target); + } appBuilder.BuildLogFile = "build1.log"; Assert.IsTrue (appBuilder.Build (appProj, doNotCleanupOnUpdate: true, saveProject: false), "Application Build should have succeeded."); - appBuilder.Output.AssertTargetIsSkipped ("_UpdateAndroidResgen"); + if (TestEnvironment.CommercialBuildAvailable) { + appBuilder.Output.AssertTargetIsSkipped ("_UpdateAndroidResgen"); + } // Check Contents of the file in the apk are correct. string apk = Path.Combine (Root, appBuilder.ProjectDirectory, appProj.OutputPath, appProj.PackageName + "-Signed.apk"); byte[] rawContentBuildOne = ZipHelper.ReadFileFromZip (apk, @@ -1147,8 +1151,7 @@ public void BuildAppWithManagedResourceParser ([Values] AndroidRuntime runtime) if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } - AssertCommercialBuild (); // Incremental build assertions require Fast Deployment - var path = Path.Combine ("temp", TestName); + var path= Path.Combine ("temp", TestName); var appProj = new XamarinAndroidApplicationProject () { IsRelease = isRelease, ProjectName = "App1", @@ -1173,12 +1176,16 @@ public void BuildAppWithManagedResourceParser ([Values] AndroidRuntime runtime) appBuilder.BuildLogFile = "build.log"; Assert.IsTrue (appBuilder.Build (appProj, doNotCleanupOnUpdate: true), "Normal Application Build should have succeeded."); - Assert.IsTrue (appProj.CreateBuildOutput (appBuilder).IsTargetSkipped ("_ManagedUpdateAndroidResgen", defaultIfNotUsed: true), - "Target '_ManagedUpdateAndroidResgen' should not have run."); + if (TestEnvironment.CommercialBuildAvailable) { + Assert.IsTrue (appProj.CreateBuildOutput (appBuilder).IsTargetSkipped ("_ManagedUpdateAndroidResgen", defaultIfNotUsed: true), + "Target '_ManagedUpdateAndroidResgen' should not have run."); + } appBuilder.BuildLogFile = "designtimebuild.log"; Assert.IsTrue (appBuilder.DesignTimeBuild (appProj, doNotCleanupOnUpdate: true), "DesignTime Application Build should have succeeded."); - Assert.IsTrue (appProj.CreateBuildOutput (appBuilder).IsTargetSkipped ("_ManagedUpdateAndroidResgen", defaultIfNotUsed: true), - "Target '_ManagedUpdateAndroidResgen' should not have run."); + if (TestEnvironment.CommercialBuildAvailable) { + Assert.IsTrue (appProj.CreateBuildOutput (appBuilder).IsTargetSkipped ("_ManagedUpdateAndroidResgen", defaultIfNotUsed: true), + "Target '_ManagedUpdateAndroidResgen' should not have run."); + } Assert.IsTrue (appBuilder.Clean (appProj), "Clean should have succeeded"); Assert.IsTrue (File.Exists (designerFile), $"'{designerFile}' should not have been cleaned."); @@ -1439,8 +1446,7 @@ public void CustomViewAddResourceId ([Values] AndroidRuntime runtime) if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } - AssertCommercialBuild (); // Incremental build assertions require Fast Deployment - var proj = new XamarinAndroidApplicationProject { + var proj= new XamarinAndroidApplicationProject { IsRelease = isRelease, }; proj.SetRuntime (runtime); @@ -1456,12 +1462,14 @@ public void CustomViewAddResourceId ([Values] AndroidRuntime runtime) proj.Touch (@"Resources\layout\Main.axml"); Assert.IsTrue (b.Build (proj, doNotCleanupOnUpdate: true), "second build should have succeeded"); - Assert.IsTrue ( - b.Output.IsTargetPartiallyBuilt ("_CompileResources"), - "The target _CompileResources should have been partially built"); - Assert.IsTrue ( - b.Output.IsTargetSkipped ("_FixupCustomViewsForAapt2", defaultIfNotUsed: true), - "The target _FixupCustomViewsForAapt2 should have been skipped"); + if (TestEnvironment.CommercialBuildAvailable) { + Assert.IsTrue ( + b.Output.IsTargetPartiallyBuilt ("_CompileResources"), + "The target _CompileResources should have been partially built"); + Assert.IsTrue ( + b.Output.IsTargetSkipped ("_FixupCustomViewsForAapt2", defaultIfNotUsed: true), + "The target _FixupCustomViewsForAapt2 should have been skipped"); + } var r_java = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath, "android", "src", proj.PackageNameJavaIntermediatePath, "R.java"); FileAssert.Exists (r_java); @@ -1505,8 +1513,7 @@ public void InvalidFilenames ([Values] AndroidRuntime runtime) if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } - AssertCommercialBuild (); // Incremental build assertions require Fast Deployment - BuildItem CreateItem (string include) => + BuildItem CreateItem(string include) => new AndroidItem.AndroidResource (include) { TextContent = () => "", }; @@ -1522,7 +1529,9 @@ BuildItem CreateItem (string include) => using (var b = CreateApkBuilder ()) { Assert.IsTrue (b.Build (proj), "first build should have succeeded."); Assert.IsTrue (b.Build (proj), "second build should have succeeded."); - b.Output.AssertTargetIsSkipped ("_CompileResources"); + if (TestEnvironment.CommercialBuildAvailable) { + b.Output.AssertTargetIsSkipped ("_CompileResources"); + } } } diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AotTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AotTests.cs index 3954a712b0d..a8186f9b8fa 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AotTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AotTests.cs @@ -195,7 +195,6 @@ public void BuildAotApplicationWithNdkAndBundleAndÜmläüts (string supportedAb { if (IsWindows) Assert.Ignore ("https://github.com/dotnet/runtime/issues/88625"); - AssertCommercialBuild (); // Incremental build assertions require Fast Deployment var abisSanitized = supportedAbis.Replace (";", "").Replace ("-", "").Replace ("_", ""); var path = Path.Combine ("temp", string.Format ("BuildAotNdk AndÜmläüts_{0}_{1}_{2}", abisSanitized, enableLLVM, usesAssemblyBlobs)); @@ -255,7 +254,6 @@ public void BuildAotApplicationAndÜmläüts (string supportedAbis, bool enableL { if (IsWindows) Assert.Ignore ("https://github.com/dotnet/runtime/issues/88625"); - AssertCommercialBuild (); // Incremental build assertions require Fast Deployment var abisSanitized= supportedAbis.Replace (";", "").Replace ("-", "").Replace ("_", ""); var path = Path.Combine ("temp", string.Format ("BuildAot AndÜmläüts_{0}_{1}_{2}", abisSanitized, enableLLVM, usesAssemblyBlobs)); @@ -289,12 +287,14 @@ public void BuildAotApplicationAndÜmläüts (string supportedAbis, bool enableL } } Assert.IsTrue (b.Build (proj), "Second Build should have succeeded."); - Assert.IsTrue ( - b.Output.IsTargetSkipped ("_CompileJava"), - "the _CompileJava target should be skipped"); - Assert.IsTrue ( - b.Output.IsTargetSkipped ("_BuildApkEmbed"), - "the _BuildApkEmbed target should be skipped"); + if (TestEnvironment.CommercialBuildAvailable) { + Assert.IsTrue ( + b.Output.IsTargetSkipped ("_CompileJava"), + "the _CompileJava target should be skipped"); + Assert.IsTrue ( + b.Output.IsTargetSkipped ("_BuildApkEmbed"), + "the _BuildApkEmbed target should be skipped"); + } } } diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AssetPackTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AssetPackTests.cs index 917f817a366..ef66074bdf0 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AssetPackTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AssetPackTests.cs @@ -165,8 +165,7 @@ public void BuildApplicationWithAssetPack ([Values] bool isRelease, [Values] And if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } - AssertCommercialBuild (); // Incremental build assertions require Fast Deployment - var path = Path.Combine ("temp", TestName); + var path= Path.Combine ("temp", TestName); var asset3 = new AndroidItem.AndroidAsset ("Assets\\asset3.txt") { TextContent = () => "Asset3", Encoding = Encoding.ASCII, @@ -220,9 +219,11 @@ public void BuildApplicationWithAssetPack ([Values] bool isRelease, [Values] And Assert.IsFalse (zip.ContainsEntry ("assetpack1/resources.pb"), "aab should not contain assetpack1/resources.pb"); } Assert.IsTrue (appBuilder.Build (app, doNotCleanupOnUpdate: true, saveProject: false), $"{app.ProjectName} should succeed"); - appBuilder.Output.AssertTargetIsSkipped ("_CreateAssetPackManifests"); - appBuilder.Output.AssertTargetIsSkipped ("_BuildAssetPacks"); - appBuilder.Output.AssertTargetIsSkipped ("_GenerateAndroidAssetsDir"); + if (TestEnvironment.CommercialBuildAvailable) { + appBuilder.Output.AssertTargetIsSkipped ("_CreateAssetPackManifests"); + appBuilder.Output.AssertTargetIsSkipped ("_BuildAssetPacks"); + appBuilder.Output.AssertTargetIsSkipped ("_GenerateAndroidAssetsDir"); + } FileAssert.Exists (asset3File, $"file {asset3File} should exist."); asset3.TextContent = () => "Asset3 Updated"; asset3.Timestamp = DateTime.UtcNow.AddSeconds(1); diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index ff668416003..7af64a42343 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -835,8 +835,7 @@ public void BindingWithAndroidJavaSource ([Values] AndroidRuntime runtime) if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } - AssertCommercialBuild (); // Incremental build assertions require Fast Deployment - var path = Path.Combine ("temp", TestName); + var path= Path.Combine ("temp", TestName); var lib = new XamarinAndroidBindingProject () { IsRelease = isRelease, ProjectName = "BindingsProject", @@ -885,8 +884,10 @@ public void BindingWithAndroidJavaSource ([Values] AndroidRuntime runtime) "generated", "src", "Com.Xamarin.Android.Test.Msbuildtest.IJavaSourceTestInterface.cs"); StringAssertEx.ContainsText (File.ReadAllLines (generatedIface), "string GreetWithQuestion (string name, global::Java.Util.Date date, string question);"); Assert.IsTrue (libBuilder.Build (lib), "Library build should have succeeded."); - Assert.IsTrue (libBuilder.Output.IsTargetSkipped ("_CompileBindingJava", defaultIfNotUsed: true), $"`_CompileBindingJava` should be skipped on second build!"); - Assert.IsTrue (libBuilder.Output.IsTargetSkipped ("_ClearGeneratedManagedBindings", defaultIfNotUsed: true), $"`_ClearGeneratedManagedBindings` should be skipped on second build!"); + if (TestEnvironment.CommercialBuildAvailable) { + Assert.IsTrue (libBuilder.Output.IsTargetSkipped ("_CompileBindingJava", defaultIfNotUsed: true), $"`_CompileBindingJava` should be skipped on second build!"); + Assert.IsTrue (libBuilder.Output.IsTargetSkipped ("_ClearGeneratedManagedBindings", defaultIfNotUsed: true), $"`_ClearGeneratedManagedBindings` should be skipped on second build!"); + } FileAssert.Exists (generatedCode, $"'{generatedCode}' should have not be deleted on second build."); Assert.IsTrue (libBuilder.DesignTimeBuild (lib, target: "UpdateGeneratedFiles"), "DTB should have succeeded."); FileAssert.Exists (generatedCode, $"'{generatedCode}' should have not be deleted on DTB build."); diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest2.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest2.cs index cbb2b4cde87..e9d1c4f6322 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest2.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest2.cs @@ -1143,8 +1143,7 @@ public void SwitchBetweenDesignTimeBuild ([Values] AndroidRuntime runtime) if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } - AssertCommercialBuild (); // Incremental build assertions require Fast Deployment - var proj = new XamarinAndroidApplicationProject () { + var proj= new XamarinAndroidApplicationProject () { IsRelease = isRelease, }; proj.SetRuntime (runtime); @@ -1199,17 +1198,19 @@ public CustomTextView(Context context, IAttributeSet attributes) : base(context, FileAssert.Exists (designtime_build_props, "designtime/build.props should exist after the second `Build`."); //NOTE: none of these targets should run, since we have not actually changed anything! - var targetsToBeSkipped = new [] { - //TODO: We would like for this assertion to work, but the item group changes between DTB and regular builds - // $(IntermediateOutputPath)designtime\Resource.designer.cs -> Resources\Resource.designer.cs - // And so the built assembly changes between DTB and regular build, triggering `_LinkAssembliesNoShrink` - //"_LinkAssembliesNoShrink", - "_UpdateAndroidResgen", - "_BuildLibraryImportsCache", - "_CompileJava", - }; - foreach (var targetName in targetsToBeSkipped) { - Assert.IsTrue (b.Output.IsTargetSkipped (targetName), $"`{targetName}` should be skipped!"); + if (TestEnvironment.CommercialBuildAvailable) { + var targetsToBeSkipped = new [] { + //TODO: We would like for this assertion to work, but the item group changes between DTB and regular builds + // $(IntermediateOutputPath)designtime\Resource.designer.cs -> Resources\Resource.designer.cs + // And so the built assembly changes between DTB and regular build, triggering `_LinkAssembliesNoShrink` + //"_LinkAssembliesNoShrink", + "_UpdateAndroidResgen", + "_BuildLibraryImportsCache", + "_CompileJava", + }; + foreach (var targetName in targetsToBeSkipped) { + Assert.IsTrue (b.Output.IsTargetSkipped (targetName), $"`{targetName}` should be skipped!"); + } } b.Target = "Clean"; @@ -1301,9 +1302,8 @@ public void CheckTimestamps ([Values] bool isRelease, [Values] AndroidRuntime ru if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } - AssertCommercialBuild (); // Incremental build assertions require Fast Deployment - var start = DateTime.UtcNow.AddSeconds (-1); + var start= DateTime.UtcNow.AddSeconds (-1); var proj = new XamarinFormsAndroidApplicationProject { IsRelease = isRelease, @@ -1350,13 +1350,15 @@ public void CheckTimestamps ([Values] bool isRelease, [Values] AndroidRuntime ru //One last build with no changes Assert.IsTrue (b.Build (proj), "third build should have succeeded."); - // NativeAOT always runs the linking step - if (runtime != AndroidRuntime.NativeAOT) { - b.Output.AssertTargetIsSkipped (isRelease ? KnownTargets.LinkAssembliesShrink : KnownTargets.LinkAssembliesNoShrink); + if (TestEnvironment.CommercialBuildAvailable) { + // NativeAOT always runs the linking step + if (runtime != AndroidRuntime.NativeAOT) { + b.Output.AssertTargetIsSkipped (isRelease ? KnownTargets.LinkAssembliesShrink : KnownTargets.LinkAssembliesNoShrink); + } + b.Output.AssertTargetIsSkipped ("_UpdateAndroidResgen"); + b.Output.AssertTargetIsSkipped ("_BuildLibraryImportsCache"); + b.Output.AssertTargetIsSkipped ("_CompileJava"); } - b.Output.AssertTargetIsSkipped ("_UpdateAndroidResgen"); - b.Output.AssertTargetIsSkipped ("_BuildLibraryImportsCache"); - b.Output.AssertTargetIsSkipped ("_CompileJava"); } } diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/IncrementalBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/IncrementalBuildTest.cs index 2cf48244cad..ca72605fa05 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/IncrementalBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/IncrementalBuildTest.cs @@ -703,7 +703,6 @@ public void ProduceReferenceAssembly ([Values] AndroidRuntime runtime) if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } - AssertCommercialBuild (); // Incremental build assertions require Fast Deployment if (runtime == AndroidRuntime.NativeAOT) { // Fails on NativeAOT with: @@ -752,16 +751,18 @@ public void ProduceReferenceAssembly ([Values] AndroidRuntime runtime) Assert.IsTrue (libBuilder.Build (lib, doNotCleanupOnUpdate: true, saveProject: false), "second library build should have succeeded."); Assert.IsTrue (appBuilder.Build (app, doNotCleanupOnUpdate: true, saveProject: false), "second app build should have succeeded."); - appBuilder.Output.AssertTargetIsSkipped ("CoreCompile"); - appBuilder.Output.AssertTargetIsSkipped ("_BuildLibraryImportsCache"); - appBuilder.Output.AssertTargetIsSkipped ("_ResolveLibraryProjectImports"); - appBuilder.Output.AssertTargetIsSkipped ("_GenerateJavaStubs"); + if (TestEnvironment.CommercialBuildAvailable) { + appBuilder.Output.AssertTargetIsSkipped ("CoreCompile"); + appBuilder.Output.AssertTargetIsSkipped ("_BuildLibraryImportsCache"); + appBuilder.Output.AssertTargetIsSkipped ("_ResolveLibraryProjectImports"); + appBuilder.Output.AssertTargetIsSkipped ("_GenerateJavaStubs"); - appBuilder.Output.AssertTargetIsPartiallyBuilt (KnownTargets.LinkAssembliesNoShrink); + appBuilder.Output.AssertTargetIsPartiallyBuilt (KnownTargets.LinkAssembliesNoShrink); - appBuilder.Output.AssertTargetIsNotSkipped ("_BuildApkEmbed"); - appBuilder.Output.AssertTargetIsNotSkipped ("_CopyPackage"); - appBuilder.Output.AssertTargetIsNotSkipped ("_Sign"); + appBuilder.Output.AssertTargetIsNotSkipped ("_BuildApkEmbed"); + appBuilder.Output.AssertTargetIsNotSkipped ("_CopyPackage"); + appBuilder.Output.AssertTargetIsNotSkipped ("_Sign"); + } } } @@ -923,9 +924,8 @@ public void ConvertCustomView ([Values] AndroidRuntime runtime) if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } - AssertCommercialBuild (); // Incremental build assertions require Fast Deployment - var path = Path.Combine ("temp", TestName); + var path= Path.Combine ("temp", TestName); var app = new XamarinAndroidApplicationProject { IsRelease = isRelease, ProjectName = "MyApp", @@ -998,13 +998,15 @@ public CustomTextView(Context context, IAttributeSet attributes) : base(context, appBuilder.BuildLogFile = "build2.log"; Assert.IsTrue (appBuilder.Build (app, doNotCleanupOnUpdate: true, saveProject: false), "second app build should have succeeded."); - var targetsShouldSkip = new [] { - "_BuildLibraryImportsCache", - "_ResolveLibraryProjectImports", - "_ConvertCustomView", - }; - foreach (var target in targetsShouldSkip) { - Assert.IsTrue (appBuilder.Output.IsTargetSkipped (target), $"`{target}` should be skipped!"); + if (TestEnvironment.CommercialBuildAvailable) { + var targetsShouldSkip = new [] { + "_BuildLibraryImportsCache", + "_ResolveLibraryProjectImports", + "_ConvertCustomView", + }; + foreach (var target in targetsShouldSkip) { + Assert.IsTrue (appBuilder.Output.IsTargetSkipped (target), $"`{target}` should be skipped!"); + } } var targetsShouldRun = new [] { @@ -1015,16 +1017,18 @@ public CustomTextView(Context context, IAttributeSet attributes) : base(context, "_CopyPackage", "_Sign", }; - foreach (var target in targetsShouldRun) { - Assert.IsFalse (appBuilder.Output.IsTargetSkipped (target), $"`{target}` should *not* be skipped!"); - } + if (TestEnvironment.CommercialBuildAvailable) { + foreach (var target in targetsShouldRun) { + Assert.IsFalse (appBuilder.Output.IsTargetSkipped (target), $"`{target}` should *not* be skipped!"); + } - var aapt2TargetsShouldBeSkipped = new [] { - "_FixupCustomViewsForAapt2", - "_CompileResources" - }; - foreach (var target in aapt2TargetsShouldBeSkipped) { - Assert.IsTrue (appBuilder.Output.IsTargetSkipped (target, defaultIfNotUsed: true), $"{target} should be skipped!"); + var aapt2TargetsShouldBeSkipped = new [] { + "_FixupCustomViewsForAapt2", + "_CompileResources" + }; + foreach (var target in aapt2TargetsShouldBeSkipped) { + Assert.IsTrue (appBuilder.Output.IsTargetSkipped (target, defaultIfNotUsed: true), $"{target} should be skipped!"); + } } } } diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs index fc709d5ee39..4cf0d6ca767 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs @@ -593,7 +593,6 @@ public void CheckAppBundle ([Values] bool isRelease, [Values] AndroidRuntime run if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } - AssertCommercialBuild (); // Incremental build assertions require Fast Deployment var proj = new XamarinAndroidApplicationProject () { IsRelease = isRelease, }; @@ -614,8 +613,10 @@ public void CheckAppBundle ([Values] bool isRelease, [Values] AndroidRuntime run // Build with no changes Assert.IsTrue (b.Build (proj), "second build should have succeeded."); - foreach (var target in new [] { "_Sign", "_BuildApkEmbed" }) { - Assert.IsTrue (b.Output.IsTargetSkipped (target), $"`{target}` should be skipped!"); + if (TestEnvironment.CommercialBuildAvailable) { + foreach (var target in new [] { "_Sign", "_BuildApkEmbed" }) { + Assert.IsTrue (b.Output.IsTargetSkipped (target), $"`{target}` should be skipped!"); + } } } } From 9c1f6e1cd58ffa3032651833084c89d92371a10b Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Wed, 20 May 2026 13:06:19 -0500 Subject: [PATCH 4/5] =?UTF-8?q?Fix=20missed=20assertion=20wrapping=20in=20?= =?UTF-8?q?BuildAotApplicationWithNdkAndBundleAnd=C3=9Cml=C3=A4=C3=BCts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The AssertCommercialBuild() was removed but the incremental assertions were not wrapped with the CommercialBuildAvailable check. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Xamarin.Android.Build.Tests/AotTests.cs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AotTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AotTests.cs index a8186f9b8fa..aca80cc8444 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AotTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AotTests.cs @@ -239,18 +239,20 @@ public void BuildAotApplicationWithNdkAndBundleAndÜmläüts (string supportedAb } } Assert.IsTrue (b.Build (proj), "Second Build should have succeeded."); - Assert.IsTrue ( - b.Output.IsTargetSkipped ("_CompileJava"), - "the _CompileJava target should be skipped"); - Assert.IsTrue ( - b.Output.IsTargetSkipped ("_BuildApkEmbed"), - "the _BuildApkEmbed target should be skipped"); + if (TestEnvironment.CommercialBuildAvailable) { + Assert.IsTrue ( + b.Output.IsTargetSkipped ("_CompileJava"), + "the _CompileJava target should be skipped"); + Assert.IsTrue ( + b.Output.IsTargetSkipped ("_BuildApkEmbed"), + "the _BuildApkEmbed target should be skipped"); + } } } [Test] [TestCaseSource (nameof (AotChecks))] - public void BuildAotApplicationAndÜmläüts (string supportedAbis, bool enableLLVM, bool usesAssemblyBlobs) + public void BuildAotApplicationAndÜmläüts(string supportedAbis, bool enableLLVM, bool usesAssemblyBlobs) { if (IsWindows) Assert.Ignore ("https://github.com/dotnet/runtime/issues/88625"); From 46f44662b8284aba2284b00cfd07c3b965ae56cd Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Thu, 21 May 2026 09:51:05 -0500 Subject: [PATCH 5/5] Fix whitespace regressions from previous edits Restore missing spaces before parentheses and around assignment operators that were accidentally removed when editing out the AssertCommercialBuild() lines. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../AndroidUpdateResourcesTest.cs | 10 +++++----- .../Tests/Xamarin.Android.Build.Tests/AotTests.cs | 4 ++-- .../Xamarin.Android.Build.Tests/AssetPackTests.cs | 2 +- .../Xamarin.Android.Build.Tests/BindingBuildTest.cs | 2 +- .../Tests/Xamarin.Android.Build.Tests/BuildTest2.cs | 4 ++-- .../IncrementalBuildTest.cs | 2 +- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidUpdateResourcesTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidUpdateResourcesTest.cs index d3cf57552ad..fa01fb3d335 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidUpdateResourcesTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidUpdateResourcesTest.cs @@ -388,7 +388,7 @@ public void CheckXmlResourcesFilesAreProcessed ([Values] AndroidRuntime runtime) return; } - // TODO:NativeAOT fails with: 'classlibrary1.CustomTextView should have been replaced with an $(Hash).CustomTextView' + // TODO: NativeAOT fails with: 'classlibrary1.CustomTextView should have been replaced with an $(Hash).CustomTextView' if (runtime == AndroidRuntime.NativeAOT) { Assert.Ignore ("NativeAOT fails here atm"); } @@ -1032,7 +1032,7 @@ public void CheckDontUpdateResourceIfNotNeeded ([Values] bool useDesignerAssembl if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } - var path= Path.Combine ("temp", TestName); + var path = Path.Combine ("temp", TestName); var target = "_CreateAar"; var foo = new BuildItem.Source ("Foo.cs") { TextContent = () => @"using System; @@ -1151,7 +1151,7 @@ public void BuildAppWithManagedResourceParser ([Values] AndroidRuntime runtime) if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } - var path= Path.Combine ("temp", TestName); + var path = Path.Combine ("temp", TestName); var appProj = new XamarinAndroidApplicationProject () { IsRelease = isRelease, ProjectName = "App1", @@ -1446,7 +1446,7 @@ public void CustomViewAddResourceId ([Values] AndroidRuntime runtime) if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } - var proj= new XamarinAndroidApplicationProject { + var proj = new XamarinAndroidApplicationProject { IsRelease = isRelease, }; proj.SetRuntime (runtime); @@ -1513,7 +1513,7 @@ public void InvalidFilenames ([Values] AndroidRuntime runtime) if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } - BuildItem CreateItem(string include) => + BuildItem CreateItem (string include) => new AndroidItem.AndroidResource (include) { TextContent = () => "", }; diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AotTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AotTests.cs index aca80cc8444..83dc2d24605 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AotTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AotTests.cs @@ -252,12 +252,12 @@ public void BuildAotApplicationWithNdkAndBundleAndÜmläüts (string supportedAb [Test] [TestCaseSource (nameof (AotChecks))] - public void BuildAotApplicationAndÜmläüts(string supportedAbis, bool enableLLVM, bool usesAssemblyBlobs) + public void BuildAotApplicationAndÜmläüts (string supportedAbis, bool enableLLVM, bool usesAssemblyBlobs) { if (IsWindows) Assert.Ignore ("https://github.com/dotnet/runtime/issues/88625"); - var abisSanitized= supportedAbis.Replace (";", "").Replace ("-", "").Replace ("_", ""); + var abisSanitized = supportedAbis.Replace (";", "").Replace ("-", "").Replace ("_", ""); var path = Path.Combine ("temp", string.Format ("BuildAot AndÜmläüts_{0}_{1}_{2}", abisSanitized, enableLLVM, usesAssemblyBlobs)); var proj = new XamarinAndroidApplicationProject () { IsRelease = true, diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AssetPackTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AssetPackTests.cs index ef66074bdf0..048d6814c0c 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AssetPackTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AssetPackTests.cs @@ -165,7 +165,7 @@ public void BuildApplicationWithAssetPack ([Values] bool isRelease, [Values] And if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } - var path= Path.Combine ("temp", TestName); + var path = Path.Combine ("temp", TestName); var asset3 = new AndroidItem.AndroidAsset ("Assets\\asset3.txt") { TextContent = () => "Asset3", Encoding = Encoding.ASCII, diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index 7af64a42343..6276cba7eb4 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -835,7 +835,7 @@ public void BindingWithAndroidJavaSource ([Values] AndroidRuntime runtime) if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } - var path= Path.Combine ("temp", TestName); + var path = Path.Combine ("temp", TestName); var lib = new XamarinAndroidBindingProject () { IsRelease = isRelease, ProjectName = "BindingsProject", diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest2.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest2.cs index e9d1c4f6322..b4dcb56aa97 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest2.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest2.cs @@ -1143,7 +1143,7 @@ public void SwitchBetweenDesignTimeBuild ([Values] AndroidRuntime runtime) if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; } - var proj= new XamarinAndroidApplicationProject () { + var proj = new XamarinAndroidApplicationProject () { IsRelease = isRelease, }; proj.SetRuntime (runtime); @@ -1303,7 +1303,7 @@ public void CheckTimestamps ([Values] bool isRelease, [Values] AndroidRuntime ru return; } - var start= DateTime.UtcNow.AddSeconds (-1); + var start = DateTime.UtcNow.AddSeconds (-1); var proj = new XamarinFormsAndroidApplicationProject { IsRelease = isRelease, diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/IncrementalBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/IncrementalBuildTest.cs index ca72605fa05..0818b832464 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/IncrementalBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/IncrementalBuildTest.cs @@ -925,7 +925,7 @@ public void ConvertCustomView ([Values] AndroidRuntime runtime) return; } - var path= Path.Combine ("temp", TestName); + var path = Path.Combine ("temp", TestName); var app = new XamarinAndroidApplicationProject { IsRelease = isRelease, ProjectName = "MyApp",