diff --git a/build-tools/automation/yaml-templates/stage-package-tests.yaml b/build-tools/automation/yaml-templates/stage-package-tests.yaml index e6fd01de65f..63b298c741d 100644 --- a/build-tools/automation/yaml-templates/stage-package-tests.yaml +++ b/build-tools/automation/yaml-templates/stage-package-tests.yaml @@ -80,15 +80,6 @@ stages: artifactSource: bin/Test$(XA.Build.Configuration)/$(DotNetTargetFramework)-android/Mono.Android.NET_Tests-Signed.apk artifactFolder: $(DotNetTargetFramework)-NoAab - - template: /build-tools/automation/yaml-templates/apk-instrumentation.yaml - parameters: - configuration: $(XA.Build.Configuration) - testName: Mono.Android.NET_Tests-Interpreter - project: tests/Mono.Android-Tests/Mono.Android-Tests/Mono.Android.NET-Tests.csproj - extraBuildArgs: -p:TestsFlavor=Interpreter -p:UseInterpreter=True -p:UseMonoRuntime=true - artifactSource: bin/Test$(XA.Build.Configuration)/$(DotNetTargetFramework)-android/Mono.Android.NET_Tests-Signed.aab - artifactFolder: $(DotNetTargetFramework)-Interpreter - - ${{ if ne(parameters.macTestAgentsUseCleanImages, true) }}: - template: /build-tools/automation/yaml-templates/start-stop-emulator.yaml parameters: @@ -151,42 +142,6 @@ stages: - template: /build-tools/automation/yaml-templates/start-stop-emulator.yaml - - template: /build-tools/automation/yaml-templates/apk-instrumentation.yaml - parameters: - configuration: $(XA.Build.Configuration) - testName: Mono.Android.NET_Tests-NoAot - project: tests/Mono.Android-Tests/Mono.Android-Tests/Mono.Android.NET-Tests.csproj - extraBuildArgs: -p:TestsFlavor=NoAot -p:RunAOTCompilation=false -p:UseMonoRuntime=true - artifactSource: bin/Test$(XA.Build.Configuration)/$(DotNetTargetFramework)-android/Mono.Android.NET_Tests-Signed.aab - artifactFolder: $(DotNetTargetFramework)-NoAot - - - template: /build-tools/automation/yaml-templates/apk-instrumentation.yaml - parameters: - configuration: $(XA.Build.Configuration) - testName: Mono.Android.NET_Tests-TrimModePartial - project: tests/Mono.Android-Tests/Mono.Android-Tests/Mono.Android.NET-Tests.csproj - extraBuildArgs: -p:TestsFlavor=TrimModePartial -p:TrimMode=partial -p:UseMonoRuntime=true - artifactSource: bin/Test$(XA.Build.Configuration)/$(DotNetTargetFramework)-android/Mono.Android.NET_Tests-Signed.aab - artifactFolder: $(DotNetTargetFramework)-TrimModePartial - - - template: /build-tools/automation/yaml-templates/apk-instrumentation.yaml - parameters: - configuration: $(XA.Build.Configuration) - testName: Mono.Android.NET_Tests-AotLlvm - project: tests/Mono.Android-Tests/Mono.Android-Tests/Mono.Android.NET-Tests.csproj - extraBuildArgs: -p:TestsFlavor=AotLlvm -p:EnableLLVM=true -p:AndroidEnableProfiledAot=false -p:UseMonoRuntime=true - artifactSource: bin/Test$(XA.Build.Configuration)/$(DotNetTargetFramework)-android/Mono.Android.NET_Tests-Signed.aab - artifactFolder: $(DotNetTargetFramework)-AotLlvm - - - template: /build-tools/automation/yaml-templates/apk-instrumentation.yaml - parameters: - configuration: $(XA.Build.Configuration) - testName: Mono.Android.NET_Tests-IsAssignableFrom - project: tests/Mono.Android-Tests/Mono.Android-Tests/Mono.Android.NET-Tests.csproj - extraBuildArgs: -p:TestsFlavor=IsAssignableFrom -p:IncludeCategories=Intune -p:_AndroidIsAssignableFromCheck=false -p:UseMonoRuntime=true - artifactSource: bin/Test$(XA.Build.Configuration)/$(DotNetTargetFramework)-android/Mono.Android.NET_Tests-Signed.aab - artifactFolder: $(DotNetTargetFramework)-IsAssignableFrom - - template: /build-tools/automation/yaml-templates/apk-instrumentation.yaml parameters: configuration: $(XA.Build.Configuration) diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets index b7a35e2e08d..0d8f4616c73 100644 --- a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets +++ b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets @@ -1,5 +1,11 @@ + + + + System diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AidlTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AidlTest.cs index 44c3909df8b..f1984829d4e 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AidlTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AidlTest.cs @@ -26,7 +26,7 @@ void TestAidl (string testName, string aidl, AndroidRuntime runtime) } [Test] - public void ListAndMap ([Values] AndroidRuntime runtime) + public void ListAndMap ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: true)) { return; @@ -46,7 +46,7 @@ interface Test { } [Test] - public void NamespaceResolution ([Values] AndroidRuntime runtime) + public void NamespaceResolution ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: true)) { return; @@ -64,7 +64,7 @@ interface Test { } [Test] - public void PrimitiveTypes ([Values] AndroidRuntime runtime) + public void PrimitiveTypes ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: true)) { return; diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidDependenciesTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidDependenciesTests.cs index 38cd29612ac..baad82d7013 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidDependenciesTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidDependenciesTests.cs @@ -19,7 +19,7 @@ public class AndroidDependenciesTests : BaseTest { [Test] [NonParallelizable] // Do not run environment modifying tests in parallel. - public void InstallAndroidDependenciesTest ([Values ("GoogleV2", "Xamarin")] string manifestType, [Values] AndroidRuntime runtime) + public void InstallAndroidDependenciesTest ([Values ("GoogleV2", "Xamarin")] string manifestType, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -134,7 +134,7 @@ static IEnumerable Get_GetDependencyNdkRequiredConditionsData () { var ret = new List (); - foreach (AndroidRuntime runtime in Enum.GetValues (typeof (AndroidRuntime))) { + foreach (AndroidRuntime runtime in new[] { AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT }) { AddTestData ("AotAssemblies", false, runtime); AddTestData ("AndroidEnableProfiledAot", false, runtime); AddTestData ("EnableLLVM", true, runtime); @@ -220,7 +220,7 @@ public void NativeAotRequiresNdk_WhenWorkloadLinkerDisabled () } [Test] - public void GetDependencyWhenBuildToolsAreMissingTest ([Values] AndroidRuntime runtime) + public void GetDependencyWhenBuildToolsAreMissingTest ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -260,7 +260,7 @@ public void GetDependencyWhenBuildToolsAreMissingTest ([Values] AndroidRuntime r } [Test] - public void GetDependencyWhenSDKIsMissingTest ([Values] bool createSdkDirectory, [Values] bool installJavaDeps, [Values] AndroidRuntime runtime) + public void GetDependencyWhenSDKIsMissingTest ([Values] bool createSdkDirectory, [Values] bool installJavaDeps, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { 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 084b9f55ba6..9fa0060780b 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 @@ -41,7 +41,7 @@ public void GradleTestTearDown () } [Test] - public void BuildApp ([Values] AndroidRuntime runtime) + public void BuildApp ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -73,7 +73,7 @@ static IEnumerable Get_AGPMetadataTestSources () { var ret = new List (); - foreach (AndroidRuntime runtime in Enum.GetValues (typeof (AndroidRuntime))) { + foreach (AndroidRuntime runtime in new[] { AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT }) { AddTestData ( bind: true, configuration: "Release", @@ -162,7 +162,7 @@ public void BindLibrary (bool bind, string configuration, bool refOutputs, Andro } [Test] - public void BindPackLibrary ([Values] bool packGradleRef, [Values] AndroidRuntime runtime) + public void BindPackLibrary ([Values] bool packGradleRef, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -208,7 +208,7 @@ public void BindPackLibrary ([Values] bool packGradleRef, [Values] AndroidRuntim } [Test] - public void BuildIncremental ([Values] AndroidRuntime runtime) + public void BuildIncremental ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -260,7 +260,7 @@ public void BuildIncremental ([Values] AndroidRuntime runtime) } [Test] - public void BuildCustomOutputPaths ([Values] AndroidRuntime runtime) + public void BuildCustomOutputPaths ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -294,7 +294,7 @@ public void BuildCustomOutputPaths ([Values] AndroidRuntime runtime) } [Test] - public void BuildArtifactsOutputPaths ([Values] AndroidRuntime runtime) + public void BuildArtifactsOutputPaths ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -344,7 +344,7 @@ public void BuildArtifactsOutputPaths ([Values] AndroidRuntime runtime) } [Test] - public void BuildMultipleModules ([Values] AndroidRuntime runtime) + public void BuildMultipleModules ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -387,7 +387,7 @@ public void BuildMultipleModules ([Values] AndroidRuntime runtime) } [Test] - public void BuildMultipleLibraries ([Values] AndroidRuntime runtime) + public void BuildMultipleLibraries ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -433,7 +433,7 @@ public void BuildMultipleLibraries ([Values] AndroidRuntime runtime) } [Test] - public void InvalidItemRefError ([Values] AndroidRuntime runtime) + public void InvalidItemRefError ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -457,7 +457,7 @@ public void InvalidItemRefError ([Values] AndroidRuntime runtime) } [Test] - public void InvalidModuleNameError ([Values] AndroidRuntime runtime) + public void InvalidModuleNameError ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -486,7 +486,7 @@ public void InvalidModuleNameError ([Values] AndroidRuntime runtime) } [Test] - public void BindFacebook ([Values] AndroidRuntime runtime) + public void BindFacebook ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { 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 16b949b4be7..e206f1deb68 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 @@ -19,7 +19,7 @@ namespace Xamarin.Android.Build.Tests public class AndroidUpdateResourcesTest : BaseTest { [Test] - public void CheckMultipleLibraryProjectReferenceAlias ([Values] bool withGlobal, [Values] bool useDesignerAssembly, [Values] AndroidRuntime runtime) + public void CheckMultipleLibraryProjectReferenceAlias ([Values] bool withGlobal, [Values] bool useDesignerAssembly, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -76,7 +76,7 @@ public void CheckMultipleLibraryProjectReferenceAlias ([Values] bool withGlobal, } [Test] - public void BuildAppWithSystemNamespace ([Values] AndroidRuntime runtime) + public void BuildAppWithSystemNamespace ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -110,7 +110,7 @@ public void BuildAppWithSystemNamespace ([Values] AndroidRuntime runtime) } [Test] - public void DesignTimeBuild ([Values] bool isRelease, [Values] bool useManagedParser, [Values] AndroidRuntime runtime) + public void DesignTimeBuild ([Values] bool isRelease, [Values] bool useManagedParser, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -170,7 +170,7 @@ public void DesignTimeBuild ([Values] bool isRelease, [Values] bool useManagedPa } [Test] - public void CheckEmbeddedAndroidXResources ([Values] AndroidRuntime runtime) + public void CheckEmbeddedAndroidXResources ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -193,7 +193,7 @@ public void CheckEmbeddedAndroidXResources ([Values] AndroidRuntime runtime) } [Test] - public void MoveResource ([Values] AndroidRuntime runtime) + public void MoveResource ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -221,7 +221,7 @@ public void MoveResource ([Values] AndroidRuntime runtime) } [Test] - public void ReportAaptErrorsInOriginalFileName ([Values] AndroidRuntime runtime) + public void ReportAaptErrorsInOriginalFileName ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -245,7 +245,7 @@ public void ReportAaptErrorsInOriginalFileName ([Values] AndroidRuntime runtime) } [Test] - public void ReportAaptWarningsForBlankLevel ([Values] AndroidRuntime runtime) + public void ReportAaptWarningsForBlankLevel ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -271,7 +271,7 @@ public void ReportAaptWarningsForBlankLevel ([Values] AndroidRuntime runtime) } [Test] - public void RepetiviteBuildUpdateSingleResource ([Values] AndroidRuntime runtime) + public void RepetiviteBuildUpdateSingleResource ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -325,7 +325,7 @@ public void RepetiviteBuildUpdateSingleResource ([Values] AndroidRuntime runtime [Test] [Category ("XamarinBuildDownload")] [NonParallelizable] - public void Check9PatchFilesAreProcessed ([Values] AndroidRuntime runtime) + public void Check9PatchFilesAreProcessed ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -379,7 +379,7 @@ public void Check9PatchFilesAreProcessed ([Values] AndroidRuntime runtime) /// /// Based on https://bugzilla.xamarin.com/show_bug.cgi?id=29263 /// - public void CheckXmlResourcesFilesAreProcessed ([Values] AndroidRuntime runtime) + public void CheckXmlResourcesFilesAreProcessed ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -594,7 +594,7 @@ static IEnumerable Get_ReleaseLanguageData () { var ret = new List (); - foreach (AndroidRuntime runtime in Enum.GetValues (typeof (AndroidRuntime))) { + foreach (AndroidRuntime runtime in new[] { AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT }) { AddTestData (isRelease: false, language: XamarinAndroidProjectLanguage.CSharp, runtime: runtime); AddTestData (isRelease: true, language: XamarinAndroidProjectLanguage.CSharp, runtime: runtime); AddTestData (isRelease: false, language: XamarinAndroidProjectLanguage.FSharp, runtime: runtime); @@ -685,7 +685,7 @@ public void CheckResourceDesignerIsUpdatedWhenReadOnly (bool isRelease, ProjectL } [Test] - public void CheckOldResourceDesignerIsNotUsed ([Values] bool isRelease, [Values] AndroidRuntime runtime) + public void CheckOldResourceDesignerIsNotUsed ([Values] bool isRelease, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -715,7 +715,7 @@ public void CheckOldResourceDesignerIsNotUsed ([Values] bool isRelease, [Values] // ref https://bugzilla.xamarin.com/show_bug.cgi?id=30089 [Test] - public void CheckOldResourceDesignerWithWrongCasingIsRemoved ([Values] bool isRelease, [Values] AndroidRuntime runtime) + public void CheckOldResourceDesignerWithWrongCasingIsRemoved ([Values] bool isRelease, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -745,7 +745,7 @@ public void CheckOldResourceDesignerWithWrongCasingIsRemoved ([Values] bool isRe } [Test] - public void GenerateResourceDesigner_false ([Values] bool useDesignerAssembly, [Values] AndroidRuntime runtime) + public void GenerateResourceDesigner_false ([Values] bool useDesignerAssembly, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -795,7 +795,7 @@ public void GenerateResourceDesigner_false ([Values] bool useDesignerAssembly, [ } [Test] - public void CheckThatXA1034IsRaisedForInvalidConfiguration ([Values] bool isRelease, [Values] AndroidRuntime runtime) + public void CheckThatXA1034IsRaisedForInvalidConfiguration ([Values] bool isRelease, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -842,7 +842,7 @@ public static string GetFoo () { } [Test] - public void CheckAaptErrorRaisedForMissingResource ([Values] AndroidRuntime runtime) + public void CheckAaptErrorRaisedForMissingResource ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -876,7 +876,7 @@ public void CheckAaptErrorRaisedForMissingResource ([Values] AndroidRuntime runt } [Test] - public void CheckAaptErrorRaisedForInvalidDirectoryName ([Values] AndroidRuntime runtime) + public void CheckAaptErrorRaisedForInvalidDirectoryName ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -900,7 +900,7 @@ public void CheckAaptErrorRaisedForInvalidDirectoryName ([Values] AndroidRuntime } [Test] - public void CheckAaptErrorRaisedForInvalidFileName ([Values] AndroidRuntime runtime) + public void CheckAaptErrorRaisedForInvalidFileName ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -928,7 +928,7 @@ public void CheckAaptErrorRaisedForInvalidFileName ([Values] AndroidRuntime runt } [Test] - public void CheckAaptErrorNotRaisedForInvalidFileNameWithValidLogicalName ([Values] AndroidRuntime runtime) + public void CheckAaptErrorNotRaisedForInvalidFileNameWithValidLogicalName ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -958,7 +958,7 @@ public void CheckAaptErrorNotRaisedForInvalidFileNameWithValidLogicalName ([Valu } [Test] - public void CheckAaptErrorRaisedForDuplicateResourceinApp ([Values] AndroidRuntime runtime) + public void CheckAaptErrorRaisedForDuplicateResourceinApp ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -987,7 +987,7 @@ public void CheckAaptErrorRaisedForDuplicateResourceinApp ([Values] AndroidRunti } [Test] - public void CheckFilesAreRemoved ([Values] AndroidRuntime runtime) + public void CheckFilesAreRemoved ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1022,7 +1022,7 @@ public void CheckFilesAreRemoved ([Values] AndroidRuntime runtime) } [Test] - public void CheckDontUpdateResourceIfNotNeeded ([Values] bool useDesignerAssembly, [Values] AndroidRuntime runtime) + public void CheckDontUpdateResourceIfNotNeeded ([Values] bool useDesignerAssembly, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1137,7 +1137,7 @@ public string GetFoo () { } [Test] - public void BuildAppWithManagedResourceParser ([Values] AndroidRuntime runtime) + public void BuildAppWithManagedResourceParser ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1183,7 +1183,7 @@ public void BuildAppWithManagedResourceParser ([Values] AndroidRuntime runtime) [Test] [NonParallelizable] - public void BuildAppWithManagedResourceParserAndLibraries ([Values] AndroidRuntime runtime) + public void BuildAppWithManagedResourceParserAndLibraries ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1290,7 +1290,7 @@ public void BuildAppWithManagedResourceParserAndLibraries ([Values] AndroidRunti } [Test] - public void CheckMaxResWarningIsEmittedAsAWarning ([Values] AndroidRuntime runtime) + public void CheckMaxResWarningIsEmittedAsAWarning ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1318,7 +1318,7 @@ public void CheckMaxResWarningIsEmittedAsAWarning ([Values] AndroidRuntime runti } [Test] - public void CheckCodeBehindIsGenerated ([Values] AndroidRuntime runtime) + public void CheckCodeBehindIsGenerated ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1380,7 +1380,7 @@ protected override void OnCreate (Bundle bundle) } [Test] - public void CheckInvalidXmlInManagedResourceParser ([Values] AndroidRuntime runtime) + public void CheckInvalidXmlInManagedResourceParser ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1404,7 +1404,7 @@ public void CheckInvalidXmlInManagedResourceParser ([Values] AndroidRuntime runt //NOTE: This test was failing randomly before fixing a bug in `CopyIfChanged`. // Let's set it to run 3 times, it still completes in a reasonable time ~1.5 min. [Test, Repeat(3)] - public void LightlyModifyLayout ([Values] AndroidRuntime runtime) + public void LightlyModifyLayout ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1428,7 +1428,7 @@ public void LightlyModifyLayout ([Values] AndroidRuntime runtime) } [Test] - public void CustomViewAddResourceId ([Values] AndroidRuntime runtime) + public void CustomViewAddResourceId ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1466,7 +1466,7 @@ public void CustomViewAddResourceId ([Values] AndroidRuntime runtime) [Test] [Parallelizable (ParallelScope.Self)] - public void CheckNoVersionVectors ([Values] AndroidRuntime runtime) + public void CheckNoVersionVectors ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1493,7 +1493,7 @@ public void CheckNoVersionVectors ([Values] AndroidRuntime runtime) } [Test] - public void InvalidFilenames ([Values] AndroidRuntime runtime) + public void InvalidFilenames ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1520,7 +1520,7 @@ BuildItem CreateItem (string include) => } [Test] - public void SolutionBuildSeveralProjects ([Values] AndroidRuntime runtime) + public void SolutionBuildSeveralProjects ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { 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..05551929448 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 @@ -58,68 +58,11 @@ void AssertProfiledAotBuildMessages(ProjectBuilder b) StringAssertEx.ContainsRegex (@$"Method.*emitted at", b.LastBuildOutput, "Should contain verbose AOT compiler output", RegexOptions.IgnoreCase); } - [Test, Category ("ProfiledAOT")] - public void BuildBasicApplicationReleaseProfiledAot ([Values (true, false)] bool enableLLVM) - { - if (TestEnvironment.IsWindows && enableLLVM) { - Assert.Ignore("https://github.com/dotnet/runtime/issues/93788"); - } - - var proj = new XamarinAndroidApplicationProject () { - IsRelease = true, - AndroidEnableProfiledAot = true, - }; - // Mono-only test - proj.SetRuntime (AndroidRuntime.MonoVM); - proj.SetProperty ("EnableLLVM", enableLLVM.ToString ()); - proj.SetProperty (proj.ActiveConfigurationProperties, "AndroidExtraAotOptions", "--verbose"); - using var b = CreateApkBuilder (); - b.Verbosity = LoggerVerbosity.Detailed; - Assert.IsTrue (b.Build (proj), "Build should have succeeded."); - AssertProfiledAotBuildMessages (b); - } - - [Test, Category ("ProfiledAOT")] - public void BuildBasicApplicationReleaseWithCustomAotProfile () - { - var proj = new XamarinAndroidApplicationProject () { - IsRelease = true, - AndroidEnableProfiledAot = true, - }; - // A Mono-only test - proj.SetRuntime (AndroidRuntime.MonoVM); - proj.SetProperty (proj.ActiveConfigurationProperties, "AndroidExtraAotOptions", "--verbose"); - - byte [] custom_aot_profile = XamarinAndroidCommonProject.GetResourceContents ("Xamarin.ProjectTools.Resources.Base.custom.aotprofile"); - proj.OtherBuildItems.Add (new BuildItem ("AndroidAotProfile", "custom.aotprofile") { BinaryContent = () => custom_aot_profile }); - - using var b = CreateApkBuilder (); - b.Verbosity = LoggerVerbosity.Detailed; - Assert.IsTrue (b.Build (proj), "Build should have succeeded."); - AssertProfiledAotBuildMessages (b); - } - - [Test, Category ("ProfiledAOT")] - public void BuildBasicApplicationReleaseProfiledAotWithoutDefaultProfile () - { - var proj = new XamarinAndroidApplicationProject () { - IsRelease = true, - AndroidEnableProfiledAot = true, - }; - // Mono-only test - proj.SetRuntime (AndroidRuntime.MonoVM); - proj.SetProperty (proj.ActiveConfigurationProperties, "AndroidUseDefaultAotProfile", "false"); - using var b = CreateApkBuilder (); - b.Verbosity = LoggerVerbosity.Detailed; - Assert.IsTrue (b.Build (proj), "Build should have succeeded."); - StringAssertEx.DoesNotContainRegex (@$"Using profile data file.*dotnet\.aotprofile", b.LastBuildOutput, "Should not use default AOT profile", RegexOptions.IgnoreCase); - } - static IEnumerable Get_BuildAotApplicationWithSpecialCharactersInProjectData () { var ret = new List (); - foreach (AndroidRuntime runtime in new[] { AndroidRuntime.MonoVM, AndroidRuntime.CoreCLR }) { + foreach (AndroidRuntime runtime in new[] { AndroidRuntime.CoreCLR }) { AddTestData ("テスト", false, false, runtime); AddTestData ("テスト", true, true, runtime); AddTestData ("テスト", true, false, runtime); @@ -165,139 +108,8 @@ public void BuildAotApplicationWithSpecialCharactersInProject (string testName, } } - static object [] AotChecks () => new object [] { - new object[] { - /* supportedAbis */ "arm64-v8a", - /* enableLLVM */ false, - /* usesAssemblyBlobs */ false, - }, - new object[] { - /* supportedAbis */ "armeabi-v7a;x86", - /* enableLLVM */ true, - /* usesAssemblyBlobs */ true, - }, - new object[] { - /* supportedAbis */ "armeabi-v7a;arm64-v8a;x86;x86_64", - /* enableLLVM */ false, - /* usesAssemblyBlobs */ true, - }, - new object[] { - /* supportedAbis */ "armeabi-v7a;arm64-v8a;x86;x86_64", - /* enableLLVM */ true, - /* usesAssemblyBlobs */ false, - }, - }; - - // TODO: possibly enable NativeAOT - [Test] - [TestCaseSource (nameof (AotChecks))] - public void BuildAotApplicationWithNdkAndBundleAndÜ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 path = Path.Combine ("temp", string.Format ("BuildAotNdk AndÜmläüts_{0}_{1}_{2}", abisSanitized, enableLLVM, usesAssemblyBlobs)); - var proj = new XamarinAndroidApplicationProject () { - IsRelease = true, - AotAssemblies = true, - PackageName = "com.xamarin.buildaotappwithspecialchars", - }; - - // Mono-only test - proj.SetRuntime (AndroidRuntime.MonoVM); - proj.SetProperty ("AndroidNdkDirectory", AndroidNdkPath); - proj.SetRuntimeIdentifiers (supportedAbis.Split (';')); - proj.SetProperty ("EnableLLVM", enableLLVM.ToString ()); - proj.SetProperty ("AndroidUseAssemblyStore", usesAssemblyBlobs.ToString ()); - bool checkMinLlvmPath = enableLLVM && (supportedAbis == "armeabi-v7a" || supportedAbis == "x86"); - if (checkMinLlvmPath) { - // Set //uses-sdk/@android:minSdkVersion so that LLVM uses the right libc.so - proj.AndroidManifest = $@" - - - - -"; - } - using (var b = CreateApkBuilder (path)) { - b.ThrowOnBuildFailure = false; - Assert.IsTrue (b.Build (proj), "Build should have succeeded."); - foreach (var abi in supportedAbis.Split (new char [] { ';' })) { - var intermediate = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath); - var aotNativeLibrary = Path.Combine (intermediate, AbiUtils.AbiToRuntimeIdentifier (abi), "aot", "UnnamedProject.dll.so"); - FileAssert.Exists (aotNativeLibrary); - var apk = Path.Combine (Root, b.ProjectDirectory, - proj.OutputPath, $"{proj.PackageName}-Signed.apk"); - - var helper = new ArchiveAssemblyHelper (apk, usesAssemblyBlobs); - Assert.IsTrue (helper.Exists ($"assemblies/{abi}/UnnamedProject.dll"), $"{abi}/UnnamedProject.dll should be in {proj.PackageName}-Signed.apk"); - using (var zipFile = ZipHelper.OpenZip (apk)) { - Assert.IsNotNull (ZipHelper.ReadFileFromZip (zipFile, - string.Format ("lib/{0}/libaot-UnnamedProject.dll.so", abi)), - $"lib/{0}/libaot-UnnamedProject.dll.so should be in the {proj.PackageName}-Signed.apk", abi); - } - } - 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"); - } - } - - [Test] - [TestCaseSource (nameof (AotChecks))] - 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 path = Path.Combine ("temp", string.Format ("BuildAot AndÜmläüts_{0}_{1}_{2}", abisSanitized, enableLLVM, usesAssemblyBlobs)); - var proj = new XamarinAndroidApplicationProject () { - IsRelease = true, - AotAssemblies = true, - PackageName = "com.xamarin.buildaotappandbundlewithspecialchars", - }; - - // Mono-only test - proj.SetRuntime (AndroidRuntime.MonoVM); - proj.SetRuntimeIdentifiers (supportedAbis.Split (';')); - proj.SetProperty ("EnableLLVM", enableLLVM.ToString ()); - proj.SetProperty ("AndroidUseAssemblyStore", usesAssemblyBlobs.ToString ()); - using (var b = CreateApkBuilder (path)) { - b.ThrowOnBuildFailure = false; - Assert.IsTrue (b.Build (proj), "Build should have succeeded."); - foreach (var abi in supportedAbis.Split (new char [] { ';' })) { - var intermediate = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath); - var aotNativeLibrary = Path.Combine (intermediate, AbiUtils.AbiToRuntimeIdentifier (abi), "aot", "UnnamedProject.dll.so"); - FileAssert.Exists (aotNativeLibrary); - var apk = Path.Combine (Root, b.ProjectDirectory, - proj.OutputPath, $"{proj.PackageName}-Signed.apk"); - - var helper = new ArchiveAssemblyHelper (apk, usesAssemblyBlobs); - Assert.IsTrue (helper.Exists ($"assemblies/{abi}/UnnamedProject.dll"), $"{abi}/UnnamedProject.dll should be in {proj.PackageName}-Signed.apk"); - using (var zipFile = ZipHelper.OpenZip (apk)) { - Assert.IsNotNull (ZipHelper.ReadFileFromZip (zipFile, - string.Format ("lib/{0}/libaot-UnnamedProject.dll.so", abi)), - $"lib/{0}/libaot-UnnamedProject.dll.so should be in the {proj.PackageName}-Signed.apk", abi); - } - } - 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"); - } - } [Test] - [TestCase (AndroidRuntime.MonoVM)] [TestCase (AndroidRuntime.CoreCLR)] [NonParallelizable] [Category ("XamarinBuildDownload")] @@ -383,118 +195,6 @@ public static void Foo () { sb.Dispose (); } - [Test] - [Category ("LLVM")] - public void NoSymbolsArgShouldReduceAppSize ([Values (false, true)] bool skipDebugSymbols) - { - if (IsWindows) - Assert.Ignore ("https://github.com/dotnet/runtime/issues/88625"); - - var proj = new XamarinAndroidApplicationProject () { - IsRelease = true, - AotAssemblies = true, - }; - - // Mono-only test - proj.SetRuntime (AndroidRuntime.MonoVM); - - var supportedAbi = "arm64-v8a"; - proj.SetRuntimeIdentifiers (new[] { supportedAbi }); - proj.SetProperty ("EnableLLVM", true.ToString ()); - - var xaAssemblySize = 0; - var xaAssemblySizeNoSymbol = 0; - - using (var b = CreateApkBuilder ()) { - b.ThrowOnBuildFailure = false; - Assert.IsTrue (b.Build (proj), "First build should have succeeded."); - var apkPath = Path.Combine (Root, b.ProjectDirectory, proj.OutputPath, $"{proj.PackageName}-Signed.apk"); - FileAssert.Exists (apkPath); - using (var apk = ZipHelper.OpenZip (apkPath)) { - xaAssemblySize = ZipHelper.ReadFileFromZip (apk, $"lib/{supportedAbi}/libaot-Mono.Android.dll.so").Length; - } - - string additionalArgs = "no-write-symbols"; - if (skipDebugSymbols) { - additionalArgs += ",nodebug"; - } - proj.SetProperty ("AndroidAotAdditionalArguments", additionalArgs); - Assert.IsTrue (b.Build (proj), "Second build should have succeeded."); - FileAssert.Exists (apkPath); - using (var apk = ZipHelper.OpenZip (apkPath)) { - xaAssemblySizeNoSymbol = ZipHelper.ReadFileFromZip (apk, $"lib/{supportedAbi}/libaot-Mono.Android.dll.so").Length; - } - Assert.IsTrue (xaAssemblySize > 0 && xaAssemblySizeNoSymbol > 0, $"Mono.Android.dll.so size was not updated after first or second build. Before: '{xaAssemblySize}' After: '{xaAssemblySizeNoSymbol}'."); - Assert.Less (xaAssemblySizeNoSymbol, xaAssemblySize, "Mono.Android.dll.so should have been smaller after 'no-write-symbols' build."); - } - } - - [Test] - [Category ("AOT")] - public void AotAssembliesInIDE () - { - string supportedAbis = "arm64-v8a"; - var proj = new XamarinAndroidApplicationProject () { - IsRelease = true, - AotAssemblies = true, - }; - // Mono-only test - proj.SetRuntime (AndroidRuntime.MonoVM); - proj.SetRuntimeIdentifiers (supportedAbis.Split (';')); - using var b = CreateApkBuilder (); - Assert.IsTrue (b.RunTarget (proj, target: "Build")); - - // .apk won't exist yet - var apk = Path.Combine (Root, b.ProjectDirectory, proj.OutputPath, $"{proj.PackageName}-Signed.apk"); - FileAssert.DoesNotExist (apk); - - Assert.IsTrue (b.RunTarget (proj, target: "SignAndroidPackage")); - FileAssert.Exists (apk); - - using var zipFile = ZipHelper.OpenZip (apk); - foreach (var abi in supportedAbis.Split (';')) { - var path = $"lib/{abi}/libaot-Mono.Android.dll.so"; - var entry = ZipHelper.ReadFileFromZip (zipFile, path); - Assert.IsNotNull (entry, $"{path} should be in {apk}", abi); - } - } - - [Test] - public void CheckWhetherLibcAndLibmAreReferencedInAOTLibraries () - { - if (IsWindows) - Assert.Ignore ("https://github.com/dotnet/runtime/issues/88625"); - - var proj = new XamarinAndroidApplicationProject { - IsRelease = true, - EmbedAssembliesIntoApk = true, - AotAssemblies = true, - }; - // Mono-only test - proj.SetRuntime (AndroidRuntime.MonoVM); - proj.SetProperty ("EnableLLVM", "True"); - - var abis = new [] { "arm64-v8a", "x86_64" }; - proj.SetRuntimeIdentifiers (abis); - - var libPaths = new List (); - libPaths.Add (Path.Combine ("android-arm64", "aot", "Mono.Android.dll.so")); - libPaths.Add (Path.Combine ("android-x64", "aot", "Mono.Android.dll.so")); - - using (var b = CreateApkBuilder ()) { - Assert.IsTrue (b.Build (proj), "Build should have succeeded."); - string objPath = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath); - - foreach (string libPath in libPaths) { - string lib = Path.Combine (objPath, libPath); - - Assert.IsTrue (File.Exists (lib), $"Library {lib} should exist on disk"); - Assert.IsTrue (ELFHelper.ReferencesLibrary (lib, "libc.so"), $"Library {lib} should reference libc.so"); - Assert.IsTrue (ELFHelper.ReferencesLibrary (lib, "libm.so"), $"Library {lib} should reference libm.so"); - } - } - } - [Test] public void RunAOTCompilationWithCoreClrFailsBuild () { 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..c272847f290 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 @@ -14,7 +14,7 @@ public class AssetPackTests : BaseTest { [Test] [Category ("SmokeTests")] - public void BuildLibraryWithAssetPack ([Values] bool isRelease, [Values] AndroidRuntime runtime) + public void BuildLibraryWithAssetPack ([Values] bool isRelease, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -41,7 +41,7 @@ public void BuildLibraryWithAssetPack ([Values] bool isRelease, [Values] Android [Test] [Category ("SmokeTests")] - public void BuildApplicationWithAssetPackThatHasInvalidName ([Values] bool isRelease, [Values] AndroidRuntime runtime) + public void BuildApplicationWithAssetPackThatHasInvalidName ([Values] bool isRelease, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -69,7 +69,7 @@ public void BuildApplicationWithAssetPackThatHasInvalidName ([Values] bool isRel [Test] [Category ("SmokeTests")] - public void BuildApplicationWithAssetPackOutsideProjectDirectory ([Values] bool isRelease, [Values] AndroidRuntime runtime) + public void BuildApplicationWithAssetPackOutsideProjectDirectory ([Values] bool isRelease, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -118,7 +118,7 @@ public void BuildApplicationWithAssetPackOutsideProjectDirectory ([Values] bool [Test] [Category ("SmokeTests")] - public void BuildApplicationWithAssetPackOverrides ([Values] bool isRelease, [Values] AndroidRuntime runtime) + public void BuildApplicationWithAssetPackOverrides ([Values] bool isRelease, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -160,7 +160,7 @@ public void BuildApplicationWithAssetPackOverrides ([Values] bool isRelease, [Va [Test] [Category ("SmokeTests")] - public void BuildApplicationWithAssetPack ([Values] bool isRelease, [Values] AndroidRuntime runtime) + public void BuildApplicationWithAssetPack ([Values] bool isRelease, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; 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 3d4f5b6cad5..d1b598adf1e 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 @@ -18,7 +18,7 @@ namespace Xamarin.Android.Build.Tests public class BindingBuildTest : BaseTest { [Test] - public void DotNetBuildBinding ([Values] AndroidRuntime runtime) + public void DotNetBuildBinding ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -74,7 +74,7 @@ static IEnumerable Get_ClassParseOptions () { var ret = new List (); - foreach (AndroidRuntime runtime in Enum.GetValues (typeof (AndroidRuntime))) { + foreach (AndroidRuntime runtime in new[] { AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT }) { AddTestData ("class-parse", runtime); } @@ -281,7 +281,7 @@ public void BuildLibraryZipBindingLibraryWithAarOfJar (string classParser, Andro [Test] [Category ("Minor")] - public void BindByteArrayInMethodParameter ([Values] AndroidRuntime runtime) + public void BindByteArrayInMethodParameter ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -301,7 +301,7 @@ public void BindByteArrayInMethodParameter ([Values] AndroidRuntime runtime) } [Test] - public void MergeAndroidManifest ([Values] AndroidRuntime runtime) + public void MergeAndroidManifest ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -337,7 +337,7 @@ public void MergeAndroidManifest ([Values] AndroidRuntime runtime) } [Test] - public void AnnotationSupport ([Values] AndroidRuntime runtime) + public void AnnotationSupport ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -360,7 +360,7 @@ public void AnnotationSupport ([Values] AndroidRuntime runtime) } [Test] - public void BindingCustomJavaApplicationClass ([Values] AndroidRuntime runtime) + public void BindingCustomJavaApplicationClass ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -390,7 +390,7 @@ public void BindingCustomJavaApplicationClass ([Values] AndroidRuntime runtime) } [Test] - public void BindngFilterUnsupportedNativeAbiLibraries ([Values] AndroidRuntime runtime) + public void BindngFilterUnsupportedNativeAbiLibraries ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -421,7 +421,7 @@ public void BindngFilterUnsupportedNativeAbiLibraries ([Values] AndroidRuntime r } [Test] - public void BindingCheckHiddenFiles ([Values] AndroidRuntime runtime) + public void BindingCheckHiddenFiles ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -475,7 +475,7 @@ public void BindingCheckHiddenFiles ([Values] AndroidRuntime runtime) } [Test] - public void BindingDoNotPackage ([Values] AndroidRuntime runtime) + public void BindingDoNotPackage ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -534,7 +534,7 @@ public void OnUpdate (Java.Lang.Object p0) } [Test] - public void AndroidLibraryPackFalseExcludesJarFromAar ([Values] AndroidRuntime runtime) + public void AndroidLibraryPackFalseExcludesJarFromAar ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -576,7 +576,7 @@ public void AndroidLibraryPackFalseExcludesJarFromAar ([Values] AndroidRuntime r } [Test] - public void RemoveEventHandlerResolution ([Values] AndroidRuntime runtime) + public void RemoveEventHandlerResolution ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -605,7 +605,7 @@ public void RemoveEventHandlerResolution ([Values] AndroidRuntime runtime) } [Test] - public void JavaSourceJar ([Values] AndroidRuntime runtime) + public void JavaSourceJar ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -644,7 +644,7 @@ public void JavaSourceJar ([Values] AndroidRuntime runtime) } [Test] - public void AppWithSingleJar ([Values] AndroidRuntime runtime) + public void AppWithSingleJar ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -686,7 +686,7 @@ public void AppWithSingleJar ([Values] AndroidRuntime runtime) [Test] [TestCaseSource (nameof (Get_ClassParseOptions))] - public void DesignTimeBuild (string classParser, [Values] AndroidRuntime runtime) + public void DesignTimeBuild (string classParser, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -718,7 +718,7 @@ public void DesignTimeBuild (string classParser, [Values] AndroidRuntime runtime [Test] [TestCaseSource (nameof (Get_ClassParseOptions))] - public void NullableReferenceTypes (string classParser, [Values] AndroidRuntime runtime) + public void NullableReferenceTypes (string classParser, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -747,7 +747,7 @@ public void NullableReferenceTypes (string classParser, [Values] AndroidRuntime [Test] [TestCaseSource (nameof (Get_ClassParseOptions))] - public void BindDefaultInterfaceMethods (string classParser, [Values] AndroidRuntime runtime) + public void BindDefaultInterfaceMethods (string classParser, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -809,7 +809,7 @@ public void BindDefaultInterfaceMethods (string classParser, [Values] AndroidRun [Test] [TestCaseSource (nameof (Get_ClassParseOptions))] - public void NothingToBind (string classParser, [Values] AndroidRuntime runtime) + public void NothingToBind (string classParser, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -827,7 +827,7 @@ public void NothingToBind (string classParser, [Values] AndroidRuntime runtime) } [Test] - public void BindingWithAndroidJavaSource ([Values] AndroidRuntime runtime) + public void BindingWithAndroidJavaSource ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -907,7 +907,7 @@ public void BindingWithAndroidJavaSource ([Values] AndroidRuntime runtime) } [Test] - public void LibraryProjectZipWithLint ([Values] AndroidRuntime runtime) + public void LibraryProjectZipWithLint ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -949,7 +949,7 @@ public void LibraryProjectZipWithLint ([Values] AndroidRuntime runtime) /// Tests two .aar files with r-classes.jar, repackaged.jar /// [Test] - public void CheckDuplicateJavaLibraries ([Values] AndroidRuntime runtime) + public void CheckDuplicateJavaLibraries ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1012,7 +1012,7 @@ public void CheckDuplicateJavaLibraries ([Values] AndroidRuntime runtime) [Test] [NonParallelizable] // All tests are accessing the same .pom file - public void AndroidMavenLibrary ([Values] AndroidRuntime runtime) + public void AndroidMavenLibrary ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1038,7 +1038,7 @@ public void AndroidMavenLibrary ([Values] AndroidRuntime runtime) } [Test] - public void AndroidMavenLibrary_FailsDueToUnverifiedDependency ([Values] AndroidRuntime runtime) + public void AndroidMavenLibrary_FailsDueToUnverifiedDependency ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1067,7 +1067,7 @@ public void AndroidMavenLibrary_FailsDueToUnverifiedDependency ([Values] Android } [Test] - public void AndroidMavenLibrary_IgnoreDependencyVerification ([Values] AndroidRuntime runtime) + public void AndroidMavenLibrary_IgnoreDependencyVerification ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1094,7 +1094,7 @@ public void AndroidMavenLibrary_IgnoreDependencyVerification ([Values] AndroidRu } [Test] - public void AndroidMavenLibrary_AllDependenciesAreVerified ([Values] AndroidRuntime runtime) + public void AndroidMavenLibrary_AllDependenciesAreVerified ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.TestCaseSource.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.TestCaseSource.cs index 4aff396a95b..468f5480140 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.TestCaseSource.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.TestCaseSource.cs @@ -13,118 +13,6 @@ namespace Xamarin.Android.Build.Tests public partial class BuildTest : BaseTest { static readonly object [] DotNetBuildSource = new object [] { - new object [] { - /* runtimeIdentifiers */ "android-arm", - /* isRelease */ false, - /* aot */ false, - /* usesAssemblyStore */ false, - /* runtime */ AndroidRuntime.MonoVM, - }, - new object [] { - /* runtimeIdentifiers */ "android-arm", - /* isRelease */ false, - /* aot */ false, - /* usesAssemblyStore */ true, - /* runtime */ AndroidRuntime.MonoVM, - }, - new object [] { - /* runtimeIdentifiers */ "android-arm64", - /* isRelease */ false, - /* aot */ false, - /* usesAssemblyStore */ false, - /* runtime */ AndroidRuntime.MonoVM, - }, - new object [] { - /* runtimeIdentifiers */ "android-x86", - /* isRelease */ false, - /* aot */ false, - /* usesAssemblyStore */ false, - /* runtime */ AndroidRuntime.MonoVM, - }, - new object [] { - /* runtimeIdentifiers */ "android-x64", - /* isRelease */ false, - /* aot */ false, - /* usesAssemblyStore */ false, - /* runtime */ AndroidRuntime.MonoVM, - }, - new object [] { - /* runtimeIdentifiers */ "android-arm", - /* isRelease */ true, - /* aot */ false, - /* usesAssemblyStore */ false, - /* runtime */ AndroidRuntime.MonoVM, - }, - new object [] { - /* runtimeIdentifiers */ "android-arm", - /* isRelease */ true, - /* aot */ false, - /* usesAssemblyStore */ true, - /* runtime */ AndroidRuntime.MonoVM, - }, - new object [] { - /* runtimeIdentifiers */ "android-arm", - /* isRelease */ true, - /* aot */ true, - /* usesAssemblyStore */ false, - /* runtime */ AndroidRuntime.MonoVM, - }, - new object [] { - /* runtimeIdentifiers */ "android-arm", - /* isRelease */ true, - /* aot */ true, - /* usesAssemblyStore */ true, - /* runtime */ AndroidRuntime.MonoVM, - }, - new object [] { - /* runtimeIdentifiers */ "android-arm64", - /* isRelease */ true, - /* aot */ false, - /* usesAssemblyStore */ false, - /* runtime */ AndroidRuntime.MonoVM, - }, - new object [] { - /* runtimeIdentifiers */ "android-arm;android-arm64;android-x86;android-x64", - /* isRelease */ false, - /* aot */ false, - /* usesAssemblyStore */ false, - /* runtime */ AndroidRuntime.MonoVM, - }, - new object [] { - /* runtimeIdentifiers */ "android-arm;android-arm64;android-x86;android-x64", - /* isRelease */ false, - /* aot */ false, - /* usesAssemblyStore */ true, - /* runtime */ AndroidRuntime.MonoVM, - }, - new object [] { - /* runtimeIdentifiers */ "android-arm;android-arm64;android-x86", - /* isRelease */ true, - /* aot */ false, - /* usesAssemblyStore */ false, - /* runtime */ AndroidRuntime.MonoVM, - }, - new object [] { - /* runtimeIdentifiers */ "android-arm;android-arm64;android-x86;android-x64", - /* isRelease */ true, - /* aot */ false, - /* usesAssemblyStore */ false, - /* runtime */ AndroidRuntime.MonoVM, - }, - new object [] { - /* runtimeIdentifiers */ "android-arm;android-arm64;android-x86;android-x64", - /* isRelease */ true, - /* aot */ false, - /* usesAssemblyStore */ true, - /* runtime */ AndroidRuntime.MonoVM, - }, - new object [] { - /* runtimeIdentifiers */ "android-arm;android-arm64;android-x86;android-x64", - /* isRelease */ true, - /* aot */ true, - /* usesAssemblyStore */ false, - /* runtime */ AndroidRuntime.MonoVM, - }, new object [] { /* runtimeIdentifiers */ "android-arm64", /* isRelease */ true, @@ -148,44 +36,5 @@ public partial class BuildTest : BaseTest }, }; -#pragma warning disable 414 - static object [] RuntimeChecks () => new object [] { - new object[] { - /* supportedAbi */ "armeabi-v7a", - /* debugSymbols */ true , - /* optimize */ true , - /* embedassebmlies */ true , - /* expectedResult */ "release", - }, - new object[] { - /* supportedAbi */ "armeabi-v7a", - /* debugSymbols */ true , - /* optimize */ true , - /* embedassebmlies */ false , - /* expectedResult */ "debug", - }, - new object[] { - /* supportedAbi */ "armeabi-v7a", - /* debugSymbols */ true , - /* optimize */ false , - /* embedassebmlies */ true , - /* expectedResult */ "debug", - }, - new object[] { - /* supportedAbi */ "armeabi-v7a", - /* debugSymbols */ true , - /* optimize */ false , - /* embedassebmlies */ false , - /* expectedResult */ "debug", - }, - new object[] { - /* supportedAbi */ "armeabi-v7a", - /* debugSymbols */ false , - /* optimize */ null , - /* embedassebmlies */ null , - /* expectedResult */ "debug", - }, - }; -#pragma warning restore 414 } } diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs index e78b7a7eaa2..0bce8de3328 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs @@ -210,69 +210,12 @@ public void DotNetBuild (string runtimeIdentifiers, bool isRelease, bool aot, bo } } - static object [] MonoComponentMaskChecks () => new object [] { - new object[] { - true, // enableProfiler - true, // useInterpreter - true, // debugBuild - 0x07U, // expectedMask - }, - - new object[] { - true, // enableProfiler - false, // useInterpreter - true, // debugBuild - 0x05U, // expectedMask - }, - - new object[] { - false, // enableProfiler - false, // useInterpreter - true, // debugBuild - 0x01U, // expectedMask - }, - - new object[] { - true, // enableProfiler - false, // useInterpreter - false, // debugBuild - 0x04U, // expectedMask - }, - }; - - [Test] - [TestCaseSource (nameof (MonoComponentMaskChecks))] - public void CheckMonoComponentsMask (bool enableProfiler, bool useInterpreter, bool debugBuild, uint expectedMask) - { - var proj = new XamarinAndroidApplicationProject () { - IsRelease = !debugBuild, - }; - - // Mono-only test - proj.SetRuntime (AndroidRuntime.MonoVM); - proj.SetProperty (proj.ActiveConfigurationProperties, "AndroidEnableProfiler", enableProfiler.ToString ()); - proj.SetProperty (proj.ActiveConfigurationProperties, "UseInterpreter", useInterpreter.ToString ()); - - var abis = new [] { "armeabi-v7a", "x86" }; - proj.SetRuntimeIdentifiers (abis); - - using (var b = CreateApkBuilder ()) { - Assert.IsTrue (b.Build (proj), "Build should have succeeded."); - b.AssertHasNoWarnings (); - string objPath = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath); - - List envFiles = EnvironmentHelper.GatherEnvironmentFiles (objPath, String.Join (";", abis), true); - var app_config = (EnvironmentHelper.ApplicationConfig_MonoVM)EnvironmentHelper.ReadApplicationConfig (envFiles, AndroidRuntime.MonoVM); - Assert.That (app_config, Is.Not.Null, "application_config must be present in the environment files"); - Assert.IsTrue (app_config.mono_components_mask == expectedMask, "Expected Mono Components mask 0x{expectedMask:x}, got 0x{app_config.mono_components_mask:x}"); - } - } [Test] [NonParallelizable] public void CheckAssemblyCounts ([Values (true, false)] bool isRelease, [Values (true, false)] bool aot, - [Values (AndroidRuntime.MonoVM, AndroidRuntime.CoreCLR)] AndroidRuntime runtime) + [Values (AndroidRuntime.CoreCLR)] AndroidRuntime runtime) { if (isRelease == false && aot == true) { Assert.Ignore ("Not testing AOT with Debug builds"); @@ -328,7 +271,7 @@ public void CheckAssemblyCounts ([Values (true, false)] bool isRelease, [Values // DotNet fails, see https://github.com/dotnet/runtime/issues/65484 // Enable the commented out signature (and AOT) once the above is fixed [Test] - public void SmokeTestBuildWithSpecialCharacters ([Values (false, true)] bool forms, [Values (false, true)] bool aot, [Values] AndroidRuntime runtime) + public void SmokeTestBuildWithSpecialCharacters ([Values (false, true)] bool forms, [Values (false, true)] bool aot, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, aot: aot, release: true)) { return; @@ -365,38 +308,7 @@ public static string GetLinkedPath (ProjectBuilder builder, bool isRelease, stri } [Test] - [TestCaseSource (nameof (RuntimeChecks))] - public void CheckWhichRuntimeIsIncluded (string supportedAbi, bool debugSymbols, bool? optimize, bool? embedAssemblies, string expectedRuntime) { - var proj = new XamarinAndroidApplicationProject (); - // MonoVM-only test - proj.SetRuntime (Android.Tasks.AndroidRuntime.MonoVM); - proj.SetRuntimeIdentifiers (new[] { supportedAbi }); - proj.SetProperty (proj.ActiveConfigurationProperties, "DebugSymbols", debugSymbols); - if (optimize.HasValue) - proj.SetProperty (proj.ActiveConfigurationProperties, "Optimize", optimize.Value); - else - proj.RemoveProperty (proj.ActiveConfigurationProperties, "Optimize"); - if (embedAssemblies.HasValue) - proj.SetProperty (proj.ActiveConfigurationProperties, KnownProperties.EmbedAssembliesIntoApk, embedAssemblies.Value); - else - proj.RemoveProperty (proj.ActiveConfigurationProperties, KnownProperties.EmbedAssembliesIntoApk); - using (var b = CreateApkBuilder ()) { - var runtimeInfo = b.GetSupportedRuntimes (); - Assert.IsTrue (b.Build (proj), "Build should have succeeded."); - var apkPath = Path.Combine (Root, b.ProjectDirectory, - proj.OutputPath, $"{proj.PackageName}-Signed.apk"); - using (var apk = ZipHelper.OpenZip (apkPath)) { - var runtime = runtimeInfo.FirstOrDefault (x => x.Abi == supportedAbi && x.Runtime == expectedRuntime); - Assert.IsNotNull (runtime, "Could not find the expected runtime."); - var inApk = ZipHelper.ReadFileFromZip (apk, $"lib/{supportedAbi}/{runtime.Name}"); - var inApkRuntime = runtimeInfo.FirstOrDefault (x => x.Abi == supportedAbi && x.Size == inApk.Length); - Assert.IsNotNull (inApkRuntime, "Could not find the actual runtime used."); - } - } - } - - [Test] - public void CheckItemMetadata ([Values (true, false)] bool isRelease, [Values] AndroidRuntime runtime) + public void CheckItemMetadata ([Values (true, false)] bool isRelease, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -440,7 +352,7 @@ public void CheckItemMetadata ([Values (true, false)] bool isRelease, [Values] A // Context https://bugzilla.xamarin.com/show_bug.cgi?id=29706 [Test] - public void CheckLogicalNamePathSeperators ([Values (false, true)] bool isRelease, [Values (false, true)] bool useDesignerAssembly, [Values] AndroidRuntime runtime) + public void CheckLogicalNamePathSeperators ([Values (false, true)] bool isRelease, [Values (false, true)] bool useDesignerAssembly, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -491,7 +403,7 @@ public void CheckLogicalNamePathSeperators ([Values (false, true)] bool isReleas } [Test] - public void ApplicationJavaClassProperties ([Values] AndroidRuntime runtime) + public void ApplicationJavaClassProperties ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime)) { return; @@ -508,7 +420,7 @@ public void ApplicationJavaClassProperties ([Values] AndroidRuntime runtime) } [Test] - public void ApplicationIdPlaceholder ([Values] AndroidRuntime runtime) + public void ApplicationIdPlaceholder ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime)) { return; @@ -528,7 +440,7 @@ public void ApplicationIdPlaceholder ([Values] AndroidRuntime runtime) } [Test] - public void AarContentExtraction ([Values] AndroidRuntime runtime) + public void AarContentExtraction ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -724,7 +636,7 @@ public interface OnFooListener [Test] [Category ("AOT")] [NonParallelizable] - public void BuildApplicationWithSpacesInPath ([Values (true, false)] bool enableMultiDex, [Values ("", "r8")] string linkTool, [Values] AndroidRuntime runtime) + public void BuildApplicationWithSpacesInPath ([Values (true, false)] bool enableMultiDex, [Values ("", "r8")] string linkTool, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; bool aotAssemblies = runtime == AndroidRuntime.MonoVM; @@ -793,7 +705,7 @@ public void BuildApplicationWithSpacesInPath ([Values (true, false)] bool enable //This test validates the _CleanIntermediateIfNeeded target [Test] [NonParallelizable] - public void BuildAfterUpgradingNuget ([Values] AndroidRuntime runtime) + public void BuildAfterUpgradingNuget ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1022,7 +934,7 @@ public void InvalidTargetPlatformVersion ([Values ("android33", "android99.0")] } [Test] - public void XA4212 ([Values] AndroidRuntime runtime) + public void XA4212 ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1059,7 +971,7 @@ public void Dispose () } [Test] - public void Desugar ([Values (true, false)] bool isRelease, [Values ("", "r8")] string linkTool, [Values] AndroidRuntime runtime) + public void Desugar ([Values (true, false)] bool isRelease, [Values ("", "r8")] string linkTool, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -1172,7 +1084,7 @@ public void foo() //See: https://developer.android.com/about/versions/marshmallow/android-6.0-changes#behavior-apache-http-client [Test] - public void MissingOrgApacheHttpClient ([Values] AndroidRuntime runtime) + public void MissingOrgApacheHttpClient ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1199,7 +1111,7 @@ public void MissingOrgApacheHttpClient ([Values] AndroidRuntime runtime) //NOTE: tests type forwarders in Mono.Android.dll to System.Drawing.Common.dll [Test] - public void SystemDrawingCommon ([Values] AndroidRuntime runtime) + public void SystemDrawingCommon ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1225,7 +1137,7 @@ public void SystemDrawingCommon ([Values] AndroidRuntime runtime) //NOTE: Referencing only Microsoft.Extensions.Http, surfaced a bug in [Test] - public void MicrosoftExtensionsHttp ([Values] AndroidRuntime runtime) + public void MicrosoftExtensionsHttp ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1260,7 +1172,7 @@ public void MicrosoftExtensionsHttp ([Values] AndroidRuntime runtime) } [Test] - public void FastDeploymentDoesNotAddContentProvider ([Values (AndroidRuntime.MonoVM, AndroidRuntime.CoreCLR)] AndroidRuntime runtime) + public void FastDeploymentDoesNotAddContentProvider ([Values (AndroidRuntime.CoreCLR)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime)) { return; @@ -1285,7 +1197,7 @@ public void FastDeploymentDoesNotAddContentProvider ([Values (AndroidRuntime.Mon } [Test] - public void BuildOutsideVisualStudio ([Values] AndroidRuntime runtime) + public void BuildOutsideVisualStudio ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1328,7 +1240,7 @@ public void BuildOutsideVisualStudio ([Values] AndroidRuntime runtime) } [Test] - public void RemoveOldMonoPackageManager ([Values (AndroidRuntime.MonoVM, AndroidRuntime.CoreCLR)] AndroidRuntime runtime) + public void RemoveOldMonoPackageManager ([Values (AndroidRuntime.CoreCLR)] AndroidRuntime runtime) { // TODO: fix the test for NativeAOT. It currently fails on the assertion that MonoPackageManager_Resources.java exists bool isRelease = false; //runtime == AndroidRuntime.NativeAOT; @@ -1377,7 +1289,7 @@ public class ApplicationRegistration { }"); } [Test] - public void CompilerErrorShouldNotRunLinkAssemblies ([Values] AndroidRuntime runtime) + public void CompilerErrorShouldNotRunLinkAssemblies ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1402,7 +1314,7 @@ public void CompilerErrorShouldNotRunLinkAssemblies ([Values] AndroidRuntime run /// This assembly weirdly has no [assembly: System.Runtime.Versioning.TargetFrameworkAttribute()], at all... /// [Test] - public void AssemblyWithMissingTargetFramework ([Values (AndroidRuntime.MonoVM, AndroidRuntime.CoreCLR)] AndroidRuntime runtime) + public void AssemblyWithMissingTargetFramework ([Values (AndroidRuntime.CoreCLR)] AndroidRuntime runtime) { // TODO: fix the test for NativeAOT. It currently fails on the assertion that CircleImageView.java exists bool isRelease = false; // runtime == AndroidRuntime.NativeAOT; @@ -1437,7 +1349,7 @@ public void AssemblyWithMissingTargetFramework ([Values (AndroidRuntime.MonoVM, } [Test] - public void WorkManager ([Values] AndroidRuntime runtime) + public void WorkManager ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1470,7 +1382,7 @@ public MyWorker (Context c, WorkerParameters p) : base (c, p) { } } [Test] - public void NuGetizer3000 ([Values] AndroidRuntime runtime) + public void NuGetizer3000 ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1489,7 +1401,7 @@ public void NuGetizer3000 ([Values] AndroidRuntime runtime) } [Test] - public void NetworkSecurityConfig ([Values] AndroidRuntime runtime) + public void NetworkSecurityConfig ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1540,7 +1452,7 @@ public CustomApp(IntPtr handle, JniHandleOwnership ownerShip) : base(handle, own } [Test] - public void AbiNameInIntermediateOutputPath ([Values] AndroidRuntime runtime) + public void AbiNameInIntermediateOutputPath ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1566,7 +1478,7 @@ static IEnumerable Get_EnvironmentVariablesData () { var ret = new List (); - foreach (AndroidRuntime runtime in Enum.GetValues (typeof (AndroidRuntime))) { + foreach (AndroidRuntime runtime in new[] { AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT }) { AddTestData (true, "LowercaseMD5", "", runtime); AddTestData (true, "LowercaseCrc64", "", runtime); AddTestData (false, "", "127.0.0.1:9000,suspend,connect", runtime); @@ -1635,7 +1547,7 @@ public void EnvironmentVariables (bool useInterpreter, string packageNamingPolic } [Test] - public void KotlinServiceLoader ([Values ("apk", "aab")] string packageFormat, [Values] AndroidRuntime runtime) + public void KotlinServiceLoader ([Values ("apk", "aab")] string packageFormat, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1677,7 +1589,7 @@ public void KotlinServiceLoader ([Values ("apk", "aab")] string packageFormat, [ } [Test] - public void XA1018 ([Values] AndroidRuntime runtime) + public void XA1018 ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1701,7 +1613,7 @@ public void XA1018 ([Values] AndroidRuntime runtime) } [Test] - public void XA4313 ([Values ("OpenTK-1.0", "Xamarin.Android.NUnitLite")] string reference, [Values] AndroidRuntime runtime) + public void XA4313 ([Values ("OpenTK-1.0", "Xamarin.Android.NUnitLite")] string reference, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1726,7 +1638,7 @@ public void XA4313 ([Values ("OpenTK-1.0", "Xamarin.Android.NUnitLite")] string } [Test] - public void OpenTKNugetWorks ([Values] AndroidRuntime runtime) + public void OpenTKNugetWorks ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1745,7 +1657,7 @@ public void OpenTKNugetWorks ([Values] AndroidRuntime runtime) } [Test] - public void NUnitLiteNugetWorks ([Values] AndroidRuntime runtime) + public void NUnitLiteNugetWorks ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1767,7 +1679,7 @@ static IEnumerable Get_XA1027XA1028Data () { var ret = new List (); - foreach (AndroidRuntime runtime in Enum.GetValues (typeof (AndroidRuntime))) { + foreach (AndroidRuntime runtime in new[] { AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT }) { AddTestData ( linkTool: "r8", enableProguard: null, @@ -1858,7 +1770,7 @@ public void XA1027XA1028 (string linkTool, string enableProguard, string android } [Test] - public void XA4310 ([Values ("apk", "aab")] string packageFormat, [Values] AndroidRuntime runtime) + public void XA4310 ([Values ("apk", "aab")] string packageFormat, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1901,7 +1813,7 @@ public void XA4310 ([Values ("apk", "aab")] string packageFormat, [Values] Andro [Test] [NonParallelizable] - public void CheckLintErrorsAndWarnings ([Values] AndroidRuntime runtime) + public void CheckLintErrorsAndWarnings ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { string disabledIssues = "StaticFieldLeak,ObsoleteSdkInt,AllowBackup,ExportedReceiver,RedundantLabel,AppLinkWarning"; @@ -1957,7 +1869,7 @@ public class MainActivity : Activity } [Test] - public void CheckLintConfigMerging ([Values] AndroidRuntime runtime) + public void CheckLintConfigMerging ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -2000,7 +1912,7 @@ public void CheckLintConfigMerging ([Values] AndroidRuntime runtime) } [Test] - public void BuildApplicationWithJavaSourceUsingAndroidX ([Values(true, false)] bool isRelease, [Values] AndroidRuntime runtime) + public void BuildApplicationWithJavaSourceUsingAndroidX ([Values(true, false)] bool isRelease, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -2034,7 +1946,7 @@ public static Toolbar GetToolbar (Context context) { } [Test] - public void BuildApplicationCheckThatAddStaticResourcesTargetDoesNotRerun ([Values] AndroidRuntime runtime) + public void BuildApplicationCheckThatAddStaticResourcesTargetDoesNotRerun ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -2059,7 +1971,7 @@ public void BuildApplicationCheckThatAddStaticResourcesTargetDoesNotRerun ([Valu } [Test] - public void CheckJavaError ([Values] AndroidRuntime runtime) + public void CheckJavaError ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -2097,7 +2009,7 @@ public void CheckJavaError ([Values] AndroidRuntime runtime) /// Based on issue raised in /// https://bugzilla.xamarin.com/show_bug.cgi?id=28721 /// - public void DuplicateValuesInResourceCaseMap ([Values] AndroidRuntime runtime) + public void DuplicateValuesInResourceCaseMap ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -2127,7 +2039,7 @@ public void DuplicateValuesInResourceCaseMap ([Values] AndroidRuntime runtime) } [Test] - public void CheckLintResourceFileReferencesAreFixed ([Values] AndroidRuntime runtime) + public void CheckLintResourceFileReferencesAreFixed ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -2168,8 +2080,6 @@ public void CheckLintResourceFileReferencesAreFixed ([Values] AndroidRuntime run } [Test] - [TestCase (true, AndroidRuntime.MonoVM)] - [TestCase (false, AndroidRuntime.MonoVM)] [TestCase (true, AndroidRuntime.CoreCLR)] [TestCase (false, AndroidRuntime.CoreCLR)] // TODO: [TestCase (false, AndroidRuntime.NativeAOT)] @@ -2207,7 +2117,7 @@ public void SimilarAndroidXAssemblyNames (bool publishTrimmed, AndroidRuntime ru } [Test] - public void IncrementalBuildDifferentDevice ([Values] AndroidRuntime runtime) + public void IncrementalBuildDifferentDevice ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -2245,7 +2155,7 @@ public void IncrementalBuildDifferentDevice ([Values] AndroidRuntime runtime) } [Test] - public void SystemIOHashing ([Values] AndroidRuntime runtime) + public void SystemIOHashing ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (runtime == AndroidRuntime.NativeAOT) { Assert.Ignore ("https://github.com/dotnet/android/issues/10606"); 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 05a317d6669..2e6214a7d89 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 @@ -38,66 +38,8 @@ public partial class BuildTest2 : BaseTest }, }; - // TODO: at some point it should work for CoreCLR, after its managed marshal methods are fixed [Test] - [TestCaseSource (nameof (MarshalMethodsDefaultStatusSource))] - public void MarshalMethodsDefaultEnabledStatus (bool isRelease, bool marshalMethodsEnabled) - { - var abis = new [] { "armeabi-v7a", "x86" }; - AndroidTargetArch[] supportedArches = new [] { - AndroidTargetArch.Arm, - AndroidTargetArch.X86, - }; - var proj = new XamarinAndroidApplicationProject { - IsRelease = isRelease, - EnableMarshalMethods = marshalMethodsEnabled, - }; - // MonoVM-only test - proj.SetRuntime (Android.Tasks.AndroidRuntime.MonoVM); - proj.SetRuntimeIdentifiers (abis); - bool shouldMarshalMethodsBeEnabled = isRelease && marshalMethodsEnabled; - - using (var b = CreateApkBuilder ()) { - b.Verbosity = LoggerVerbosity.Diagnostic; - Assert.IsTrue (b.Build (proj), "Build should have succeeded."); - Assert.IsTrue ( - StringAssertEx.ContainsText (b.LastBuildOutput, $"_AndroidUseMarshalMethods = {shouldMarshalMethodsBeEnabled}"), - $"The '_AndroidUseMarshalMethods' MSBuild property should have had the value of '{shouldMarshalMethodsBeEnabled}'" - ); - - string objPath = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath); - List envFiles = EnvironmentHelper.GatherEnvironmentFiles ( - objPath, - String.Join (";", supportedArches.Select (arch => MonoAndroidHelper.ArchToAbi (arch))), - true - ); - var app_config = (EnvironmentHelper.ApplicationConfig_MonoVM)EnvironmentHelper.ReadApplicationConfig (envFiles, Android.Tasks.AndroidRuntime.MonoVM); - - Assert.That (app_config, Is.Not.Null, "application_config must be present in the environment files"); - Assert.AreEqual (app_config.marshal_methods_enabled, shouldMarshalMethodsBeEnabled, $"Marshal methods enabled status should be '{shouldMarshalMethodsBeEnabled}', but it was '{app_config.marshal_methods_enabled}'"); - } - } - - // TODO: fix for CoreCLR - // Currently it fails with: - // - // Microsoft.Android.Sdk.AssemblyResolution.targets(198,5): error MSB4096: The item "obj/Release/UnnamedProject.pdb" in item list "ResolvedSymbols" does not define a value for metadata "DestinationSubPath". In order to use this metadata, either qualify it by specifying %(ResolvedSymbols.DestinationSubPath), or ensure that all items in this list define a value for this metadata. - [Test] - public void CompressedWithoutLinker () - { - var proj = new XamarinAndroidApplicationProject { - IsRelease = true - }; - // Mono-only test, at least for now - proj.SetRuntime (AndroidRuntime.MonoVM); - proj.SetProperty (proj.ReleaseProperties, KnownProperties.AndroidLinkMode, AndroidLinkMode.None.ToString ()); - using (var b = CreateApkBuilder ()) { - Assert.IsTrue (b.Build (proj), "Build should have succeeded."); - } - } - - [Test] - public void BuildBasicApplication ([Values] bool isRelease, [Values ("", "en_US.UTF-8", "sv_SE.UTF-8")] string langEnvironmentVariable, [Values] AndroidRuntime runtime) + public void BuildBasicApplication ([Values] bool isRelease, [Values ("", "en_US.UTF-8", "sv_SE.UTF-8")] string langEnvironmentVariable, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -286,7 +228,7 @@ void AssertTypeMap(string javaName, string managedName) } [Test] - public void BuildBasicApplicationThenMoveIt ([Values] bool isRelease, [Values] AndroidRuntime runtime) + public void BuildBasicApplicationThenMoveIt ([Values] bool isRelease, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -330,7 +272,7 @@ public static string GetLinkedPath (ProjectBuilder builder, bool isRelease, stri } [Test] - public void BuildReleaseArm64 ([Values] bool forms, [Values] AndroidRuntime runtime) + public void BuildReleaseArm64 ([Values] bool forms, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -379,7 +321,7 @@ static IEnumerable Get_BuildHasNoWarningsData () { var ret = new List (); - foreach (AndroidRuntime runtime in Enum.GetValues (typeof (AndroidRuntime))) { + foreach (AndroidRuntime runtime in new[] { AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT }) { AddTestData ( isRelease: false, multidex: false, @@ -493,7 +435,7 @@ static IEnumerable Get_BuildHasTrimmerWarningsData () { var ret = new List (); - foreach (AndroidRuntime runtime in Enum.GetValues (typeof (AndroidRuntime))) { + foreach (AndroidRuntime runtime in new[] { AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT }) { AddTestData (runtime, "", new string [0], false); if (runtime == AndroidRuntime.NativeAOT) { @@ -578,7 +520,7 @@ public void BuildHasTrimmerWarnings (AndroidRuntime runtime, string properties, } [Test] - public void XA0141ErrorIsRaised ([Values] bool isRelease, [Values] AndroidRuntime runtime) + public void XA0141ErrorIsRaised ([Values] bool isRelease, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -637,7 +579,7 @@ static IEnumerable Get_XA1037PropertyDeprecatedWarningData () { var ret = new List (); - foreach (AndroidRuntime runtime in Enum.GetValues (typeof (AndroidRuntime))) { + foreach (AndroidRuntime runtime in new[] { AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT }) { AddTestData ("AndroidFastDeploymentType", "Assemblies", true, false, runtime); AddTestData ("AndroidFastDeploymentType", "Assemblies", false, false, runtime); AddTestData ("_AndroidUseJavaLegacyResolver", "true", false, true, runtime); @@ -681,7 +623,7 @@ public void XA1037PropertyDeprecatedWarning (string property, string value, bool } [Test] - public void ClassLibraryHasNoWarnings ([Values] AndroidRuntime runtime) + public void ClassLibraryHasNoWarnings ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -710,7 +652,7 @@ public void ClassLibraryHasNoWarnings ([Values] AndroidRuntime runtime) } [Test] - public void BuildBasicApplicationWithNuGetPackageConflicts ([Values] AndroidRuntime runtime) + public void BuildBasicApplicationWithNuGetPackageConflicts ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -763,7 +705,7 @@ static IEnumerable Get_BuildBasicApplicationFSharpData () // TODO: AndroidRuntime.NativeAOT doesn't work yet. Fails with // // Microsoft.Android.Sdk.Aot.targets(123,5): error : Runtime critical type System.RuntimeMethodHandle not found - foreach (AndroidRuntime runtime in new[] { AndroidRuntime.MonoVM, AndroidRuntime.CoreCLR }) { + foreach (AndroidRuntime runtime in new[] { AndroidRuntime.CoreCLR }) { AddTestData (isRelease: false, aot: false, runtime); AddTestData (isRelease: true, aot: false, runtime); AddTestData (isRelease: true, aot: true, runtime); @@ -811,7 +753,7 @@ public void BuildBasicApplicationFSharp (bool isRelease, bool aot, AndroidRuntim [Test] [NonParallelizable] - public void BuildBasicApplicationAppCompat ([Values] bool publishAot, [Values] AndroidRuntime runtime) + public void BuildBasicApplicationAppCompat ([Values] bool publishAot, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease, aot: publishAot)) { @@ -833,7 +775,7 @@ public void BuildBasicApplicationAppCompat ([Values] bool publishAot, [Values] A } [Test] - public void DuplicateRJavaOutput ([Values] AndroidRuntime runtime) + public void DuplicateRJavaOutput ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -862,7 +804,7 @@ public void DuplicateRJavaOutput ([Values] AndroidRuntime runtime) [Test] [Category ("XamarinBuildDownload")] [NonParallelizable] // parallel NuGet restore causes failures - public void BuildXamarinFormsMapsApplication ([Values] bool multidex, [Values (AndroidRuntime.MonoVM, AndroidRuntime.CoreCLR)] AndroidRuntime runtime) + public void BuildXamarinFormsMapsApplication ([Values] bool multidex, [Values (AndroidRuntime.CoreCLR)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: false)) { return; @@ -900,7 +842,7 @@ public void BuildXamarinFormsMapsApplication ([Values] bool multidex, [Values (A [Test] [NonParallelizable] - public void SkipConvertResourcesCases ([Values] AndroidRuntime runtime) + public void SkipConvertResourcesCases ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -971,7 +913,7 @@ public void SkipConvertResourcesCases ([Values] AndroidRuntime runtime) } [Test] - public void BuildInParallel ([Values] AndroidRuntime runtime) + public void BuildInParallel ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (!IsWindows) { //TODO: one day we should fix the problems here, various MSBuild tasks step on each other when built in parallel @@ -1009,7 +951,7 @@ public void BuildInParallel ([Values] AndroidRuntime runtime) } [Test] - public void CheckKeystoreIsCreated ([Values] AndroidRuntime runtime) + public void CheckKeystoreIsCreated ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1033,7 +975,7 @@ public void CheckKeystoreIsCreated ([Values] AndroidRuntime runtime) [Test] [Category ("FSharp")] [NonParallelizable] // parallel NuGet restore causes failures - public void FSharpAppHasAndroidDefine ([Values] AndroidRuntime runtime) + public void FSharpAppHasAndroidDefine ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1062,7 +1004,7 @@ module Xamarin.Android.Tests } [Test] - public void DesignTimeBuildHasAndroidDefines ([Values] AndroidRuntime runtime) + public void DesignTimeBuildHasAndroidDefines ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1104,7 +1046,7 @@ public void FooMethod () {{ } [Test] - public void SwitchBetweenDesignTimeBuild ([Values] AndroidRuntime runtime) + public void SwitchBetweenDesignTimeBuild ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1187,7 +1129,7 @@ public CustomTextView(Context context, IAttributeSet attributes) : base(context, } [Test] - public void DesignTimeBuildMissingAndroidPlatformJar ([Values] AndroidRuntime runtime) + public void DesignTimeBuildMissingAndroidPlatformJar ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1210,7 +1152,7 @@ public void DesignTimeBuildMissingAndroidPlatformJar ([Values] AndroidRuntime ru } [Test] - public void AndroidResourceNotExist ([Values] AndroidRuntime runtime) + public void AndroidResourceNotExist ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1238,7 +1180,7 @@ public void AndroidResourceNotExist ([Values] AndroidRuntime runtime) } [Test] - public void TargetFrameworkMonikerAssemblyAttributesPath ([Values] AndroidRuntime runtime) + public void TargetFrameworkMonikerAssemblyAttributesPath ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const string filePattern = ".NETCoreApp,Version=*.AssemblyAttributes.cs"; bool isRelease = runtime == AndroidRuntime.NativeAOT; @@ -1262,7 +1204,7 @@ public void TargetFrameworkMonikerAssemblyAttributesPath ([Values] AndroidRuntim [Test] [NonParallelizable] - public void CheckTimestamps ([Values] bool isRelease, [Values] AndroidRuntime runtime) + public void CheckTimestamps ([Values] bool isRelease, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -1327,7 +1269,7 @@ public void CheckTimestamps ([Values] bool isRelease, [Values] AndroidRuntime ru [Test] [NonParallelizable] // On MacOS, parallel /restore causes issues - public void BuildApplicationAndClean ([Values] bool isRelease, [Values ("apk", "aab")] string packageFormat, [Values] AndroidRuntime runtime) + public void BuildApplicationAndClean ([Values] bool isRelease, [Values ("apk", "aab")] string packageFormat, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -1362,7 +1304,7 @@ public void BuildApplicationAndClean ([Values] bool isRelease, [Values ("apk", " } [Test] - public void BuildApplicationWithLibraryAndClean ([Values] bool isRelease, [Values] AndroidRuntime runtime) + public void BuildApplicationWithLibraryAndClean ([Values] bool isRelease, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -1426,7 +1368,7 @@ public void BuildApplicationWithLibraryAndClean ([Values] bool isRelease, [Value } [Test] - public void BuildIncrementingAssemblyVersion ([Values] AndroidRuntime runtime) + public void BuildIncrementingAssemblyVersion ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1462,7 +1404,7 @@ public void BuildIncrementingAssemblyVersion ([Values] AndroidRuntime runtime) } [Test] - public void BuildIncrementingClassName ([Values] AndroidRuntime runtime) + public void BuildIncrementingClassName ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1517,7 +1459,7 @@ public void BuildIncrementingClassName ([Values] AndroidRuntime runtime) } [Test] - public void CSharp8Features ([Values] bool bindingProject, [Values] AndroidRuntime runtime) + public void CSharp8Features ([Values] bool bindingProject, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1549,7 +1491,7 @@ public void CSharp8Features ([Values] bool bindingProject, [Values] AndroidRunti } [Test] - public void BuildProguardEnabledProject ([Values ("", "android-arm64")] string rid, [Values] AndroidRuntime runtime) + public void BuildProguardEnabledProject ([Values ("", "android-arm64")] string rid, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1625,7 +1567,7 @@ XamarinAndroidApplicationProject CreateMultiDexRequiredApplication (string debug } [Test] - public void CreateMultiDexWithSpacesInConfig ([Values] AndroidRuntime runtime) + public void CreateMultiDexWithSpacesInConfig ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1646,7 +1588,7 @@ public void CreateMultiDexWithSpacesInConfig ([Values] AndroidRuntime runtime) } [Test] - public void BuildMultiDexApplication ([Values] AndroidRuntime runtime) + public void BuildMultiDexApplication ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1666,7 +1608,7 @@ public void BuildMultiDexApplication ([Values] AndroidRuntime runtime) } [Test] - public void BuildAfterMultiDexIsNotRequired ([Values] AndroidRuntime runtime) + public void BuildAfterMultiDexIsNotRequired ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1711,7 +1653,7 @@ public void BuildAfterMultiDexIsNotRequired ([Values] AndroidRuntime runtime) } [Test] - public void CustomApplicationClassAndMultiDex ([Values] bool isRelease, [Values] AndroidRuntime runtime) + public void CustomApplicationClassAndMultiDex ([Values] bool isRelease, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -1752,7 +1694,7 @@ public override void OnCreate() } [Test] - public void MultiDexAndCodeShrinker ([Values] AndroidRuntime runtime) + public void MultiDexAndCodeShrinker ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1774,7 +1716,7 @@ public void MultiDexAndCodeShrinker ([Values] AndroidRuntime runtime) } [Test] - public void MultiDexR8ConfigWithNoCodeShrinking ([Values] AndroidRuntime runtime) + public void MultiDexR8ConfigWithNoCodeShrinking ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1824,7 +1766,7 @@ abstract class ExtendsClassValue extends ClassValue {} [Test] - public void BuildBasicApplicationCheckPdb ([Values] AndroidRuntime runtime) + public void BuildBasicApplicationCheckPdb ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime)) { return; @@ -1846,7 +1788,7 @@ public void BuildBasicApplicationCheckPdb ([Values] AndroidRuntime runtime) } [Test] - public void BuildBasicApplicationCheckPdbRepeatBuild ([Values] AndroidRuntime runtime) + public void BuildBasicApplicationCheckPdbRepeatBuild ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime)) { return; @@ -1876,7 +1818,7 @@ public void BuildBasicApplicationCheckPdbRepeatBuild ([Values] AndroidRuntime ru } [Test] - public void BuildAppCheckDebugSymbols ([Values] AndroidRuntime runtime) + public void BuildAppCheckDebugSymbols ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime)) { return; @@ -2011,7 +1953,7 @@ void EnsureFilesAreTheSame (string intermediatePath, string? binPath, string fil } [Test] - public void BuildBasicApplicationCheckConfigFiles ([Values] AndroidRuntime runtime) + public void BuildBasicApplicationCheckConfigFiles ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -2041,7 +1983,7 @@ public void BuildBasicApplicationCheckConfigFiles ([Values] AndroidRuntime runti [Test] [NonParallelizable] // Environment variables are global! - public void BuildWithJavaToolOptions ([Values] AndroidRuntime runtime) + public void BuildWithJavaToolOptions ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -2070,7 +2012,7 @@ public void BuildWithJavaToolOptions ([Values] AndroidRuntime runtime) } [Test] - public void LibraryWithGenericAttribute ([Values] AndroidRuntime runtime) + public void LibraryWithGenericAttribute ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -2119,7 +2061,7 @@ class Class2 : Library1.Class1 { } } [Test] - public void Plugin_Maui_Audio ([Values] AndroidRuntime runtime) + public void Plugin_Maui_Audio ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -2156,7 +2098,7 @@ public void Plugin_Maui_Audio ([Values] AndroidRuntime runtime) } [Test] - public void MarshalMethodsUnhandledExceptionRuntimeFixUpWorks ([Values] AndroidRuntime runtime) + public void MarshalMethodsUnhandledExceptionRuntimeFixUpWorks ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest3.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest3.cs index 957b506b6ce..af3ec8254b7 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest3.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest3.cs @@ -16,7 +16,7 @@ public partial class BuildTest3 : BaseTest const string JniPreloadSourceLibraryName = "libtest-jni-library.so"; [Test] - public void NativeLibraryJniPreload_NoDuplicates ([Values] AndroidRuntime runtime) + public void NativeLibraryJniPreload_NoDuplicates ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const string MyLibKeep1 = "libMyStuffKeep.so"; const string MyLibKeep2 = "libMyStuffKeep.so"; @@ -35,7 +35,7 @@ public void NativeLibraryJniPreload_NoDuplicates ([Values] AndroidRuntime runtim } [Test] - public void NativeLibraryJniPreload_IncludeCustomLibraries ([Values] AndroidRuntime runtime) + public void NativeLibraryJniPreload_IncludeCustomLibraries ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const string MyLib = "libMyStuff.so"; @@ -53,7 +53,7 @@ public void NativeLibraryJniPreload_IncludeCustomLibraries ([Values] AndroidRunt } [Test] - public void NativeLibraryJniPreload_ExcludeSomeCustomLibraries ([Values] AndroidRuntime runtime) + public void NativeLibraryJniPreload_ExcludeSomeCustomLibraries ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const string MyLibKeep = "libMyStuffKeep.so"; const string MyLibExempt = "libMyStuffExempt.so"; @@ -75,7 +75,7 @@ public void NativeLibraryJniPreload_ExcludeSomeCustomLibraries ([Values] Android } [Test] - public void NativeLibraryJniPreload_ExcludeAllCustomLibraries ([Values] AndroidRuntime runtime) + public void NativeLibraryJniPreload_ExcludeAllCustomLibraries ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const string MyLibExempt1 = "libMyStuffExempt1.so"; const string MyLibExempt2 = "libMyStuffExempt2.so"; @@ -100,7 +100,7 @@ public void NativeLibraryJniPreload_ExcludeAllCustomLibraries ([Values] AndroidR } [Test] - public void NativeLibraryJniPreload_AddSomeCustomLibrariesAndIgnoreAll ([Values] AndroidRuntime runtime) + public void NativeLibraryJniPreload_AddSomeCustomLibrariesAndIgnoreAll ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { List? allPreloads = NativeLibraryJniPreload_CommonInitAndGetPreloads ( runtime, @@ -118,7 +118,7 @@ public void NativeLibraryJniPreload_AddSomeCustomLibrariesAndIgnoreAll ([Values] } [Test] - public void NativeLibraryJniPreload_AddSomeCustomLibrariesAndIgnoreAllByName ([Values] AndroidRuntime runtime) + public void NativeLibraryJniPreload_AddSomeCustomLibrariesAndIgnoreAllByName ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const string MyLibExemptOne = "libMyStuffExemptOne.so"; const string MyLibExemptTwo = "libMyStuffExemptTwo.so"; @@ -169,7 +169,7 @@ void NativeLibraryJniPreload_AddNativeLibraries (XamarinAndroidApplicationProjec } [Test] - public void NativeLibraryJniPreload_IgnoreAll_PreservesRequired ([Values] AndroidRuntime runtime) + public void NativeLibraryJniPreload_IgnoreAll_PreservesRequired ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { List? allPreloads = NativeLibraryJniPreload_CommonInitAndGetPreloads ( runtime, @@ -183,7 +183,7 @@ public void NativeLibraryJniPreload_IgnoreAll_PreservesRequired ([Values] Androi } [Test] - public void NativeLibraryJniPreload_DefaultsWork ([Values] AndroidRuntime runtime) + public void NativeLibraryJniPreload_DefaultsWork ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { List? allPreloads = NativeLibraryJniPreload_CommonInitAndGetPreloads (runtime); NativeLibraryJniPreload_VerifyDefaults (allPreloads); diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildWithLibraryTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildWithLibraryTests.cs index b9d54076804..0ee843db8ae 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildWithLibraryTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildWithLibraryTests.cs @@ -53,7 +53,7 @@ static IEnumerable Get_DotNetBuildLibraryParams () { var source = new List (); foreach (object[] args in DotNetBuildLibrarySource) { - foreach (AndroidRuntime runtime in Enum.GetValues (typeof (AndroidRuntime))) { + foreach (AndroidRuntime runtime in new[] { AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT }) { source.Add (new object[] { args[0], args[1], @@ -314,7 +314,7 @@ public Foo () } [Test] - public void ProjectDependencies ([Values] bool projectReference, [Values] AndroidRuntime runtime) + public void ProjectDependencies ([Values] bool projectReference, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -413,7 +413,7 @@ public void ProjectDependencies ([Values] bool projectReference, [Values] Androi [Test] [NonParallelizable] - public void BuildWithNativeLibraries ([Values] bool isRelease, [Values] AndroidRuntime runtime) + public void BuildWithNativeLibraries ([Values] bool isRelease, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -512,7 +512,7 @@ public void BuildWithNativeLibraries ([Values] bool isRelease, [Values] AndroidR } [Test] - public void BuildWithNativeLibraryUnknownAbi ([Values] AndroidRuntime runtime) + public void BuildWithNativeLibraryUnknownAbi ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -546,7 +546,7 @@ public void BuildWithNativeLibraryUnknownAbi ([Values] AndroidRuntime runtime) } [Test] - public void BuildWithExternalJavaLibrary ([Values] AndroidRuntime runtime) + public void BuildWithExternalJavaLibrary ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -583,7 +583,7 @@ public void BuildWithExternalJavaLibrary ([Values] AndroidRuntime runtime) } [Test] - public void AndroidLibraryProjectsZipWithOddPaths ([Values] AndroidRuntime runtime) + public void AndroidLibraryProjectsZipWithOddPaths ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -616,7 +616,7 @@ public void AndroidLibraryProjectsZipWithOddPaths ([Values] AndroidRuntime runti } [Test] - public void DuplicateJCWNames ([Values] AndroidRuntime runtime) + public void DuplicateJCWNames ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -676,7 +676,7 @@ public void DuplicateJCWNames ([Values] AndroidRuntime runtime) } [Test] - public void DuplicateManagedNames ([Values] AndroidRuntime runtime) + public void DuplicateManagedNames ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -736,7 +736,7 @@ public void DuplicateManagedNames ([Values] AndroidRuntime runtime) } [Test] - public void LibraryProjectsShouldSkipGetPrimaryCpuAbi ([Values] AndroidRuntime runtime) + public void LibraryProjectsShouldSkipGetPrimaryCpuAbi ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -751,7 +751,7 @@ public void LibraryProjectsShouldSkipGetPrimaryCpuAbi ([Values] AndroidRuntime r } [Test] - public void AllResourcesInClassLibrary ([Values] bool useDesignerAssembly, [Values] AndroidRuntime runtime) + public void AllResourcesInClassLibrary ([Values] bool useDesignerAssembly, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -816,7 +816,7 @@ public void AllResourcesInClassLibrary ([Values] bool useDesignerAssembly, [Valu /// /// Reference https://bugzilla.xamarin.com/show_bug.cgi?id=29568 /// - public void BuildLibraryWhichUsesResources ([Values] bool isRelease, [Values] AndroidRuntime runtime) + public void BuildLibraryWhichUsesResources ([Values] bool isRelease, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -838,7 +838,7 @@ public void BuildLibraryWhichUsesResources ([Values] bool isRelease, [Values] An } [Test] - public void AndroidXClassLibraryNoResources ([Values] AndroidRuntime runtime) + public void AndroidXClassLibraryNoResources ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -856,7 +856,7 @@ public void AndroidXClassLibraryNoResources ([Values] AndroidRuntime runtime) } [Test] - public void CheckContentBuildAction ([Values] AndroidRuntime runtime) + public void CheckContentBuildAction ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -926,7 +926,7 @@ public void CheckContentBuildAction ([Values] AndroidRuntime runtime) } [Test] - public void ContentBuildActionForRazor ([Values] AndroidRuntime runtime) + public void ContentBuildActionForRazor ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -983,7 +983,7 @@ private void IncrementCount() // Combination of class libraries that triggered the problem: // error APT2144: invalid file path 'obj/Release/net8.0-android/lp/86.stamp'. [Test] - public void ClassLibraryAarDependencies ([Values] AndroidRuntime runtime) + public void ClassLibraryAarDependencies ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1024,7 +1024,7 @@ public void ClassLibraryAarDependencies ([Values] AndroidRuntime runtime) } [Test] - public void DotNetLibraryAarChanges ([Values] AndroidRuntime runtime) + public void DotNetLibraryAarChanges ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1087,7 +1087,7 @@ public void DotNetLibraryAarChanges ([Values] AndroidRuntime runtime) /// and producing empty .jlo.xml files. /// [Test] - public void MultiTfmTransitiveReference ([Values] AndroidRuntime runtime) + public void MultiTfmTransitiveReference ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: false)) { return; diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/CodeBehindTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/CodeBehindTests.cs index c1af443792c..efb5ce40f6c 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/CodeBehindTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/CodeBehindTests.cs @@ -284,25 +284,25 @@ static CodeBehindTests () } [Test] - public void SuccessfulBuildFew ([Values] AndroidRuntime runtime) + public void SuccessfulBuildFew ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { RunTest (TestName, many: false, dtb: false, runner: SuccessfulBuild_RunTest, runtime: runtime); } [Test] - public void SuccessfulBuildMany ([Values] AndroidRuntime runtime) + public void SuccessfulBuildMany ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { RunTest (TestName, many: true, dtb: false, runner: SuccessfulBuild_RunTest, runtime: runtime); } [Test] - public void SuccessfulBuildFew_DTB ([Values] AndroidRuntime runtime) + public void SuccessfulBuildFew_DTB ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { RunTest (TestName, many: false, dtb: true, runner: SuccessfulBuild_RunTest, runtime: runtime); } [Test] - public void SuccessfulBuildMany_DTB ([Values] AndroidRuntime runtime) + public void SuccessfulBuildMany_DTB ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { RunTest (TestName, many: true, dtb: true, runner: SuccessfulBuild_RunTest, runtime: runtime); } @@ -335,7 +335,7 @@ void SuccessfulBuild_RunTest (TestProjectInfo testInfo, bool many, bool dtb, Loc } [Test] - public void SuccessfulAndroidXApp ([Values] AndroidRuntime runtime) + public void SuccessfulAndroidXApp ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { RunTest (TestName, many: true, dtb: false, runner: SuccessfulBuild_AndroidX, runtime: runtime); } @@ -372,13 +372,13 @@ void SuccessfulBuild_AndroidX (TestProjectInfo testInfo, bool many, bool dtb, Lo } [Test] - public void FailedBuildFew_ConflictingFragment ([Values] AndroidRuntime runtime) + public void FailedBuildFew_ConflictingFragment ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { RunTest (TestName, many: false, dtb: false, runner: FailedBuild_ConflictingFragment_RunTest, runtime: runtime); } [Test] - public void FailedBuildMany_ConflictingFragment ([Values] AndroidRuntime runtime) + public void FailedBuildMany_ConflictingFragment ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { RunTest (TestName, many: true, dtb: false, runner: FailedBuild_ConflictingFragment_RunTest, runtime: runtime); } @@ -400,13 +400,13 @@ void FailedBuild_ConflictingFragment_RunTest (TestProjectInfo testInfo, bool man } [Test] - public void FailedBuildFew_ConflictingTextView ([Values] AndroidRuntime runtime) + public void FailedBuildFew_ConflictingTextView ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { RunTest (TestName, many: false, dtb: false, runner: FailedBuild_ConflictingTextView_RunTest, runtime: runtime); } [Test] - public void FailedBuildMany_ConflictingTextView ([Values] AndroidRuntime runtime) + public void FailedBuildMany_ConflictingTextView ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { RunTest (TestName, many: true, dtb: false, runner: FailedBuild_ConflictingTextView_RunTest, runtime: runtime); } @@ -428,13 +428,13 @@ void FailedBuild_ConflictingTextView_RunTest (TestProjectInfo testInfo, bool man } [Test] - public void FailedBuildFew_ConflictingButton ([Values] AndroidRuntime runtime) + public void FailedBuildFew_ConflictingButton ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { RunTest (TestName, many: false, dtb: false, runner: FailedBuild_ConflictingButton_RunTest, runtime: runtime); } [Test] - public void FailedBuildMany_ConflictingButton ([Values] AndroidRuntime runtime) + public void FailedBuildMany_ConflictingButton ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { RunTest (TestName, many: true, dtb: false, runner: FailedBuild_ConflictingButton_RunTest, runtime: runtime); } @@ -456,13 +456,13 @@ void FailedBuild_ConflictingButton_RunTest (TestProjectInfo testInfo, bool many, } [Test] - public void FailedBuildFew_ConflictingLinearLayout ([Values] AndroidRuntime runtime) + public void FailedBuildFew_ConflictingLinearLayout ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { RunTest (TestName, many: false, dtb: false, runner: FailedBuild_ConflictingLinearLayout_RunTest, runtime: runtime); } [Test] - public void FailedBuildMany_ConflictingLinearLayout ([Values] AndroidRuntime runtime) + public void FailedBuildMany_ConflictingLinearLayout ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { RunTest (TestName, many: true, dtb: false, runner: FailedBuild_ConflictingLinearLayout_RunTest, runtime: runtime); } @@ -484,13 +484,13 @@ void FailedBuild_ConflictingLinearLayout_RunTest (TestProjectInfo testInfo, bool } [Test] - public void FailedBuildFew_ConflictingRelativeLayout ([Values] AndroidRuntime runtime) + public void FailedBuildFew_ConflictingRelativeLayout ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { RunTest (TestName, many: false, dtb: false, runner: FailedBuild_ConflictingRelativeLayout_RunTest, runtime: runtime); } [Test] - public void FailedBuildMany_ConflictingRelativeLayout ([Values] AndroidRuntime runtime) + public void FailedBuildMany_ConflictingRelativeLayout ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { RunTest (TestName, many: true, dtb: false, runner: FailedBuild_ConflictingRelativeLayout_RunTest, runtime: runtime); } diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/DeferredBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/DeferredBuildTest.cs index 07bd0676864..d58cfd2c970 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/DeferredBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/DeferredBuildTest.cs @@ -10,7 +10,7 @@ namespace Xamarin.Android.Build.Tests public class DeferredBuildTest : BaseTest { [Test] - public void SelectivelyRunUpdateAndroidResources ([Values] AndroidRuntime runtime) + public void SelectivelyRunUpdateAndroidResources ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -61,7 +61,7 @@ public void SelectivelyRunUpdateAndroidResources ([Values] AndroidRuntime runtim } [Test] - public void RunUpdateAndroidResourcesIfBackgroundBuildNotSupported ([Values] AndroidRuntime runtime) + public void RunUpdateAndroidResourcesIfBackgroundBuildNotSupported ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/EnvironmentContentTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/EnvironmentContentTests.cs index 7616d8d0412..287ef642297 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/EnvironmentContentTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/EnvironmentContentTests.cs @@ -16,7 +16,7 @@ public class EnvironmentContentTests : BaseTest { [Test] [NonParallelizable] - public void BuildApplicationWithMonoEnvironment ([Values ("", "Normal", "Offline")] string sequencePointsMode, [Values] AndroidRuntime runtime) + public void BuildApplicationWithMonoEnvironment ([Values ("", "Normal", "Offline")] string sequencePointsMode, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -93,72 +93,5 @@ public void BuildApplicationWithMonoEnvironment ([Values ("", "Normal", "Offline } } - [Test] - public void CheckMonoDebugIsAddedToEnvironment ([Values ("", "Normal", "Offline")] string sequencePointsMode) - { - const string supportedAbis = "armeabi-v7a;x86"; - - var proj = new XamarinAndroidApplicationProject () { - IsRelease = true, - }; - - // Mono-only test - proj.SetRuntime (AndroidRuntime.MonoVM); - proj.SetProperty ("_AndroidSequencePointsMode", sequencePointsMode); - proj.SetRuntimeIdentifiers (supportedAbis.Split (';')); - using (var b = CreateApkBuilder ()) { - Assert.IsTrue (b.Build (proj), "Build should have succeeded."); - - string intermediateOutputDir = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath); - List envFiles = EnvironmentHelper.GatherEnvironmentFiles (intermediateOutputDir, supportedAbis, true, AndroidRuntime.MonoVM); - Dictionary envvars = EnvironmentHelper.ReadEnvironmentVariables (envFiles, AndroidRuntime.MonoVM); - Assert.IsTrue (envvars.Count > 0, $"No environment variables defined"); - - string monoDebugVar; - bool monoDebugVarFound = envvars.TryGetValue ("MONO_DEBUG", out monoDebugVar); - if (String.IsNullOrEmpty (sequencePointsMode)) - Assert.IsFalse (monoDebugVarFound, $"environment should not contain MONO_DEBUG={monoDebugVar}"); - else { - Assert.IsTrue (monoDebugVarFound, "environment should contain MONO_DEBUG"); - Assert.AreEqual ("gen-compact-seq-points", monoDebugVar, "environment should contain MONO_DEBUG=gen-compact-seq-points"); - } - - EnvironmentHelper.AssertValidEnvironmentSharedLibrary (intermediateOutputDir, AndroidSdkPath, AndroidNdkPath, supportedAbis, AndroidRuntime.MonoVM); - } - } - - [Test] - public void CheckConcurrentGC () - { - var proj = new XamarinAndroidApplicationProject () { - IsRelease = true, - }; - - var gcVarName = "MONO_GC_PARAMS"; - var expectedDefaultValue = "major=marksweep"; - var expectedUpdatedValue = "major=marksweep-conc"; - var supportedAbis = "armeabi-v7a;arm64-v8a"; - // MonoVM-only test - proj.SetRuntime (Android.Tasks.AndroidRuntime.MonoVM); - proj.SetRuntimeIdentifiers (supportedAbis.Split (';')); - - using (var b = CreateApkBuilder ()) { - proj.SetProperty ("AndroidEnableSGenConcurrent", "False"); - Assert.IsTrue (b.Build (proj), "Build should have succeeded."); - var intermediateOutputDir = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath); - // AndroidEnableSGenConcurrent=False by default - List envFiles = EnvironmentHelper.GatherEnvironmentFiles (intermediateOutputDir, supportedAbis, true, AndroidRuntime.MonoVM); - Dictionary envvars = EnvironmentHelper.ReadEnvironmentVariables (envFiles, AndroidRuntime.MonoVM); - Assert.IsTrue (envvars.ContainsKey (gcVarName), $"Environment should contain '{gcVarName}'."); - Assert.AreEqual (expectedDefaultValue, envvars[gcVarName], $"'{gcVarName}' should have been '{expectedDefaultValue}' when concurrent GC is disabled."); - - proj.SetProperty ("AndroidEnableSGenConcurrent", "True"); - Assert.IsTrue (b.Build (proj), "Second build should have succeeded."); - envFiles = EnvironmentHelper.GatherEnvironmentFiles (intermediateOutputDir, supportedAbis, true, AndroidRuntime.MonoVM); - envvars = EnvironmentHelper.ReadEnvironmentVariables (envFiles, AndroidRuntime.MonoVM); - Assert.IsTrue (envvars.ContainsKey (gcVarName), $"Environment should contain '{gcVarName}'."); - Assert.AreEqual (expectedUpdatedValue, envvars[gcVarName], $"'{gcVarName}' should have been '{expectedUpdatedValue}' when concurrent GC is enabled."); - } - } } } 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 7a354687753..53dc439cea7 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 @@ -16,7 +16,7 @@ namespace Xamarin.Android.Build.Tests public class IncrementalBuildTest : BaseTest { [Test] - public void BasicApplicationRepetitiveBuild ([Values] AndroidRuntime runtime) + public void BasicApplicationRepetitiveBuild ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -62,7 +62,7 @@ public void BasicApplicationRepetitiveBuild ([Values] AndroidRuntime runtime) // The target _RunILLink should have been skipped. // [Test] - public void BasicApplicationRepetitiveReleaseBuild ([Values] AndroidRuntime runtime) + public void BasicApplicationRepetitiveReleaseBuild ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -177,7 +177,7 @@ void AssertJniRemappingSourceTimestamps (Dictionary expectedTi } [Test] - public void CheckNothingIsDeletedByIncrementalClean ([Values] bool enableMultiDex, [Values] AndroidRuntime runtime) + public void CheckNothingIsDeletedByIncrementalClean ([Values] bool enableMultiDex, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -242,7 +242,7 @@ public void CheckNothingIsDeletedByIncrementalClean ([Values] bool enableMultiDe } [Test] - public void CheckResourceDirectoryDoesNotGetHosed ([Values] AndroidRuntime runtime) + public void CheckResourceDirectoryDoesNotGetHosed ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -272,7 +272,7 @@ public void CheckResourceDirectoryDoesNotGetHosed ([Values] AndroidRuntime runti } [Test] - public void IncrementalCleanDuringClean ([Values] AndroidRuntime runtime) + public void IncrementalCleanDuringClean ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -319,7 +319,7 @@ public void IncrementalCleanDuringClean ([Values] AndroidRuntime runtime) } [Test] - public void LibraryIncrementalBuild ([Values] AndroidRuntime runtime) + public void LibraryIncrementalBuild ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -347,7 +347,7 @@ public void LibraryIncrementalBuild ([Values] AndroidRuntime runtime) } [Test] - public void AllProjectsHaveSameOutputDirectory ([Values] AndroidRuntime runtime) + public void AllProjectsHaveSameOutputDirectory ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -381,7 +381,7 @@ public void AllProjectsHaveSameOutputDirectory ([Values] AndroidRuntime runtime) } [Test] - public void BuildSolutionWithMultipleProjectsInParallel ([Values] AndroidRuntime runtime) + public void BuildSolutionWithMultipleProjectsInParallel ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -420,7 +420,7 @@ public void BuildSolutionWithMultipleProjectsInParallel ([Values] AndroidRuntime } [Test] - public void JavacTaskDoesNotRunOnSecondBuild ([Values] AndroidRuntime runtime) + public void JavacTaskDoesNotRunOnSecondBuild ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -467,7 +467,7 @@ public TestMe createTestMe () { } [Test] - public void ResolveNativeLibrariesInManagedReferences ([Values] AndroidRuntime runtime) + public void ResolveNativeLibrariesInManagedReferences ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -599,7 +599,7 @@ public Class2 () //https://github.com/xamarin/xamarin-android/issues/2247 [Test] [NonParallelizable] // Do not run timing sensitive tests in parallel - public void AppProjectTargetsDoNotBreak ([Values] AndroidRuntime runtime) + public void AppProjectTargetsDoNotBreak ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -678,7 +678,7 @@ public void AppProjectTargetsDoNotBreak ([Values] AndroidRuntime runtime) } [Test] - public void LibraryProjectTargetsDoNotBreak ([Values] AndroidRuntime runtime) + public void LibraryProjectTargetsDoNotBreak ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -763,7 +763,7 @@ public void CreateAarRunsOnceWithGeneratePackageOnBuild () } [Test] - public void ManifestMergerIncremental ([Values] AndroidRuntime runtime) + public void ManifestMergerIncremental ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -790,7 +790,7 @@ public void ManifestMergerIncremental ([Values] AndroidRuntime runtime) } [Test] - public void ProduceReferenceAssembly ([Values] AndroidRuntime runtime) + public void ProduceReferenceAssembly ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -858,7 +858,7 @@ public void ProduceReferenceAssembly ([Values] AndroidRuntime runtime) } [Test] - public void TransitiveDependencyProduceReferenceAssembly ([Values] AndroidRuntime runtime) + public void TransitiveDependencyProduceReferenceAssembly ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -940,7 +940,7 @@ public void TransitiveDependencyProduceReferenceAssembly ([Values] AndroidRuntim } [Test] - public void LinkAssembliesNoShrink ([Values] AndroidRuntime runtime) + public void LinkAssembliesNoShrink ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -975,7 +975,7 @@ public void LinkAssembliesNoShrink ([Values] AndroidRuntime runtime) } [Test] - public void CSProjUserFileChanges ([Values] AndroidRuntime runtime) + public void CSProjUserFileChanges ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1006,7 +1006,7 @@ public void CSProjUserFileChanges ([Values] AndroidRuntime runtime) [Test] [NonParallelizable] // /restore can fail on Mac in parallel - public void ConvertCustomView ([Values] AndroidRuntime runtime) + public void ConvertCustomView ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1118,7 +1118,7 @@ public CustomTextView(Context context, IAttributeSet attributes) : base(context, } [Test] - public void ResolveLibraryProjectImports ([Values] AndroidRuntime runtime) + public void ResolveLibraryProjectImports ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1222,7 +1222,7 @@ ReadLibraryProjectImportsCache ReadCache (string cacheFile) [Test] [NonParallelizable] - public void AddNewAndroidResourceOnSecondBuild ([Values] AndroidRuntime runtime) + public void AddNewAndroidResourceOnSecondBuild ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1253,7 +1253,7 @@ public void AddNewAndroidResourceOnSecondBuild ([Values] AndroidRuntime runtime) [Test] [NonParallelizable] - public void InvalidAndroidResource ([Values] AndroidRuntime runtime) + public void InvalidAndroidResource ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1295,7 +1295,7 @@ public void InvalidAndroidResource ([Values] AndroidRuntime runtime) } [Test] - public void CasingOnJavaLangObject ([Values] AndroidRuntime runtime) + public void CasingOnJavaLangObject ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1323,7 +1323,7 @@ public void CasingOnJavaLangObject ([Values] AndroidRuntime runtime) } [Test] - public void GenerateJavaStubsAndAssembly ([Values] bool isRelease, [Values] AndroidRuntime runtime) + public void GenerateJavaStubsAndAssembly ([Values] bool isRelease, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -1411,129 +1411,10 @@ void AssertAssemblyFilesInFileWrites (XamarinAndroidApplicationProject proj, Pro } #pragma warning disable 414 - static object [] AotChecks () => new object [] { - new object[] { - /* supportedAbis */ "arm64-v8a", - /* androidAotMode */ "", // None, Normal, Hybrib, Full - /* aotAssemblies */ false, - /* expectedResult */ true, - }, - new object[] { - /* supportedAbis */ "arm64-v8a", - /* androidAotMode */ "Normal", // None, Normal, Hybrid, Full - /* aotAssemblies */ true, - /* expectedResult */ true, - }, - new object[] { - /* supportedAbis */ "arm64-v8a", - /* androidAotMode */ "Normal", // None, Normal, Hybrid, Full - /* aotAssemblies */ false, - /* expectedResult */ true, - }, - }; #pragma warning restore 414 [Test] - [Category ("AOT")] - [TestCaseSource (nameof (AotChecks))] - public void BuildIncrementalAot (string supportedAbis, string androidAotMode, bool aotAssemblies, bool expectedResult) - { - // Setup dependencies App A -> Lib B - var path = Path.Combine ("temp", TestName); - - var libB = new XamarinAndroidLibraryProject { - ProjectName = "LibraryB", - IsRelease = true, - EnableDefaultItems = true, - }; - libB.Sources.Clear (); - libB.Sources.Add (new BuildItem.Source ("Foo.cs") { - TextContent = () => "public class Foo { }", - }); - - var libBBuilder = CreateDllBuilder (Path.Combine (path, libB.ProjectName)); - Assert.IsTrue (libBBuilder.Build(libB), $"{libB.ProjectName} should build"); - - var targets = new List { - "_RemoveRegisterAttribute", - "_BuildApkEmbed", - }; - var proj = new XamarinAndroidApplicationProject { - ProjectName = "AppA", - IsRelease = true, - AotAssemblies = aotAssemblies, - EnableDefaultItems = true, - Sources = { - new BuildItem.Source ("Bar.cs") { - TextContent = () => "public class Bar : Foo { }", - } - } - }; - // Mono-only test - proj.SetRuntime (AndroidRuntime.MonoVM); - proj.AddReference (libB); - if (aotAssemblies) { - targets.Add ("_AndroidAot"); - } - proj.SetRuntimeIdentifiers (supportedAbis.Split (';')); - if (!string.IsNullOrEmpty (androidAotMode)) - proj.SetProperty ("AndroidAotMode", androidAotMode); - using (var b = CreateApkBuilder (path)) { - if (!b.GetSupportedRuntimes ().Any (x => supportedAbis == x.Abi)) - Assert.Ignore ($"Runtime for {supportedAbis} was not available."); - - var apk = Path.Combine (Root, b.ProjectDirectory, proj.OutputPath, $"{proj.PackageName}-Signed.apk"); - - b.BuildLogFile = "first.log"; - b.CleanupAfterSuccessfulBuild = false; - b.CleanupOnDispose = false; - b.ThrowOnBuildFailure = false; - Assert.AreEqual (expectedResult, b.Build (proj, doNotCleanupOnUpdate: true), "Build should have {0}.", expectedResult ? "succeeded" : "failed"); - if (!expectedResult) - return; - foreach (var target in targets) { - Assert.IsFalse (b.Output.IsTargetSkipped (target), $"`{target}` should *not* be skipped on first build!"); - } - AssertNativeLibrariesExist (); - - b.BuildLogFile = "second.log"; - b.CleanupAfterSuccessfulBuild = false; - b.CleanupOnDispose = false; - Assert.IsTrue (b.Build (proj, doNotCleanupOnUpdate: true), "Second build should have succeeded."); - foreach (var target in targets) { - Assert.IsTrue (b.Output.IsTargetSkipped (target), $"`{target}` should be skipped on second build!"); - } - AssertNativeLibrariesExist (); - - proj.Touch ("MainActivity.cs"); - - b.BuildLogFile = "third.log"; - b.CleanupAfterSuccessfulBuild = false; - b.CleanupOnDispose = false; - Assert.IsTrue (b.Build (proj, doNotCleanupOnUpdate: true), "Third build should have succeeded."); - foreach (var target in targets) { - Assert.IsFalse (b.Output.IsTargetSkipped (target), $"`{target}` should *not* be skipped on third build!"); - } - AssertNativeLibrariesExist (); - - void AssertNativeLibrariesExist () - { - FileAssert.Exists (apk); - if (!aotAssemblies) - return; - - using var zipFile = ZipHelper.OpenZip (apk); - foreach (var abi in supportedAbis.Split (';')) { - var path = $"lib/{abi}/libaot-Mono.Android.dll.so"; - var entry = ZipHelper.ReadFileFromZip (zipFile, path); - Assert.IsNotNull (entry, $"{path} should be in {apk}", abi); - } - } - } - } - - [Test] - public void DeterministicBuilds ([Values] bool deterministic, [Values] AndroidRuntime runtime) + public void DeterministicBuilds ([Values] bool deterministic, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1573,7 +1454,7 @@ public void DeterministicBuilds ([Values] bool deterministic, [Values] AndroidRu } [Test] - public void DesignTimeBuild ([Values] AndroidRuntime runtime) + public void DesignTimeBuild ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1609,7 +1490,7 @@ public void DesignTimeBuild ([Values] AndroidRuntime runtime) } [Test] - public void DesignTimeBuildSignAndroidPackage ([Values] AndroidRuntime runtime) + public void DesignTimeBuildSignAndroidPackage ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1646,7 +1527,7 @@ public void DesignTimeBuildSignAndroidPackage ([Values] AndroidRuntime runtime) } [Test] - public void ChangePackageNamingPolicy ([Values] AndroidRuntime runtime) + public void ChangePackageNamingPolicy ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1676,7 +1557,7 @@ public void ChangePackageNamingPolicy ([Values] AndroidRuntime runtime) } [Test] - public void MissingProjectReference ([Values] AndroidRuntime runtime) + public void MissingProjectReference ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1733,7 +1614,7 @@ public void MissingProjectReference ([Values] AndroidRuntime runtime) } [Test] - public void AaptError ([Values] AndroidRuntime runtime) + public void AaptError ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1757,7 +1638,7 @@ public void AaptError ([Values] AndroidRuntime runtime) } [Test] - public void AndroidResourceChange ([Values] AndroidRuntime runtime) + public void AndroidResourceChange ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1788,7 +1669,7 @@ public void AndroidResourceChange ([Values] AndroidRuntime runtime) } [Test] - public void AndroidAssetChange ([Values] AndroidRuntime runtime) + public void AndroidAssetChange ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1833,7 +1714,7 @@ void AssertAssetContents (string apk) } [Test] - public void AndroidAssetMissing ([Values] AndroidRuntime runtime) + public void AndroidAssetMissing ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1871,7 +1752,7 @@ public void AndroidAssetMissing ([Values] AndroidRuntime runtime) } [Test] - public void ChangeSupportedAbis ([Values] AndroidRuntime runtime) + public void ChangeSupportedAbis ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1904,7 +1785,7 @@ public void ChangeSupportedAbis ([Values] AndroidRuntime runtime) } [Test] - public void BuildPropsBreaksConvertResourcesCasesOnSecondBuild ([Values] AndroidRuntime runtime) + public void BuildPropsBreaksConvertResourcesCasesOnSecondBuild ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1949,7 +1830,7 @@ public void BuildPropsBreaksConvertResourcesCasesOnSecondBuild ([Values] Android } [Test] - public void AfterILLinkAdditionalStepsIsSkippedOnSecondBuild ([Values] AndroidRuntime runtime) + public void AfterILLinkAdditionalStepsIsSkippedOnSecondBuild ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/InvalidConfigTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/InvalidConfigTests.cs index 4d1f77bb090..c00b0c1846f 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/InvalidConfigTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/InvalidConfigTests.cs @@ -42,24 +42,6 @@ public class InvalidConfigTests : BaseTest }, }; - [Test] - [TestCaseSource (nameof (SettingCombinationsSource))] - public void SettingCombinations (bool isRelease, bool useInterpreter, bool publishTrimmed, bool aot, bool expected) - { - var proj = new XamarinAndroidApplicationProject { - IsRelease = isRelease, - EnableDefaultItems = true, - }; - // MonoVM-only test - proj.SetRuntime (Android.Tasks.AndroidRuntime.MonoVM); - proj.SetProperty ("UseInterpreter", useInterpreter.ToString ()); - proj.SetProperty ("PublishTrimmed", publishTrimmed.ToString ()); - proj.SetProperty ("RunAOTCompilation", aot.ToString ()); - var builder = CreateApkBuilder (); - builder.ThrowOnBuildFailure = false; - Assert.AreEqual (expected, builder.Build (proj), $"{proj.ProjectName} should {(expected ? "succeed" : "fail")}"); - } - [Test] public void EolFrameworks ([Values ("net6.0-android", "net7.0-android")] string targetFramework) { @@ -97,21 +79,5 @@ public void XA0119AAB () } } - [Test] - public void XA0119Interpreter () - { - var proj = new XamarinAndroidApplicationProject { - IsRelease = true, - AotAssemblies = true, - }; - // Mono-only test - proj.SetRuntime (AndroidRuntime.MonoVM); - proj.SetProperty ("UseInterpreter", "true"); - using (var builder = CreateApkBuilder ()) { - builder.ThrowOnBuildFailure = false; - Assert.IsTrue (builder.Build (proj), "Build should have succeeded."); - Assert.IsTrue (StringAssertEx.ContainsText (builder.LastBuildOutput, "XA0119"), "Output should contain XA0119 warnings"); - } - } } } diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/ManifestTest.TestCaseSource.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/ManifestTest.TestCaseSource.cs index d2ee2d84f88..db90ab95de1 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/ManifestTest.TestCaseSource.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/ManifestTest.TestCaseSource.cs @@ -18,7 +18,7 @@ static IEnumerable Get_DebuggerAttributeCases_Data () { var ret = new List (); - foreach (AndroidRuntime runtime in Enum.GetValues (typeof (AndroidRuntime))) { + foreach (AndroidRuntime runtime in new[] { AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT }) { AddTestData ( "", true, false, runtime); AddTestData ( "", false, true, runtime); AddTestData ( "None", true, false, runtime); 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 c11651105d0..45698ad1c29 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 @@ -72,7 +72,7 @@ protected override void OnCreate (Bundle bundle) "; [Test] - public void Bug12935 ([Values] AndroidRuntime runtime) + public void Bug12935 ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -131,7 +131,7 @@ public void Bug12935 ([Values] AndroidRuntime runtime) } [Test] - public void CheckElementReOrdering ([Values] AndroidRuntime runtime) + public void CheckElementReOrdering ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -182,7 +182,7 @@ static void AssertAttribute (XElement parent, XName name, string expected) } [Test] - public void OverlayManifestTest ([Values] AndroidRuntime runtime) + public void OverlayManifestTest ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -214,7 +214,7 @@ public void OverlayManifestTest ([Values] AndroidRuntime runtime) } [Test] - public void OverlayManifestIncrementalBuildTest ([Values] AndroidRuntime runtime) + public void OverlayManifestIncrementalBuildTest ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -264,7 +264,7 @@ public void OverlayManifestIncrementalBuildTest ([Values] AndroidRuntime runtime } [Test] - public void RemovePermissionTest ([Values] AndroidRuntime runtime) + public void RemovePermissionTest ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -294,7 +294,7 @@ public void RemovePermissionTest ([Values] AndroidRuntime runtime) } [Test] - public void IntentFilterData ([Values] AndroidRuntime runtime) + public void IntentFilterData ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -324,7 +324,7 @@ public void IntentFilterData ([Values] AndroidRuntime runtime) } [Test] - public void IntentFilterDataLists ([Values] AndroidRuntime runtime) + public void IntentFilterDataLists ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -358,7 +358,7 @@ public void IntentFilterDataLists ([Values] AndroidRuntime runtime) } [Test] - public void IntentFilterMultipleItems ([Values] AndroidRuntime runtime) + public void IntentFilterMultipleItems ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -381,7 +381,7 @@ public void IntentFilterMultipleItems ([Values] AndroidRuntime runtime) } [Test] - public void LayoutAttributeElement ([Values] AndroidRuntime runtime) + public void LayoutAttributeElement ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -408,7 +408,7 @@ public void LayoutAttributeElement ([Values] AndroidRuntime runtime) } [Test] - public void DirectBootAwareAttribute ([Values] AndroidRuntime runtime) + public void DirectBootAwareAttribute ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -570,66 +570,11 @@ public void DirectBootAwareAttribute ([Values] AndroidRuntime runtime) }, }; - // TODO: make it work on CoreCLR and NativeAOT - [Test] - [TestCaseSource(nameof (VersionCodeTestSource))] - public void VersionCodeTests (bool seperateApk, string abis, string versionCode, bool useLegacy, string versionCodePattern, string versionCodeProperties, bool shouldBuild, string expectedVersionCode) - { - var proj = new XamarinAndroidApplicationProject () { - IsRelease = true, - MinSdkVersion = "24", - SupportedOSPlatformVersion = "24.0", - }; - - // MonoVM-only test, for now (changing anything in the test data changes the codes, each case must be - // investigated and verified manually) - proj.SetRuntime (AndroidRuntime.MonoVM); - proj.SetProperty ("Foo", "1"); - proj.SetProperty ("GenerateApplicationManifest", "false"); // Disable $(AndroidVersionCode) support - proj.SetProperty (proj.ReleaseProperties, KnownProperties.AndroidCreatePackagePerAbi, seperateApk); - if (!string.IsNullOrEmpty (abis)) - proj.SetRuntimeIdentifiers (abis.Split (';')); - if (!string.IsNullOrEmpty (versionCodePattern)) - proj.SetProperty (proj.ReleaseProperties, "AndroidVersionCodePattern", versionCodePattern); - else - proj.RemoveProperty (proj.ReleaseProperties, "AndroidVersionCodePattern"); - if (!string.IsNullOrEmpty (versionCodeProperties)) - proj.SetProperty (proj.ReleaseProperties, "AndroidVersionCodeProperties", versionCodeProperties); - else - proj.RemoveProperty (proj.ReleaseProperties, "AndroidVersionCodeProperties"); - if (useLegacy) - proj.SetProperty (proj.ReleaseProperties, "AndroidUseLegacyVersionCode", true); - proj.AndroidManifest = proj.AndroidManifest.Replace ("android:versionCode=\"1\"", $"android:versionCode=\"{versionCode}\""); - using (var builder = CreateApkBuilder ()) { - builder.ThrowOnBuildFailure = false; - Assert.AreEqual (shouldBuild, builder.Build (proj), shouldBuild ? "Build should have succeeded." : "Build should have failed."); - if (!shouldBuild) - return; - var abiItems = seperateApk ? abis.Split (';') : new string[1]; - var expectedItems = expectedVersionCode.Split (';'); - XNamespace aNS = "http://schemas.android.com/apk/res/android"; - Assert.AreEqual (abiItems.Length, expectedItems.Length, "abis parameter should have matching elements for expected"); - for (int i = 0; i < abiItems.Length; i++) { - var path = seperateApk ? Path.Combine ("android", abiItems[i], "AndroidManifest.xml") : Path.Combine ("android", "manifest", "AndroidManifest.xml"); - var manifest = builder.Output.GetIntermediaryAsText (Root, path); - var doc = XDocument.Parse (manifest); - var nsResolver = new XmlNamespaceManager (new NameTable ()); - nsResolver.AddNamespace ("android", "http://schemas.android.com/apk/res/android"); - var m = doc.XPathSelectElement ("/manifest") as XElement; - Assert.IsNotNull (m, "no manifest element found"); - var vc = m.Attribute (aNS + "versionCode"); - Assert.IsNotNull (vc, "no versionCode attribute found"); - StringAssert.AreEqualIgnoringCase (expectedItems[i], vc.Value, - $"Version Code is incorrect. Found {vc.Value} expect {expectedItems[i]}"); - } - } - } - static IEnumerable Get_ApplicationVersionTests_Data () { var ret = new List (); - foreach (AndroidRuntime runtime in Enum.GetValues (typeof (AndroidRuntime))) { + foreach (AndroidRuntime runtime in new[] { AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT }) { AddTestData ("1", false, "manifest=1", runtime); AddTestData ("1", true, "x86_64=500001;arm64-v8a=400001", runtime); AddTestData ("2", false, "manifest=2", runtime); @@ -691,7 +636,7 @@ public void ApplicationVersionTests (string applicationVersion, bool seperateApk } [Test] - public void ManifestDataPathError ([Values] AndroidRuntime runtime) + public void ManifestDataPathError ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -722,7 +667,7 @@ public void ManifestDataPathError ([Values] AndroidRuntime runtime) } [Test] - public void ManifestPlaceholders ([Values ("legacy", "manifestmerger.jar")] string manifestMerger, [Values] AndroidRuntime runtime) + public void ManifestPlaceholders ([Values ("legacy", "manifestmerger.jar")] string manifestMerger, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -751,7 +696,7 @@ public void ManifestPlaceholders ([Values ("legacy", "manifestmerger.jar")] stri } [Test] - public void ManifestPlaceHolders2 ([Values] AndroidRuntime runtime) + public void ManifestPlaceHolders2 ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -773,7 +718,7 @@ public void ManifestPlaceHolders2 ([Values] AndroidRuntime runtime) } [Test] - public void ManifestPlaceHoldersXA1010 ([Values ("legacy", "manifestmerger.jar")] string manifestMerger, [Values] AndroidRuntime runtime) + public void ManifestPlaceHoldersXA1010 ([Values ("legacy", "manifestmerger.jar")] string manifestMerger, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -824,7 +769,7 @@ public void DebuggerAttribute (string debugType, bool isRelease, bool expected, } [Test] - public void ModifyManifest ([Values] bool isRelease, [Values] AndroidRuntime runtime) + public void ModifyManifest ([Values] bool isRelease, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -876,7 +821,7 @@ public void ModifyManifest ([Values] bool isRelease, [Values] AndroidRuntime run } [Test] - public void MergeLibraryManifest ([Values] AndroidRuntime runtime) + public void MergeLibraryManifest ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1001,7 +946,7 @@ public class TestActivity2 : FragmentActivity { } [Test] - public void AllActivityAttributeProperties ([Values ("legacy", "manifestmerger.jar")] string manifestMerger, [Values] AndroidRuntime runtime) + public void AllActivityAttributeProperties ([Values ("legacy", "manifestmerger.jar")] string manifestMerger, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1094,7 +1039,7 @@ static IEnumerable Get_AllForegroundServiceTypes_Data () { var ret = new List (); - foreach (AndroidRuntime runtime in Enum.GetValues (typeof (AndroidRuntime))) { + foreach (AndroidRuntime runtime in new[] { AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT }) { AddTestData ("Android.Content.PM.ForegroundService.TypeSpecialUse", "specialUse", runtime); AddTestData ("Android.Content.PM.ForegroundService.TypeConnectedDevice", "connectedDevice", runtime); AddTestData ("Android.Content.PM.ForegroundService.TypeCamera|Android.Content.PM.ForegroundService.TypeMicrophone", "camera|microphone", runtime); @@ -1144,7 +1089,7 @@ public void AllForegroundServiceTypes (string serviceType, string expected, Andr } [Test] - public void AllServiceAttributeProperties ([Values ("legacy", "manifestmerger.jar")] string manifestMerger, [Values] AndroidRuntime runtime) + public void AllServiceAttributeProperties ([Values ("legacy", "manifestmerger.jar")] string manifestMerger, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1198,7 +1143,7 @@ public void AllServiceAttributeProperties ([Values ("legacy", "manifestmerger.ja /// https://github.com/microsoft/dotnet-podcasts/blob/09b733b406ecb128f026645ef4c7e69c773f8a4b/src/Mobile/Platforms/Android/Services/MediaPlayerService.cs#L15-L16 /// [Test] - public void ExportedErrorMessage ([Values] AndroidRuntime runtime) + public void ExportedErrorMessage ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1255,7 +1200,7 @@ static IEnumerable Get_SupportedOSTestSources_Data () { var ret = new List (); - foreach (AndroidRuntime runtime in Enum.GetValues (typeof (AndroidRuntime))) { + foreach (AndroidRuntime runtime in new[] { AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT }) { AddTestData ( minSdkVersion: "", removeUsesSdkElement: true, @@ -1384,7 +1329,7 @@ static IEnumerable Get_SupportedOSErrorsTestSources_Data () { var ret = new List (); - foreach (AndroidRuntime runtime in Enum.GetValues (typeof (AndroidRuntime))) { + foreach (AndroidRuntime runtime in new[] { AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT }) { AddTestData ( minSdkVersion: "", supportedOSPlatVers: "", @@ -1639,7 +1584,7 @@ public class TestService : global::Android.App.Service } [Test] - public void UsesPermissionFlagsAttribute ([Values] AndroidRuntime runtime) + public void UsesPermissionFlagsAttribute ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/MarshalMethodTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/MarshalMethodTests.cs index 0cde483e044..57e0e3fbdf6 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/MarshalMethodTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/MarshalMethodTests.cs @@ -12,154 +12,6 @@ namespace Xamarin.Android.Build.Tests; public class MarshalMethodTests : BaseTest { - [Test] - public void MarshalMethodsCollectionScanning () - { - // This test does 2 things: - // - Builds a binding project in Debug mode to create an assembly that contains convertible - // marshal methods to ensure they are found by MarshalMethodsCollection - // - Builds the same project in Release mode which rewrites the assembly to ensure those - // same marshal methods can be found after they are rewritten - var proj = new XamarinAndroidApplicationProject { - ProjectName = "mmtest", - }; - - // Mono-only test. - // Managed typemaps have known issues in CoreCLR and will be replaced by a different - // implementation at some point. - proj.SetRuntime (AndroidRuntime.MonoVM); - - proj.Sources.Add (new AndroidItem.AndroidLibrary ("javaclasses.jar") { - BinaryContent = () => ResourceData.JavaSourceJarTestJar, - }); - - proj.AndroidJavaSources.Add (new AndroidItem.AndroidJavaSource ("JavaSourceTestInterface.java") { - Encoding = Encoding.ASCII, - TextContent = () => ResourceData.JavaSourceTestInterface, - Metadata = { { "Bind", "True" } }, - }); - - proj.AndroidJavaSources.Add (new AndroidItem.AndroidJavaSource ("JavaSourceTestExtension.java") { - Encoding = Encoding.ASCII, - TextContent = () => ResourceData.JavaSourceTestExtension, - Metadata = { { "Bind", "True" } }, - }); - - proj.MainActivity = proj.DefaultMainActivity.Replace ("//${AFTER_MAINACTIVITY}", """ - // Implements Java interface method - class MyGreeter : Java.Lang.Object, Com.Xamarin.Android.Test.Msbuildtest.IJavaSourceTestInterface { - public virtual string? GreetWithQuestion (string? p0, Java.Util.Date? p1, string? p2) => "greetings!"; - } - - // Overrides implemented Java interface method - class MyExtendedGreeter : MyGreeter { - public override string? GreetWithQuestion (string? p0, Java.Util.Date? p1, string? p2) => "more greetings!"; - } - - // Implements Java interface method (duplicate) - class MyGreeter2 : Java.Lang.Object, Com.Xamarin.Android.Test.Msbuildtest.IJavaSourceTestInterface { - public virtual string? GreetWithQuestion (string? p0, Java.Util.Date? p1, string? p2) => "duplicate greetings!"; - } - - // Overrides Java class method - class MyOverriddenGreeter : Com.Xamarin.Android.Test.Msbuildtest.JavaSourceTestExtension { - public override string? GreetWithQuestion (string? p0, Java.Util.Date? p1, string? p2) => "even more greetings!"; - } - """); - - var builder = CreateApkBuilder (); - Assert.IsTrue (builder.Build (proj), "`dotnet build` should succeed"); - builder.AssertHasNoWarnings (); - - var intermediateDebugOutputPath = Path.Combine (Root, builder.ProjectDirectory, proj.IntermediateOutputPath, "android", "assets", "arm64-v8a"); - var outputDebugDll = Path.Combine (intermediateDebugOutputPath, $"{proj.ProjectName}.dll"); - - var log = new TaskLoggingHelper (new MockBuildEngine (TestContext.Out, [], [], []), nameof (MarshalMethodsCollectionScanning)); - var xaResolver = new XAAssemblyResolver (Tools.AndroidTargetArch.Arm64, log, false); - xaResolver.SearchDirectories.Add (Path.GetDirectoryName (outputDebugDll)!); - - var collection = MarshalMethodsCollection.FromAssemblies (Tools.AndroidTargetArch.Arm64, [CreateItem (outputDebugDll, "arm64-v8a")], xaResolver, log); - - Assert.AreEqual (3, collection.MarshalMethods.Count); - Assert.AreEqual (0, collection.ConvertedMarshalMethods.Count); - - var key1 = "Android.App.Activity, Mono.Android\tOnCreate"; - var key2 = "Com.Xamarin.Android.Test.Msbuildtest.IJavaSourceTestInterface, mmtest\tGreetWithQuestion"; - var key3 = "Com.Xamarin.Android.Test.Msbuildtest.JavaSourceTestExtension, mmtest\tGreetWithQuestion"; - - Assert.AreEqual (1, collection.MarshalMethods [key1].Count); - Assert.AreEqual (2, collection.MarshalMethods [key2].Count); - Assert.AreEqual (1, collection.MarshalMethods [key3].Count); - - AssertMarshalMethodData (collection.MarshalMethods [key1] [0], - callbackField: null, - connector: "System.Delegate Android.App.Activity::GetOnCreate_Landroid_os_Bundle_Handler()", - declaringType: "mmtest.MainActivity", - implementedMethod: "System.Void mmtest.MainActivity::OnCreate(Android.OS.Bundle)", - jniMethodName: "onCreate", - jniMethodSignature: "(Landroid/os/Bundle;)V", - jniTypeName: "com/xamarin/marshalmethodscollectionscanning/MainActivity", - nativeCallback: "System.Void Android.App.Activity::n_OnCreate_Landroid_os_Bundle_(System.IntPtr,System.IntPtr,System.IntPtr)", - registeredMethod: "System.Void Android.App.Activity::OnCreate(Android.OS.Bundle)"); - - AssertMarshalMethodData (collection.MarshalMethods [key2] [0], - callbackField: null, - connector: "System.Delegate Com.Xamarin.Android.Test.Msbuildtest.IJavaSourceTestInterfaceInvoker::GetGreetWithQuestion_Ljava_lang_String_Ljava_util_Date_Ljava_lang_String_Handler()", - declaringType: "mmtest.MyGreeter", - implementedMethod: "System.String Com.Xamarin.Android.Test.Msbuildtest.IJavaSourceTestInterface::GreetWithQuestion(System.String,Java.Util.Date,System.String)", - jniMethodName: "greetWithQuestion", - jniMethodSignature: "(Ljava/lang/String;Ljava/util/Date;Ljava/lang/String;)Ljava/lang/String;", - jniTypeName: "crc644a923d2fc5ca7023/MyGreeter", - nativeCallback: "System.IntPtr Com.Xamarin.Android.Test.Msbuildtest.IJavaSourceTestInterfaceInvoker::n_GreetWithQuestion_Ljava_lang_String_Ljava_util_Date_Ljava_lang_String_(System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr)", - registeredMethod: "System.String Com.Xamarin.Android.Test.Msbuildtest.IJavaSourceTestInterface::GreetWithQuestion(System.String,Java.Util.Date,System.String)"); - - AssertMarshalMethodData (collection.MarshalMethods [key2] [1], - callbackField: null, - connector: "System.Delegate Com.Xamarin.Android.Test.Msbuildtest.IJavaSourceTestInterfaceInvoker::GetGreetWithQuestion_Ljava_lang_String_Ljava_util_Date_Ljava_lang_String_Handler()", - declaringType: "mmtest.MyGreeter2", - implementedMethod: "System.String Com.Xamarin.Android.Test.Msbuildtest.IJavaSourceTestInterface::GreetWithQuestion(System.String,Java.Util.Date,System.String)", - jniMethodName: "greetWithQuestion", - jniMethodSignature: "(Ljava/lang/String;Ljava/util/Date;Ljava/lang/String;)Ljava/lang/String;", - jniTypeName: "crc644a923d2fc5ca7023/MyGreeter2", - nativeCallback: "System.IntPtr Com.Xamarin.Android.Test.Msbuildtest.IJavaSourceTestInterfaceInvoker::n_GreetWithQuestion_Ljava_lang_String_Ljava_util_Date_Ljava_lang_String_(System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr)", - registeredMethod: "System.String Com.Xamarin.Android.Test.Msbuildtest.IJavaSourceTestInterface::GreetWithQuestion(System.String,Java.Util.Date,System.String)"); - - AssertMarshalMethodData (collection.MarshalMethods [key3] [0], - callbackField: null, - connector: "System.Delegate Com.Xamarin.Android.Test.Msbuildtest.JavaSourceTestExtension::GetGreetWithQuestion_Ljava_lang_String_Ljava_util_Date_Ljava_lang_String_Handler()", - declaringType: "mmtest.MyOverriddenGreeter", - implementedMethod: "System.String mmtest.MyOverriddenGreeter::GreetWithQuestion(System.String,Java.Util.Date,System.String)", - jniMethodName: "greetWithQuestion", - jniMethodSignature: "(Ljava/lang/String;Ljava/util/Date;Ljava/lang/String;)Ljava/lang/String;", - jniTypeName: "crc644a923d2fc5ca7023/MyOverriddenGreeter", - nativeCallback: "System.IntPtr Com.Xamarin.Android.Test.Msbuildtest.JavaSourceTestExtension::n_GreetWithQuestion_Ljava_lang_String_Ljava_util_Date_Ljava_lang_String_(System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr)", - registeredMethod: "System.String Com.Xamarin.Android.Test.Msbuildtest.JavaSourceTestExtension::GreetWithQuestion(System.String,Java.Util.Date,System.String)"); - - // Recompile with Release so marshal methods get rewritten - proj.IsRelease = true; - - Assert.IsTrue (builder.Build (proj), "`dotnet build` should succeed"); - builder.AssertHasNoWarnings (); - - // Rescan for modified marshal methods from the linked/ directory. - // When marshal methods are enabled, AssemblyModifierPipeline writes in-place - // to linked/ (not afterlink/) so that _RunAotForAllRIDs re-AOTs correctly. - var intermediateReleaseOutputPath = Path.Combine (Root, builder.ProjectDirectory, proj.IntermediateOutputPath, "android-arm64", "linked"); - var outputReleaseDll = Path.Combine (intermediateReleaseOutputPath, $"{proj.ProjectName}.dll"); - - xaResolver = new XAAssemblyResolver (Tools.AndroidTargetArch.Arm64, log, false); - xaResolver.SearchDirectories.Add (Path.GetDirectoryName (outputReleaseDll)!); - - var releaseCollection = MarshalMethodsCollection.FromAssemblies (Tools.AndroidTargetArch.Arm64, [CreateItem (outputReleaseDll, "arm64-v8a")], xaResolver, log); - - Assert.AreEqual (0, releaseCollection.MarshalMethods.Count); - Assert.AreEqual (3, releaseCollection.ConvertedMarshalMethods.Count); - - AssertRewrittenMethodData (releaseCollection.ConvertedMarshalMethods [key1] [0], collection.MarshalMethods [key1] [0]); - AssertRewrittenMethodData (releaseCollection.ConvertedMarshalMethods [key2] [0], collection.MarshalMethods [key2] [0]); - AssertRewrittenMethodData (releaseCollection.ConvertedMarshalMethods [key2] [1], collection.MarshalMethods [key2] [1]); - AssertRewrittenMethodData (releaseCollection.ConvertedMarshalMethods [key3] [0], collection.MarshalMethods [key3] [0]); - } void AssertMarshalMethodData (MarshalMethodEntry entry, string? callbackField, string? connector, string? declaringType, string? implementedMethod, string? jniMethodName, string? jniMethodSignature, string? jniTypeName, 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 ea19d25ad0f..11bd0a3534e 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 @@ -17,7 +17,7 @@ namespace Xamarin.Android.Build.Tests public class PackagingTest : BaseTest { [Test] - public void CheckProguardMappingFileExists ([Values] AndroidRuntime runtime) + public void CheckProguardMappingFileExists ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -40,7 +40,7 @@ public void CheckProguardMappingFileExists ([Values] AndroidRuntime runtime) } [Test] - public void CheckR8InfoMessagesToNotBreakTheBuild ([Values] AndroidRuntime runtime) + public void CheckR8InfoMessagesToNotBreakTheBuild ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -68,7 +68,7 @@ public void CheckR8InfoMessagesToNotBreakTheBuild ([Values] AndroidRuntime runti } [Test] - public void CheckDebugModeWithTrimming ([Values (AndroidRuntime.MonoVM, AndroidRuntime.CoreCLR)] AndroidRuntime runtime) + public void CheckDebugModeWithTrimming ([Values (AndroidRuntime.CoreCLR)] AndroidRuntime runtime) { bool usesAssemblyStores = runtime == AndroidRuntime.CoreCLR; var proj = new XamarinAndroidApplicationProject { @@ -95,7 +95,7 @@ public void CheckDebugModeWithTrimming ([Values (AndroidRuntime.MonoVM, AndroidR [Test] [NonParallelizable] // Commonly fails NuGet restore - public void CheckIncludedAssemblies ([Values (false, true)] bool usesAssemblyStores, [Values (AndroidRuntime.MonoVM, AndroidRuntime.CoreCLR)] AndroidRuntime runtime) + public void CheckIncludedAssemblies ([Values (false, true)] bool usesAssemblyStores, [Values (AndroidRuntime.CoreCLR)] AndroidRuntime runtime) { if (!usesAssemblyStores && runtime == AndroidRuntime.CoreCLR) { Assert.Ignore ("CoreCLR only supports builds with assembly stores."); @@ -176,7 +176,7 @@ static IEnumerable Get_CheckProjectWithSpaceInNameWorks_Data () { var ret = new List (); - foreach (AndroidRuntime runtime in Enum.GetValues (typeof (AndroidRuntime))) { + foreach (AndroidRuntime runtime in new[] { AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT }) { AddTestData ("Test Me", runtime); // testing characters as per https://www.compart.com/en/unicode/category/Zs @@ -219,7 +219,7 @@ public void CheckProjectWithSpaceInNameWorks (string projectName, AndroidRuntime } [Test] - public void CheckClassesDexIsIncluded ([Values] AndroidRuntime runtime) + public void CheckClassesDexIsIncluded ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -241,7 +241,7 @@ public void CheckClassesDexIsIncluded ([Values] AndroidRuntime runtime) [Test] [Parallelizable (ParallelScope.Self)] - public void CheckIncludedNativeLibraries ([Values] bool compressNativeLibraries, [Values] AndroidRuntime runtime) + public void CheckIncludedNativeLibraries ([Values] bool compressNativeLibraries, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -272,7 +272,7 @@ public void CheckIncludedNativeLibraries ([Values] bool compressNativeLibraries, } [Test] - public void EmbeddedDSOs ([Values] AndroidRuntime runtime) + public void EmbeddedDSOs ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -336,7 +336,7 @@ void AssertCompression (ZipEntry entry, bool compressed) } [Test] - public void IncrementalCompression ([Values] AndroidRuntime runtime) + public void IncrementalCompression ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -387,7 +387,7 @@ public void IncrementalCompression ([Values] AndroidRuntime runtime) } [Test] - public void ExplicitPackageNamingPolicy ([Values] AndroidRuntime runtime) + public void ExplicitPackageNamingPolicy ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -415,7 +415,7 @@ public void ExplicitPackageNamingPolicy ([Values] AndroidRuntime runtime) } [Test] - public void CheckMetadataSkipItemsAreProcessedCorrectly ([Values] AndroidRuntime runtime) + public void CheckMetadataSkipItemsAreProcessedCorrectly ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -512,7 +512,7 @@ public void Exported () } [Test] - public void CheckSignApk ([Values] bool useApkSigner, [Values] bool perAbiApk, [Values] AndroidRuntime runtime) + public void CheckSignApk ([Values] bool useApkSigner, [Values] bool perAbiApk, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -624,7 +624,7 @@ int GetVersionCodeFromIntermediateManifest (string manifestFilePath) } [Test] - public void CheckAppBundle ([Values] bool isRelease, [Values] AndroidRuntime runtime) + public void CheckAppBundle ([Values] bool isRelease, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -656,7 +656,7 @@ public void CheckAppBundle ([Values] bool isRelease, [Values] AndroidRuntime run } [Test] - public void MissingSatelliteAssemblyInLibrary ([Values] AndroidRuntime runtime) + public void MissingSatelliteAssemblyInLibrary ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -714,7 +714,7 @@ public void MissingSatelliteAssemblyInLibrary ([Values] AndroidRuntime runtime) } [Test] - public void MissingSatelliteAssemblyInApp ([Values] bool publishAot, [Values] AndroidRuntime runtime) + public void MissingSatelliteAssemblyInApp ([Values] bool publishAot, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -762,90 +762,8 @@ public void MissingSatelliteAssemblyInApp ([Values] bool publishAot, [Values] An } } - /// - /// Verifies that _PostTrimmingPipeline does not include satellite assemblies - /// (.resources.dll) in its input. Satellite assemblies are not processed by - /// ILLink and retain their original paths in the shared NuGet package cache. - /// Including them causes PostTrimmingPipeline to open them with ReadWrite - /// access, leading to IOException in parallel multi-RID builds. - /// See: https://github.com/dotnet/android/issues/11085 - /// [Test] - [NonParallelizable] // Commonly fails NuGet restore - public void PostTrimmingPipelineExcludesSatelliteAssemblies () - { - var proj = new XamarinAndroidApplicationProject { - IsRelease = true, - }; - proj.SetRuntime (AndroidRuntime.MonoVM); - proj.SetRuntimeIdentifiers (AndroidTargetArch.Arm64); - proj.PackageReferences.Add (new Package { - Id = "Humanizer.Core", - Version = "2.14.1", - }); - proj.PackageReferences.Add (new Package { - Id = "Humanizer.Core.es", - Version = "2.14.1", - }); - proj.MainActivity = proj.DefaultMainActivity - .Replace ("//${USINGS}", @"using Humanizer; -using System.Globalization;") - .Replace ("//${AFTER_ONCREATE}", @"var c = new CultureInfo (""es-ES""); -Console.WriteLine ($""{DateTime.UtcNow.AddHours(-30).Humanize(culture:c)}"");"); - proj.OtherBuildItems.Add (new BuildItem ("Using", "System.Globalization")); - proj.OtherBuildItems.Add (new BuildItem ("Using", "Humanizer")); - - // Inject a diagnostic target that logs the _PostTrimmingAssembly items - // created by the production _PostTrimmingPipeline target. In MSBuild, - // items defined in a target's are visible to subsequent targets. - proj.Imports.Add (new Import ("PostTrimmingDiag.targets") { - TextContent = () => """ - - - - - - - """, - }); - - using var b = CreateApkBuilder (); - Assert.IsTrue (b.Build (proj), "Build should have succeeded."); - - // Verify the diagnostic target actually ran and logged assemblies - Assert.IsTrue ( - b.LastBuildOutput.ContainsText ("DIAG_PTA:"), - "Diagnostic target should have logged _PostTrimmingAssembly items"); - - // Verify satellite assemblies ARE present in ResolvedFileToPublish (positive check) - bool hasSatelliteInRfp = false; - foreach (var line in b.LastBuildOutput) { - if (line.Contains ("DIAG_RFP:") && line.Contains (".resources.dll")) { - hasSatelliteInRfp = true; - break; - } - } - Assert.IsTrue (hasSatelliteInRfp, - "Satellite assemblies should be present in ResolvedFileToPublish to confirm the scenario is exercised"); - - // Verify satellite assemblies were NOT included in _PostTrimmingAssembly - var satelliteLines = new List (); - foreach (var line in b.LastBuildOutput) { - if (line.Contains ("DIAG_PTA:") && line.Contains (".resources.dll")) { - satelliteLines.Add (line.Trim ()); - } - } - Assert.IsEmpty (satelliteLines, - "Satellite assemblies (.resources.dll) should not be passed to PostTrimmingPipeline. " + - "They retain paths in the shared NuGet cache and cause file locking conflicts in parallel RID builds. Found:\n" + - string.Join ("\n", satelliteLines)); - } - - [Test] - public void IgnoreManifestFromJar ([Values] AndroidRuntime runtime) + public void IgnoreManifestFromJar ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -903,7 +821,7 @@ public class Test } [Test] - public void CheckExcludedFilesAreMissing ([Values] AndroidRuntime runtime) + public void CheckExcludedFilesAreMissing ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -928,7 +846,7 @@ public void CheckExcludedFilesAreMissing ([Values] AndroidRuntime runtime) } [Test] - public void CheckExcludedFilesCanBeModified ([Values] AndroidRuntime runtime) + public void CheckExcludedFilesCanBeModified ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -961,7 +879,7 @@ public void CheckExcludedFilesCanBeModified ([Values] AndroidRuntime runtime) } [Test] - public void CheckIncludedFilesArePresent ([Values] AndroidRuntime runtime) + public void CheckIncludedFilesArePresent ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -986,7 +904,7 @@ static IEnumerable Get_BuildApkWithZipFlushLimits_Data () { var ret = new List (); - foreach (AndroidRuntime runtime in Enum.GetValues (typeof (AndroidRuntime))) { + foreach (AndroidRuntime runtime in new[] { AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT }) { AddTestData (1, -1, runtime); AddTestData (5, -1, runtime); AddTestData (50, -1, runtime); @@ -1036,7 +954,7 @@ public void BuildApkWithZipFlushLimits (int filesLimit, int sizeLimit, AndroidRu } [Test] - public void ExtractNativeLibsTrue ([Values] AndroidRuntime runtime) + public void ExtractNativeLibsTrue ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1072,7 +990,7 @@ public void ExtractNativeLibsTrue ([Values] AndroidRuntime runtime) } [Test] - public void DefaultItems ([Values] AndroidRuntime runtime) + public void DefaultItems ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/SingleProjectTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/SingleProjectTest.cs index 6979535acd7..2dce3333f2e 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/SingleProjectTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/SingleProjectTest.cs @@ -18,7 +18,7 @@ static IEnumerable Get_AndroidManifestProperties_Data () { var ret = new List (); - foreach (AndroidRuntime runtime in Enum.GetValues (typeof (AndroidRuntime))) { + foreach (AndroidRuntime runtime in new[] { AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT }) { AddTestData ( // TODO: this has changed across all the runtimes from the previous "2.1" to its current value. // Check if it's a valid change. @@ -151,7 +151,7 @@ public void AndroidManifestProperties (string versionName, string versionCode, s } [Test] - public void AndroidManifestValuesWin ([Values] AndroidRuntime runtime) + public void AndroidManifestValuesWin ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/AndroidResourceTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/AndroidResourceTests.cs index 57e3e7dabc6..fc24e5348d2 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/AndroidResourceTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/AndroidResourceTests.cs @@ -156,7 +156,7 @@ public void UserLayout () } [Test] - public void AdaptiveIcon ([Values] AndroidRuntime runtime) + public void AdaptiveIcon ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/LinkerTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/LinkerTests.cs index 1dc50e6de9c..6c097b7fa93 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/LinkerTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/LinkerTests.cs @@ -162,7 +162,7 @@ static AssemblyDefinition CreateFauxMonoAndroidAssembly () } [Test] - public void WarnAboutAppDomains ([Values] bool isRelease, [Values] AndroidRuntime runtime) + public void WarnAboutAppDomains ([Values] bool isRelease, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -205,7 +205,7 @@ public void WarnAboutAppDomains ([Values] bool isRelease, [Values] AndroidRuntim } [Test] - public void RemoveDesigner ([Values (true, false)] bool useAssemblyStore, [Values (AndroidRuntime.MonoVM, AndroidRuntime.CoreCLR)] AndroidRuntime runtime) + public void RemoveDesigner ([Values (true, false)] bool useAssemblyStore, [Values (AndroidRuntime.CoreCLR)] AndroidRuntime runtime) { if (!useAssemblyStore && runtime == AndroidRuntime.CoreCLR) { Assert.Ignore ("CoreCLR supports only assembly stores"); @@ -247,7 +247,7 @@ public void RemoveDesigner ([Values (true, false)] bool useAssemblyStore, [Value } [Test] - public void LinkDescription ([Values (true, false)] bool useAssemblyStore, [Values (AndroidRuntime.MonoVM, AndroidRuntime.CoreCLR)] AndroidRuntime runtime) + public void LinkDescription ([Values (true, false)] bool useAssemblyStore, [Values (AndroidRuntime.CoreCLR)] AndroidRuntime runtime) { if (!useAssemblyStore && runtime == AndroidRuntime.CoreCLR) { Assert.Ignore ("CoreCLR doesn't support builds without assembly stores."); @@ -304,7 +304,7 @@ public void LinkDescription ([Values (true, false)] bool useAssemblyStore, [Valu } [Test] - public void LinkWithNullAttribute ([Values] AndroidRuntime runtime) + public void LinkWithNullAttribute ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -359,7 +359,7 @@ static IEnumerable Get_AndroidAddKeepAlivesData () { var ret = new List (); - foreach (AndroidRuntime runtime in Enum.GetValues (typeof (AndroidRuntime))) { + foreach (AndroidRuntime runtime in new[] { AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT }) { // Debug configuration AddTestData (isRelease: false, setAndroidAddKeepAlivesTrue: false, setLinkModeNone: false, shouldAddKeepAlives: false, runtime); @@ -505,7 +505,7 @@ void CheckAssembly (string assemblyPath, string projectDir) } [Test] - public void AndroidUseNegotiateAuthentication ([Values (true, false, null)] bool? useNegotiateAuthentication, [Values] AndroidRuntime runtime) + public void AndroidUseNegotiateAuthentication ([Values (true, false, null)] bool? useNegotiateAuthentication, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -543,7 +543,7 @@ public void AndroidUseNegotiateAuthentication ([Values (true, false, null)] bool } [Test] - public void PreserveIX509TrustManagerSubclasses ([Values] bool hasServerCertificateCustomValidationCallback, [Values] AndroidRuntime runtime) + public void PreserveIX509TrustManagerSubclasses ([Values] bool hasServerCertificateCustomValidationCallback, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -582,7 +582,7 @@ public void PreserveIX509TrustManagerSubclasses ([Values] bool hasServerCertific } [Test] - public void PreserveServices ([Values] AndroidRuntime runtime) + public void PreserveServices ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -625,7 +625,7 @@ protected override void OnNewIntent (Android.Content.Intent? intent) [Test] public void DoNotErrorOnPerArchJavaTypeDuplicates ( [Values(true, false)] bool enableMarshalMethods, - [Values(AndroidRuntime.MonoVM, AndroidRuntime.CoreCLR)] AndroidRuntime runtime) + [Values (AndroidRuntime.CoreCLR)] AndroidRuntime runtime) { if (enableMarshalMethods == true && runtime == AndroidRuntime.CoreCLR) { // This currently fails with the following exception: @@ -728,7 +728,7 @@ void Assert64Bit(string rid, bool expected64) } [Test] - public void WarnWithReferenceToPreserveAttribute ([Values] AndroidRuntime runtime) + public void WarnWithReferenceToPreserveAttribute ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/ManagedResourceParserTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/ManagedResourceParserTests.cs index aaff26bd489..a708ebf0bd8 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/ManagedResourceParserTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/ManagedResourceParserTests.cs @@ -487,7 +487,7 @@ void AssertResourceDesigner (GenerateResourceDesigner task, string expectedFile) } [Test] - public void GenerateDesignerFileFromRtxt ([Values] bool withLibraryReference, [Values] AndroidRuntime runtime) + public void GenerateDesignerFileFromRtxt ([Values] bool withLibraryReference, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { // TODO: fix NativeAOT, it currently fails with: // diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/NdkUtilTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/NdkUtilTests.cs index 593aeacc9ef..0389caeaf35 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/NdkUtilTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/NdkUtilTests.cs @@ -26,7 +26,7 @@ public void Setup () } [Test] - public void TestNdkUtil ([Values] AndroidRuntime runtime) + public void TestNdkUtil ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { var log = new TaskLoggingHelper (engine, TestName); using (var builder = new Builder ()) { diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/ResolveMonoAndroidSdksTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/ResolveMonoAndroidSdksTests.cs index 45f522b886f..f46f0cf41c2 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/ResolveMonoAndroidSdksTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/ResolveMonoAndroidSdksTests.cs @@ -41,7 +41,7 @@ static Dictionary ValuesFromLog (ProjectBuilder b) } [Test] - public void NormalInputs ([Values] AndroidRuntime runtime) + public void NormalInputs ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -72,7 +72,7 @@ public void NormalInputs ([Values] AndroidRuntime runtime) } [Test] - public void MissingAndroidNDK ([Values] AndroidRuntime runtime) + public void MissingAndroidNDK ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -103,7 +103,7 @@ public void MissingAndroidNDK ([Values] AndroidRuntime runtime) } [Test] - public void HasTrailingSlash ([Values] AndroidRuntime runtime) + public void HasTrailingSlash ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/WearTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/WearTests.cs index e45a9aff2b7..c992f2df335 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/WearTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/WearTests.cs @@ -9,7 +9,7 @@ namespace Xamarin.Android.Build.Tests public class WearTests : BaseTest { [Test] - public void BasicProject ([Values] bool isRelease, [Values] AndroidRuntime runtime) + public void BasicProject ([Values] bool isRelease, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -24,7 +24,7 @@ public void BasicProject ([Values] bool isRelease, [Values] AndroidRuntime runti } [Test] - public void BundledWearApp ([Values] AndroidRuntime runtime) + public void BundledWearApp ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -56,7 +56,7 @@ public void BundledWearApp ([Values] AndroidRuntime runtime) } [Test] - public void WearProjectJavaBuildFailure ([Values] AndroidRuntime runtime) + public void WearProjectJavaBuildFailure ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs index c43bc312316..7a7af12254a 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs @@ -50,7 +50,7 @@ static IEnumerable Get_DotNetPack_Data () { var ret = new List (); - foreach (AndroidRuntime runtime in Enum.GetValues (typeof (AndroidRuntime))) { + foreach (AndroidRuntime runtime in new[] { AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT }) { AddTestData ( dotnetVersion: XABuildConfig.PreviousDotNetTargetFramework, platform: "android", @@ -91,7 +91,7 @@ void AddTestData (string dotnetVersion, string platform, Version apiLevel, Andro [Test] [TestCaseSource (nameof (Get_DotNetPack_Data))] - public void DotNetPack (string dotnetVersion, string platform, Version apiLevel, [Values] AndroidRuntime runtime) + public void DotNetPack (string dotnetVersion, string platform, Version apiLevel, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -197,7 +197,7 @@ static IEnumerable Get_DotNetTargetFrameworks_Data () { var ret = new List (); - foreach (AndroidRuntime runtime in Enum.GetValues (typeof (AndroidRuntime))) { + foreach (AndroidRuntime runtime in new[] { AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT }) { AddTestData ( dotnetVersion: XABuildConfig.PreviousDotNetTargetFramework, platform: "android", @@ -254,7 +254,7 @@ static bool IsPreviewFrameworkVersion (string targetFramework) } [Test] - public void DotNetPublishDefaultValues ([Values] bool isRelease, [Values] AndroidRuntime runtime) + public void DotNetPublishDefaultValues ([Values] bool isRelease, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return;