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/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..2ba7c3f8863 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 @@ -7,59 +7,6 @@ namespace Xamarin.Android.Build.Tests { public class InvalidConfigTests : BaseTest { - static readonly object [] SettingCombinationsSource = new object [] { - // Interpreter + AOT - new object [] { - /* isRelease */ true, - /* useInterpreter */ true, - /* publishTrimmed */ true, - /* aot */ true, - /* expected */ true, - }, - // Debug + AOT - new object [] { - /* isRelease */ false, - /* useInterpreter */ false, - /* publishTrimmed */ true, - /* aot */ true, - /* expected */ true, - }, - // Debug + PublishTrimmed - new object [] { - /* isRelease */ false, - /* useInterpreter */ false, - /* publishTrimmed */ true, - /* aot */ false, - /* expected */ true, - }, - // AOT + PublishTrimmed=false - new object [] { - /* isRelease */ true, - /* useInterpreter */ false, - /* publishTrimmed */ false, - /* aot */ true, - /* expected */ false, - }, - }; - - [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 +44,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..798369aef3e 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,20 +570,21 @@ public void DirectBootAwareAttribute ([Values] AndroidRuntime runtime) }, }; - // TODO: make it work on CoreCLR and NativeAOT + // TODO: make it work on CoreCLR and NativeAOT. The test data uses 32-bit ABIs + // (armeabi-v7a, x86) that are not supported on CoreCLR/NativeAOT, and the expected + // version codes were computed and verified manually for the Mono mobile runtime. [Test] [TestCaseSource(nameof (VersionCodeTestSource))] public void VersionCodeTests (bool seperateApk, string abis, string versionCode, bool useLegacy, string versionCodePattern, string versionCodeProperties, bool shouldBuild, string expectedVersionCode) { + Assert.Ignore ("TODO: rework the test data for CoreCLR/NativeAOT supported ABIs."); + 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); @@ -629,7 +630,7 @@ 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 +692,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 +723,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 +752,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 +774,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 +825,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 +877,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 +1002,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 +1095,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 +1145,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 +1199,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 +1256,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 +1385,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 +1640,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; diff --git a/tests/MSBuildDeviceIntegration/Tests/AotProfileTests.cs b/tests/MSBuildDeviceIntegration/Tests/AotProfileTests.cs deleted file mode 100644 index 344b43caf31..00000000000 --- a/tests/MSBuildDeviceIntegration/Tests/AotProfileTests.cs +++ /dev/null @@ -1,64 +0,0 @@ -using NUnit.Framework; -using System; -using System.IO; -using System.Net; -using Xamarin.ProjectTools; - -namespace Xamarin.Android.Build.Tests -{ - [Category ("UsesDevice"), Category ("AOT"), Category ("ProfiledAOT")] - public class AotProfileTests : DeviceTest - { - [TearDown] - protected void ClearProp () - { - ClearShellProp ("debug.mono.profile"); - } - - readonly string PermissionManifest = @" - - - - - -"; - - [Test] - [NonParallelizable] - public void BuildBasicApplicationAndAotProfileIt () - { - var proj = new XamarinAndroidApplicationProject () { - IsRelease = true, - AotAssemblies = false, - }; - // MonoVM-only test - proj.SetRuntime (Android.Tasks.AndroidRuntime.MonoVM); - proj.SetRuntimeIdentifiers (new[] { DeviceAbi }); - - // TODO: only needed in .NET 6+ - // See https://github.com/dotnet/runtime/issues/56989 - proj.PackageReferences.Add (KnownPackages.Mono_AotProfiler_Android); - - var port = 9000 + new Random ().Next (1000); - proj.SetProperty ("AndroidAotProfilerPort", port.ToString ()); - proj.AndroidManifest = string.Format (PermissionManifest, proj.PackageName); - var projDirectory = Path.Combine ("temp", TestName); - using (var b = CreateApkBuilder (projDirectory)) { - Assert.IsTrue (b.RunTarget (proj, "BuildAndStartAotProfiling"), "Run of BuildAndStartAotProfiling should have succeeded."); - WaitForAppBuiltForOlderAndroidWarning (proj.PackageName, Path.Combine (Root, b.ProjectDirectory, "oldsdk-logcat.log")); - System.Threading.Thread.Sleep (5000); - b.BuildLogFile = "build2.log"; - - // Need execute permission - if (!IsWindows) { - var aprofutil = Path.Combine (Root, b.ProjectDirectory, "aprofutil"); - RunProcess ("chmod", $"u+x {aprofutil}"); - } - - Assert.IsTrue (b.RunTarget (proj, "FinishAotProfiling", doNotCleanupOnUpdate: true), "Run of FinishAotProfiling should have succeeded."); - var customProfile = Path.Combine (Root, projDirectory, "custom.aprof"); - FileAssert.Exists (customProfile); - } - } - } -} diff --git a/tests/MSBuildDeviceIntegration/Tests/BundleToolNoAbiSplitTests.cs b/tests/MSBuildDeviceIntegration/Tests/BundleToolNoAbiSplitTests.cs index eca4ab420d5..3b3b5ee14c2 100644 --- a/tests/MSBuildDeviceIntegration/Tests/BundleToolNoAbiSplitTests.cs +++ b/tests/MSBuildDeviceIntegration/Tests/BundleToolNoAbiSplitTests.cs @@ -38,7 +38,7 @@ public class BundleToolNoAbiSplitTests : DeviceTest static Array Get_ConstructorParameters () { - return Enum.GetValues (typeof (AndroidRuntime)); + return new[] { AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT }; } public BundleToolNoAbiSplitTests (AndroidRuntime runtime) diff --git a/tests/MSBuildDeviceIntegration/Tests/BundleToolTests.cs b/tests/MSBuildDeviceIntegration/Tests/BundleToolTests.cs index 3a4e0bfa47a..d0511b0cca2 100644 --- a/tests/MSBuildDeviceIntegration/Tests/BundleToolTests.cs +++ b/tests/MSBuildDeviceIntegration/Tests/BundleToolTests.cs @@ -51,7 +51,7 @@ static IEnumerable Get_FixtureArgs () var ret = new List (); foreach (object[] args in fixtureArgs) { - foreach (AndroidRuntime runtime in Enum.GetValues (typeof (AndroidRuntime))) { + foreach (AndroidRuntime runtime in new[] { AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT }) { ret.Add (new object[] { args[0], runtime, diff --git a/tests/MSBuildDeviceIntegration/Tests/DebuggingTest.cs b/tests/MSBuildDeviceIntegration/Tests/DebuggingTest.cs index 95da395eb31..c287a1416c1 100755 --- a/tests/MSBuildDeviceIntegration/Tests/DebuggingTest.cs +++ b/tests/MSBuildDeviceIntegration/Tests/DebuggingTest.cs @@ -4,8 +4,6 @@ using System.Threading; using System.Threading.Tasks; using System.Net; -using Mono.Debugging.Client; -using Mono.Debugging.Soft; using NUnit.Framework; using Xamarin.ProjectTools; using System.Collections.Generic; @@ -54,7 +52,7 @@ int FindTextInFile (string file, string text) } [Test] - public void ApplicationRunsWithoutDebugger ([Values] bool isRelease, [Values] bool extractNativeLibs, [Values] bool useEmbeddedDex, [Values] AndroidRuntime runtime) + public void ApplicationRunsWithoutDebugger ([Values] bool isRelease, [Values] bool extractNativeLibs, [Values] bool useEmbeddedDex, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -101,7 +99,7 @@ public void ApplicationRunsWithoutDebugger ([Values] bool isRelease, [Values] bo } [Test] - public void ClassLibraryMainLauncherRuns ([Values] bool preloadAssemblies, [Values] AndroidRuntime runtime) + public void ClassLibraryMainLauncherRuns ([Values] bool preloadAssemblies, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -179,481 +177,5 @@ public void ClassLibraryMainLauncherRuns ([Values] bool preloadAssemblies, [Valu } } - static IEnumerable Get_CustomApplicationRunsWithDebuggerAndBreaks_Data () - { - var ret = new List (); - - foreach (AndroidRuntime runtime in Enum.GetValues (typeof (AndroidRuntime))) { - // TODO: once CoreCLR debugging works, this needs to be adjusted accordingly - if (runtime != AndroidRuntime.MonoVM) { - continue; - } - - AddTestData ( - embedAssemblies: true, - activityStarts: true, - packageFormat: "apk", - runtime: runtime - ); - - AddTestData ( - embedAssemblies: false, - activityStarts: true, - packageFormat: "apk", - runtime: runtime - ); - - AddTestData ( - embedAssemblies: true, - activityStarts: true, - packageFormat: "aab", - runtime: runtime - ); - - AddTestData ( - embedAssemblies: false, - activityStarts: true, - packageFormat: "aab", - runtime: runtime - ); - } - - return ret; - - void AddTestData (bool embedAssemblies, bool activityStarts, string packageFormat, AndroidRuntime runtime) - { - ret.Add (new object[] { - embedAssemblies, - activityStarts, - packageFormat, - runtime, - }); - } - } - - // MonoVM-only test for the moment. - [Test, Category ("Debugger")] - [TestCaseSource (nameof (Get_CustomApplicationRunsWithDebuggerAndBreaks_Data))] - [Retry(5)] - public void CustomApplicationRunsWithDebuggerAndBreaks (bool embedAssemblies, bool activityStarts, string packageFormat, AndroidRuntime runtime) - { - const bool isRelease = false; - if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { - return; - } - - SwitchUser (); - - var path = Path.Combine (Root, "temp", TestName); - if (Directory.Exists (path)) { - TestContext.Out.WriteLine ($"Deleting previous run at '{path}'"); - Directory.Delete (path,recursive:true); - } - - var proj = new XamarinAndroidApplicationProject () { - IsRelease = isRelease, - }; - - proj.SetRuntime (runtime); - proj.SetRuntimeIdentifiers (new[] { DeviceAbi }); - proj.SetProperty ("EmbedAssembliesIntoApk", embedAssemblies.ToString ()); - proj.SetProperty ("AndroidPackageFormat", packageFormat); - proj.SetDefaultTargetDevice (); - proj.Sources.Add (new BuildItem.Source ("MyApplication.cs") { - TextContent = () => proj.ProcessSourceTemplate (@"using System; -using Android.App; -using Android.OS; -using Android.Runtime; -using Android.Widget; - -namespace ${ROOT_NAMESPACE} { - [Application] - public class MyApplication : Application { - public MyApplication (IntPtr handle, JniHandleOwnership jniHandle) - : base (handle, jniHandle) - { - } - - public override void OnCreate () - { - base.OnCreate (); - } - } -} -"), - }); - using (var b = CreateApkBuilder (path)) { - SetTargetFrameworkAndManifest (proj, b, null); - Assert.True (b.Install (proj), "Project should have installed."); - - int breakcountHitCount = 0; - ManualResetEvent resetEvent = new ManualResetEvent (false); - var sw = new Stopwatch (); - // setup the debugger - var session = new SoftDebuggerSession (); - try { - session.Breakpoints = new BreakpointStore (); - string file = Path.Combine (Root, b.ProjectDirectory, "MainActivity.cs"); - int line = FindTextInFile (file, "base.OnCreate (bundle);"); - session.Breakpoints.Add (file, line); - file = Path.Combine (Root, b.ProjectDirectory, "MyApplication.cs"); - line = FindTextInFile (file, "base.OnCreate ();"); - session.Breakpoints.Add (file, line); - session.TargetHitBreakpoint += (sender, e) => { - TestContext.WriteLine ($"BREAK {e.Type}, {e.Backtrace.GetFrame (0)}"); - breakcountHitCount++; - session.Continue (); - }; - var rnd = new Random (); - int port = rnd.Next (10000, 20000); - TestContext.Out.WriteLine ($"{port}"); - var args = new SoftDebuggerConnectArgs ("", IPAddress.Loopback, port) { - MaxConnectionAttempts = DEBUGGER_MAX_CONNECTIONS, // we need a long delay here to get a reliable connection - TimeBetweenConnectionAttempts = DEBUGGER_CONNECTION_TIMEOUT, - }; - var startInfo = new SoftDebuggerStartInfo (args) { - WorkingDirectory = Path.Combine (b.ProjectDirectory, proj.IntermediateOutputPath, "android", "assets"), - }; - var options = new DebuggerSessionOptions () { - EvaluationOptions = EvaluationOptions.DefaultOptions, - }; - options.EvaluationOptions.UseExternalTypeResolver = true; - RunProjectAndAssert (proj, b, doNotCleanupOnUpdate: true, parameters: new string [] { - $"AndroidSdbTargetPort={port}", - $"AndroidSdbHostPort={port}", - "AndroidAttachDebugger=True", - }); - - session.LogWriter += (isStderr, text) => { Console.WriteLine (text); }; - session.OutputWriter += (isStderr, text) => { Console.WriteLine (text); }; - session.DebugWriter += (level, category, message) => { Console.WriteLine (message); }; - // do we expect the app to start? - Assert.AreEqual (activityStarts, WaitForDebuggerToStart (Path.Combine (Root, b.ProjectDirectory, "logcat.log")), "Debugger should have started"); - if (!activityStarts) - return; - Assert.False (session.HasExited, "Target should not have exited."); - session.Run (startInfo, options); - var expectedTime = TimeSpan.FromSeconds (1); - var actualTime = ProfileFor (() => session.IsConnected); - Assert.True (session.IsConnected, "Debugger should have connected but it did not."); - TestContext.Out.WriteLine ($"Debugger connected in {actualTime}"); - Assert.LessOrEqual (actualTime, expectedTime, $"Debugger should have connected within {expectedTime} but it took {actualTime}."); - // we need to wait here for a while to allow the breakpoints to hit - // but we need to timeout - TimeSpan timeout = TimeSpan.FromSeconds (60); - while (session.IsConnected && breakcountHitCount < 2 && timeout >= TimeSpan.Zero) { - Thread.Sleep (10); - timeout = timeout.Subtract (TimeSpan.FromMilliseconds (10)); - } - WaitFor (2000); - int expected = 2; - Assert.AreEqual (expected, breakcountHitCount, $"Should have hit {expected} breakpoints. Only hit {breakcountHitCount}"); - b.BuildLogFile = "uninstall.log"; - Assert.True (b.Uninstall (proj), "Project should have uninstalled."); - } catch (Exception ex) { - Assert.Fail ($"Exception occurred {ex}"); - } finally { - session.Exit (); - } - } - } - - static IEnumerable Get_ApplicationRunsWithDebuggerAndBreaks_Data () - { - var ret = new List (); - - foreach (AndroidRuntime runtime in Enum.GetValues (typeof (AndroidRuntime))) { - // TODO: once CoreCLR debugging works, this needs to be adjusted accordingly - if (runtime != AndroidRuntime.MonoVM) { - continue; - } - - AddTestData ( - embedAssemblies: true, - username: null, - packageFormat: "apk", - useLatestSdk: true, - runtime: runtime - ); - - AddTestData ( - embedAssemblies: true, - username: null, - packageFormat: "apk", - useLatestSdk: false, - runtime: runtime - ); - - AddTestData ( - embedAssemblies: false, - username: null, - packageFormat: "apk", - useLatestSdk: true, - runtime: runtime - ); - - AddTestData ( - embedAssemblies: true, - username: DeviceTest.GuestUserName, - packageFormat: "apk", - useLatestSdk: true, - runtime: runtime - ); - - AddTestData ( - embedAssemblies: false, - username: DeviceTest.GuestUserName, - packageFormat: "apk", - useLatestSdk: true, - runtime: runtime - ); - - AddTestData ( - embedAssemblies: true, - username: null, - packageFormat: "aab", - useLatestSdk: true, - runtime: runtime - ); - - AddTestData ( - embedAssemblies: false, - username: null, - packageFormat: "aab", - useLatestSdk: true, - runtime: runtime - ); - - AddTestData ( - embedAssemblies: true, - username: DeviceTest.GuestUserName, - packageFormat: "aab", - useLatestSdk: true, - runtime: runtime - ); - - AddTestData ( - embedAssemblies: false, - username: DeviceTest.GuestUserName, - packageFormat: "aab", - useLatestSdk: true, - runtime: runtime - ); - } - - return ret; - - void AddTestData (bool embedAssemblies, string username, string packageFormat, bool useLatestSdk, AndroidRuntime runtime) - { - ret.Add (new object[] { - embedAssemblies, - username, - packageFormat, - useLatestSdk, - runtime, - }); - } - } - - // MonoVM-only test for the moment. - [Test, Category ("Debugger")] - [TestCaseSource (nameof(Get_ApplicationRunsWithDebuggerAndBreaks_Data))] - [Retry (5)] - public void ApplicationRunsWithDebuggerAndBreaks (bool embedAssemblies, string username, string packageFormat, bool useLatestSdk, AndroidRuntime runtime) - { - const bool isRelease = false; - if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { - return; - } - - SwitchUser (); - WaitFor (5000); - - var path = Path.Combine (Root, "temp", TestName); - if (Directory.Exists (path)) { - TestContext.Out.WriteLine ($"Deleting previous run at '{path}'"); - Directory.Delete (path,recursive:true); - } - - int userId = GetUserId (username); - List parameters = new List (); - if (userId >= 0) - parameters.Add ($"AndroidDeviceUserId={userId}"); - if (SwitchUser (username)) { - WaitFor (5000); - ClearBlockingDialogs (); - ClickButton ("", "android:id/button1", "Yes continue"); - } - - var lib = new XamarinAndroidLibraryProject { - IsRelease = isRelease, - ProjectName = "Library1", - Sources = { - new BuildItem.Source ("Foo.cs") { - TextContent = () => -@"public class Foo -{ - public Foo () - { - } -}" - }, - }, - }; - - var app = new XamarinFormsAndroidApplicationProject { - ProjectName = "App", - IsRelease = isRelease, - EmbedAssembliesIntoApk = embedAssemblies, - }; - - app.SetRuntime (runtime); - if (!useLatestSdk) { - lib.TargetFramework = $"{XABuildConfig.PreviousDotNetTargetFramework}-android"; - app.TargetFramework = $"{XABuildConfig.PreviousDotNetTargetFramework}-android"; - } - - app.SetProperty ("AndroidPackageFormat", packageFormat); - app.MainPage = app.MainPage - .Replace ("InitializeComponent ();", "InitializeComponent (); new Foo ();") - // NOTE: can trigger deadlock/loop on startup: - // 08-25 09:40:36.759 32259 32293 D monodroid-assembly: monodroid_dlopen: hash match found, DSO name is 'libSystem.Security.Cryptography.Native.Android.so' - // 08-25 09:40:36.759 32259 32293 D monodroid-assembly: Trying to load loading shared JNI library /data/user/0/com.companyname.testgrendel/files/.__override__/arm64-v8a/libSystem.Security.Cryptography.Native.Android.so with System.loadLibrary - // 08-25 09:40:36.759 32259 32293 D monodroid-assembly: Running DSO loader on thread 32293, dispatching to main thread - .Replace ("//${AFTER_MAINACTIVITY}", """ - static MainActivity() - { - try - { - var text = new HttpClient().GetStringAsync("https://www.google.com").GetAwaiter().GetResult(); - Console.WriteLine("Web request:" + text); - } - catch (Exception ex) - { - // Doesn't actually matter if succeeds - Console.WriteLine("Web request failed:" + ex); - } - } - """); - app.AddReference (lib); - var abis = new [] { DeviceAbi }; - app.SetRuntimeIdentifiers (abis); - app.SetDefaultTargetDevice (); - using (var libBuilder = CreateDllBuilder (Path.Combine (path, lib.ProjectName))) - using (var appBuilder = CreateApkBuilder (Path.Combine (path, app.ProjectName))) { - appBuilder.Verbosity = LoggerVerbosity.Detailed; - Assert.True (libBuilder.Build (lib), "Library should have built."); - - SetTargetFrameworkAndManifest (app, appBuilder, app.TargetFramework == $"{XABuildConfig.PreviousDotNetTargetFramework}-android" ? 36 : null); - Assert.True (appBuilder.Install (app, parameters: parameters.ToArray ()), "App should have installed."); - - if (!embedAssemblies) { - // Check that we deployed app and framework .pdb files - StringAssertEx.ContainsRegex ($@"NotifySync CopyFile.+{app.ProjectName}\.pdb", appBuilder.LastBuildOutput, - $"{app.ProjectName}.pdb should be deployed!"); - StringAssertEx.ContainsRegex ($@"NotifySync CopyFile.+{lib.ProjectName}\.pdb", appBuilder.LastBuildOutput, - $"{lib.ProjectName}.pdb should be deployed!"); - } - - int breakcountHitCount = 0; - ManualResetEvent resetEvent = new ManualResetEvent (false); - var sw = new Stopwatch (); - // setup the debugger - var session = new SoftDebuggerSession (); - try { - session.Breakpoints = new BreakpointStore (); - string file = Path.Combine (Root, appBuilder.ProjectDirectory, "MainActivity.cs"); - int line = FindTextInFile (file, "base.OnCreate (savedInstanceState);"); - session.Breakpoints.Add (file, line); - - file = Path.Combine (Root, appBuilder.ProjectDirectory, "MainPage.xaml.cs"); - line = FindTextInFile (file, "InitializeComponent ();"); - session.Breakpoints.Add (file, line); - - file = Path.Combine (Root, appBuilder.ProjectDirectory, "MainPage.xaml.cs"); - line = FindTextInFile (file, "Console.WriteLine ("); - session.Breakpoints.Add (file, line); - - file = Path.Combine (Root, appBuilder.ProjectDirectory, "App.xaml.cs"); - line = FindTextInFile (file, "InitializeComponent ();"); - session.Breakpoints.Add (file, line); - - file = Path.Combine (Root, libBuilder.ProjectDirectory, "Foo.cs"); - line = FindTextInFile (file, "public Foo ()"); - // Add one to the line so we get the '{' under the constructor - session.Breakpoints.Add (file, line++); - - session.TargetHitBreakpoint += (sender, e) => { - TestContext.WriteLine ($"BREAK {e.Type}, {e.Backtrace.GetFrame (0)}"); - breakcountHitCount++; - session.Continue (); - }; - var rnd = new Random (); - int port = rnd.Next (10000, 20000); - TestContext.Out.WriteLine ($"{port}"); - var args = new SoftDebuggerConnectArgs ("", IPAddress.Loopback, port) { - MaxConnectionAttempts = DEBUGGER_MAX_CONNECTIONS, - TimeBetweenConnectionAttempts = DEBUGGER_CONNECTION_TIMEOUT, - }; - var startInfo = new SoftDebuggerStartInfo (args) { - WorkingDirectory = Path.Combine (appBuilder.ProjectDirectory, app.IntermediateOutputPath, "android", "assets"), - }; - var options = new DebuggerSessionOptions () { - EvaluationOptions = EvaluationOptions.DefaultOptions, - }; - options.EvaluationOptions.UseExternalTypeResolver = true; - - parameters.Add ($"AndroidSdbTargetPort={port}"); - parameters.Add ($"AndroidSdbHostPort={port}"); - parameters.Add ("AndroidAttachDebugger=True"); - - RunProjectAndAssert (app, appBuilder, doNotCleanupOnUpdate: true, parameters: parameters.ToArray ()); - - session.LogWriter += (isStderr, text) => { - TestContext.Out.WriteLine (text); - }; - session.OutputWriter += (isStderr, text) => { - TestContext.Out.WriteLine (text); - }; - session.DebugWriter += (level, category, message) => { - TestContext.Out.WriteLine (message); - }; - Assert.IsTrue (WaitForDebuggerToStart (Path.Combine (Root, appBuilder.ProjectDirectory, "logcat.log")), "Debugger should have started"); - session.Run (startInfo, options); - TestContext.Out.WriteLine ($"Detected debugger startup in log"); - Assert.False (session.HasExited, "Target should not have exited."); - WaitFor (TimeSpan.FromSeconds (30), () => session.IsConnected ); - Assert.True (session.IsConnected, "Debugger should have connected but it did not."); - // we need to wait here for a while to allow the breakpoints to hit - // but we need to timeout - TestContext.Out.WriteLine ($"Debugger connected."); - TimeSpan timeout = TimeSpan.FromSeconds (60); - int expected = 4; - while (session.IsConnected && breakcountHitCount < 3 && timeout >= TimeSpan.Zero) { - Thread.Sleep (10); - timeout = timeout.Subtract (TimeSpan.FromMilliseconds (10)); - } - WaitFor (2000); - Assert.AreEqual (expected, breakcountHitCount, $"Should have hit {expected} breakpoints. Only hit {breakcountHitCount}"); - breakcountHitCount = 0; - ClearAdbLogcat (); - ClearBlockingDialogs (); - Assert.True (ClickButton (app.PackageName, "myXFButton", "CLICK ME"), "Button should have been clicked!"); - timeout = TimeSpan.FromSeconds (60); - while (session.IsConnected && breakcountHitCount < 1 && timeout >= TimeSpan.Zero) { - Thread.Sleep (10); - timeout = timeout.Subtract (TimeSpan.FromMilliseconds (10)); - } - expected = 1; - Assert.AreEqual (expected, breakcountHitCount, $"Should have hit {expected} breakpoints. Only hit {breakcountHitCount}"); - appBuilder.BuildLogFile = "uninstall.log"; - Assert.True (appBuilder.Uninstall (app), "Project should have uninstalled."); - } catch (Exception ex) { - Assert.Fail($"Exception occurred {ex}"); - } finally { - session.Exit (); - } - } - } } } diff --git a/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs b/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs index 5eae82b12ce..90584f86a42 100644 --- a/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs +++ b/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs @@ -48,7 +48,7 @@ static IEnumerable Get_DotNetRun_Data () { var ret = new List (); - foreach (AndroidRuntime runtime in Enum.GetValues (typeof (AndroidRuntime))) { + foreach (AndroidRuntime runtime in new[] { AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT }) { AddTestData (true, "llvm-ir", runtime); AddTestData (false, "llvm-ir", runtime); AddTestData (true, "managed", runtime); @@ -526,7 +526,7 @@ public void DotNetRunWithDeviceParameter () } [Test] - public void DotNetWatchHotReload ([Values (AndroidRuntime.MonoVM, AndroidRuntime.CoreCLR)] AndroidRuntime runtime) + public void DotNetWatchHotReload ([Values (AndroidRuntime.CoreCLR)] AndroidRuntime runtime) { const string initialMessage = "DOTNET_WATCH_INITIAL_12345"; const string hotReloadMessage = "DOTNET_WATCH_HOT_RELOAD_APPLIED"; @@ -628,7 +628,7 @@ public void DotNetWatchHotReload ([Values (AndroidRuntime.MonoVM, AndroidRuntime } [Test] - public void DeployToDevice ([Values] bool isRelease, [Values] AndroidRuntime runtime) + public void DeployToDevice ([Values] bool isRelease, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -671,7 +671,7 @@ public void DeployToDevice ([Values] bool isRelease, [Values] AndroidRuntime run } [Test] - public void ActivityAliasRuns ([Values] bool isRelease, [Values] AndroidRuntime runtime) + public void ActivityAliasRuns ([Values] bool isRelease, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -703,7 +703,7 @@ public void ActivityAliasRuns ([Values] bool isRelease, [Values] AndroidRuntime } [Test] - public void NativeAssemblyCacheWithSatelliteAssemblies ([Values] bool enableMarshalMethods, [Values] AndroidRuntime runtime) + public void NativeAssemblyCacheWithSatelliteAssemblies ([Values] bool enableMarshalMethods, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -775,7 +775,7 @@ public void NativeAssemblyCacheWithSatelliteAssemblies ([Values] bool enableMars } [Test] - public void GlobalLayoutEvent_ShouldRegisterAndFire_OnActivityLaunch ([Values] bool isRelease, [Values] AndroidRuntime runtime) + public void GlobalLayoutEvent_ShouldRegisterAndFire_OnActivityLaunch ([Values] bool isRelease, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -812,7 +812,7 @@ void Button_ViewTreeObserver_GlobalLayout (object sender, EventArgs e) } [Test] - public void SubscribeToAppDomainUnhandledException ([Values] AndroidRuntime runtime) + public void SubscribeToAppDomainUnhandledException ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -827,11 +827,7 @@ public void SubscribeToAppDomainUnhandledException ([Values] AndroidRuntime runt IsRelease = isRelease, }; proj.SetRuntime (runtime); - if (runtime == AndroidRuntime.MonoVM) { - proj.SetRuntimeIdentifiers (new[] { "armeabi-v7a", "arm64-v8a", "x86", "x86_64" }); - } else { - proj.SetRuntimeIdentifiers (new [] {"arm64-v8a", "x86_64"}); - } + proj.SetRuntimeIdentifiers (new [] {"arm64-v8a", "x86_64"}); proj.MainActivity = proj.DefaultMainActivity.Replace ("//${AFTER_ONCREATE}", @" AppDomain.CurrentDomain.UnhandledException += (sender, e) => { @@ -846,7 +842,6 @@ public void SubscribeToAppDomainUnhandledException ([Values] AndroidRuntime runt string? expectedSender = runtime switch { - AndroidRuntime.MonoVM => "System.Object", // MonoVM passes the current domain as the sender AndroidRuntime.CoreCLR => null, // CoreCLR explicitly passes a `null` sender _ => throw new NotImplementedException($"Test does not support runtime {runtime}"), }; @@ -891,7 +886,7 @@ static IEnumerable Get_SmokeTestBuildAndRunWithSpecialCharacters_Data { var ret = new List (); - foreach (AndroidRuntime runtime in Enum.GetValues (typeof (AndroidRuntime))) { + foreach (AndroidRuntime runtime in new[] { AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT }) { AddTestData ("テスト", runtime); AddTestData ("随机生成器", runtime); AddTestData ("中国", runtime); @@ -909,7 +904,7 @@ void AddTestData (string testName, AndroidRuntime runtime) } [Test] - public void UnhandledExceptionFromButtonClick ([Values (AndroidRuntime.MonoVM, AndroidRuntime.CoreCLR)] AndroidRuntime runtime) + public void UnhandledExceptionFromButtonClick ([Values (AndroidRuntime.CoreCLR)] AndroidRuntime runtime) { proj = new XamarinAndroidApplicationProject (); proj.SetRuntime (runtime); @@ -1075,7 +1070,7 @@ public void SmokeTestBuildAndRunWithSpecialCharacters (string testName, AndroidR [Test] public void CustomLinkDescriptionPreserve ( [Values (AndroidLinkMode.SdkOnly, AndroidLinkMode.Full)] AndroidLinkMode linkMode, - [Values] AndroidRuntime runtime + [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime ) { const bool isRelease = true; @@ -1238,7 +1233,7 @@ string getResource (string name) } [Test] - public void JsonDeserializationCreatesJavaHandle ([Values] bool isRelease, [Values] AndroidRuntime runtime) + public void JsonDeserializationCreatesJavaHandle ([Values] bool isRelease, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -1334,94 +1329,7 @@ public override Type BindToType (string assemblyName, string typeName) } [Test] - public void RunWithInterpreterEnabled ([Values] bool isRelease, [Values] AndroidRuntime runtime) - { - if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { - return; - } - - // MonoVM-only test, for now (until CoreCLR has interpreter we can use) - if (runtime != AndroidRuntime.MonoVM) { - Assert.Ignore ("MonoVM-only test for the moment"); - } - - var proj = new XamarinAndroidApplicationProject (packageName: PackageUtils.MakePackageName (runtime)) { - IsRelease = isRelease, - AotAssemblies = false, // Release defaults to Profiled AOT for .NET 6 - }; - proj.SetRuntime (runtime); - var abis = new string[] { "armeabi-v7a", "arm64-v8a", "x86", "x86_64" }; - proj.SetRuntimeIdentifiers (abis); - proj.SetProperty (proj.CommonProperties, "UseInterpreter", "True"); - builder = CreateApkBuilder (); - builder.BuildLogFile = "install.log"; - Assert.IsTrue (builder.Install (proj), "Install should have succeeded."); - - RunAdbCommand ("shell setprop debug.mono.log all"); - var logProp = RunAdbCommand ("shell getprop debug.mono.log")?.Trim (); - Assert.AreEqual (logProp, "all", "The debug.mono.log prop was not set correctly."); - RunProjectAndAssert (proj, builder); - - Func checkForInterpMessage = line => { - return line.Contains ("Enabling Mono Interpreter"); - }; - var timeoutInSeconds = ActivityStartTimeoutInSeconds; - var didPrintInterpMessage = MonitorAdbLogcat ( - action: checkForInterpMessage, - logcatFilePath: Path.Combine (Root, builder.ProjectDirectory, "interpreter-logcat.log"), - timeout: timeoutInSeconds); - var didStart = WaitForActivityToStart (proj.PackageName, "MainActivity", - Path.Combine (Root, builder.ProjectDirectory, "startup-logcat.log"), timeoutInSeconds); - ClearShellProp ("debug.mono.log"); - logProp = RunAdbCommand ("shell getprop debug.mono.log")?.Trim (); - Assert.AreEqual (logProp, string.Empty, "The debug.mono.log prop was not unset correctly."); - Assert.IsTrue (didPrintInterpMessage, "logcat output did not contain 'Enabling Mono Interpreter'."); - Assert.IsTrue (didStart, "Activity should have started."); - } - - [Test] - public void RunWithLLVMEnabled () - { - var proj = new XamarinAndroidApplicationProject () { - IsRelease = true, - }; - // Mono-only test - proj.SetRuntime (AndroidRuntime.MonoVM); - proj.SetRuntimeIdentifiers (new[] { "armeabi-v7a", "arm64-v8a", "x86", "x86_64" }); - proj.SetProperty ("EnableLLVM", true.ToString ()); - - builder = CreateApkBuilder (); - Assert.IsTrue (builder.Install (proj), "Install should have succeeded."); - RunProjectAndAssert (proj, builder); - - var activityNamespace = proj.PackageName; - var activityName = "MainActivity"; - var logcatFilePath = Path.Combine (Root, builder.ProjectDirectory, "startup-logcat.log"); - var failedToLoad = new List (); - bool appLaunched = MonitorAdbLogcat ((line) => { - if (SeenFailedToLoad (line)) - failedToLoad.Add (line); - return SeenActivityDisplayed (line); - }, logcatFilePath, timeout: ActivityStartTimeoutInSeconds); - - Assert.IsTrue (appLaunched, "LLVM app did not launch"); - Assert.AreEqual (0, failedToLoad.Count, $"LLVM .so files not loaded:\n{string.Join ("\n", failedToLoad)}"); - - bool SeenActivityDisplayed (string line) - { - var idx1 = line.IndexOf ("ActivityManager: Displayed", StringComparison.OrdinalIgnoreCase); - var idx2 = idx1 > 0 ? 0 : line.IndexOf ("ActivityTaskManager: Displayed", StringComparison.OrdinalIgnoreCase); - return (idx1 > 0 || idx2 > 0) && line.Contains (activityNamespace) && line.Contains (activityName); - } - - bool SeenFailedToLoad (string line) - { - return line.Contains ("Failed to load shared library"); - } - } - - [Test] - public void SingleProject_ApplicationId ([Values] bool testOnly, [Values] AndroidRuntime runtime) + public void SingleProject_ApplicationId ([Values] bool testOnly, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1455,7 +1363,7 @@ public void SingleProject_ApplicationId ([Values] bool testOnly, [Values] Androi } [Test] - public void AppWithStyleableUsageRuns ([Values] bool isRelease, [Values] bool linkResources, [Values] bool useStringTypeMaps, [Values] AndroidRuntime runtime) + public void AppWithStyleableUsageRuns ([Values] bool isRelease, [Values] bool linkResources, [Values] bool useStringTypeMaps, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -1611,7 +1519,7 @@ public MyLayout (Android.Content.Context context, Android.Util.IAttributeSet att } [Test] - public void CheckXamarinFormsAppDeploysAndAButtonWorks ([Values] AndroidRuntime runtime) + public void CheckXamarinFormsAppDeploysAndAButtonWorks ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1650,7 +1558,7 @@ public void CheckXamarinFormsAppDeploysAndAButtonWorks ([Values] AndroidRuntime } [Test] - public void SkiaSharpCanvasBasedAppRuns ([Values] bool isRelease, [Values] bool addResource, [Values] AndroidRuntime runtime) + public void SkiaSharpCanvasBasedAppRuns ([Values] bool isRelease, [Values] bool addResource, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -1771,7 +1679,7 @@ private void OnPaintSurface(object sender, SKPaintSurfaceEventArgs e) [Test] - public void CheckResouceIsOverridden ([Values] AndroidRuntime runtime) + public void CheckResouceIsOverridden ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -1878,7 +1786,7 @@ public void CheckResouceIsOverridden ([Values] AndroidRuntime runtime) [Test] public void DotNetInstallAndRunPreviousSdk ( [Values] bool isRelease, - [Values] AndroidRuntime runtime) + [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -1962,7 +1870,7 @@ public void DotNetInstallAndRunPreviewAPILevels ( public void DotNetInstallAndRunMinorAPILevels ( [Values] bool isRelease, [Values ("net10.0-android36.1")] string targetFramework, - [Values] AndroidRuntime runtime) + [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -2026,7 +1934,7 @@ public MyTextObjectFont (PdfPageTextObjectFont font) : base (font) } [Test] - public void TypeAndMemberRemapping ([Values] bool isRelease, [Values] AndroidRuntime runtime) + public void TypeAndMemberRemapping ([Values] bool isRelease, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -2077,7 +1985,7 @@ public void TypeAndMemberRemapping ([Values] bool isRelease, [Values] AndroidRun } [Test] - public void SupportDesugaringStaticInterfaceMethods ([Values] AndroidRuntime runtime) + public void SupportDesugaringStaticInterfaceMethods ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -2130,7 +2038,7 @@ public void SupportDesugaringStaticInterfaceMethods ([Values] AndroidRuntime run } [Test] - public void FastDeployEnvironmentFiles ([Values] bool isRelease, [Values] bool embedAssembliesIntoApk, [Values] AndroidRuntime runtime) + public void FastDeployEnvironmentFiles ([Values] bool isRelease, [Values] bool embedAssembliesIntoApk, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -2262,7 +2170,7 @@ public void DotNetRunEnvironmentVariables () } [Test] - public void FixLegacyResourceDesignerStep ([Values] bool isRelease, [Values] AndroidRuntime runtime) + public void FixLegacyResourceDesignerStep ([Values] bool isRelease, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -2321,7 +2229,7 @@ public void FixLegacyResourceDesignerStep ([Values] bool isRelease, [Values] And } [Test] - public void MicrosoftIntune ([Values] bool isRelease, [Values] AndroidRuntime runtime) + public void MicrosoftIntune ([Values] bool isRelease, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { Assert.Ignore ("https://github.com/xamarin/xamarin-android/issues/8548"); if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -2361,7 +2269,7 @@ public void MicrosoftIntune ([Values] bool isRelease, [Values] AndroidRuntime ru } [Test] - public void GradleFBProj ([Values] bool isRelease, [Values] AndroidRuntime runtime) + public void GradleFBProj ([Values] bool isRelease, [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { return; @@ -2513,7 +2421,7 @@ public void NativeAOTSample () } [Test] - public void AppStartsWithManagedMarshalMethodsLookupEnabled ([Values] AndroidRuntime runtime) + public void AppStartsWithManagedMarshalMethodsLookupEnabled ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { @@ -2561,9 +2469,7 @@ public void StartAndroidActivityRespectsAndroidDeviceUserId () } [Test] - [TestCase ("run", AndroidRuntime.MonoVM)] [TestCase ("run", AndroidRuntime.CoreCLR)] - [TestCase ("test", AndroidRuntime.MonoVM)] [TestCase ("test", AndroidRuntime.CoreCLR)] public void DotNetNewAndroidTest (string mode, AndroidRuntime runtime) { diff --git a/tests/MSBuildDeviceIntegration/Tests/InstallTests.cs b/tests/MSBuildDeviceIntegration/Tests/InstallTests.cs index 0fa2694c376..eeff610e712 100644 --- a/tests/MSBuildDeviceIntegration/Tests/InstallTests.cs +++ b/tests/MSBuildDeviceIntegration/Tests/InstallTests.cs @@ -157,7 +157,7 @@ public void SwitchConfigurationsShouldRedeploy () } [Test] - public void InstallWithoutSharedRuntime ([Values (AndroidRuntime.MonoVM, AndroidRuntime.CoreCLR)] AndroidRuntime runtimeType) + public void InstallWithoutSharedRuntime ([Values (AndroidRuntime.CoreCLR)] AndroidRuntime runtimeType) { var proj = new XamarinAndroidApplicationProject () { IsRelease = true, @@ -212,8 +212,6 @@ public void InstallErrorCode () var proj = new XamarinAndroidApplicationProject { EmbedAssembliesIntoApk = true, }; - // MonoVM-only test - proj.SetRuntime (Android.Tasks.AndroidRuntime.MonoVM); proj.SetRuntimeIdentifiers (new[] { abi }); using (var builder = CreateApkBuilder ()) { @@ -305,31 +303,6 @@ public void ToggleDebugReleaseWithSigning ([Values ("aab", "apk")] string packag } } - [Test] - public void LoggingPropsShouldCreateOverrideDirForRelease () - { - var proj = new XamarinAndroidApplicationProject { - IsRelease = true, - }; - // MonoVM-only test - proj.SetRuntime (Android.Tasks.AndroidRuntime.MonoVM); - // Set debuggable=true to allow run-as command usage with a release build - proj.AndroidManifest = proj.AndroidManifest.Replace (" Get_Fixture_Args () { var ret = new List (); - foreach (AndroidRuntime runtime in Enum.GetValues (typeof (AndroidRuntime))) { + foreach (AndroidRuntime runtime in new[] { AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT }) { ret.Add (new object[] { runtime }); } diff --git a/tests/MSBuildDeviceIntegration/Tests/MarshalMethodsGCHangTests.cs b/tests/MSBuildDeviceIntegration/Tests/MarshalMethodsGCHangTests.cs index 299347d054a..82891bab472 100644 --- a/tests/MSBuildDeviceIntegration/Tests/MarshalMethodsGCHangTests.cs +++ b/tests/MSBuildDeviceIntegration/Tests/MarshalMethodsGCHangTests.cs @@ -84,7 +84,7 @@ public override void Close () "; [Test] - public void MarshalMethodsAppRuns ([Values] AndroidRuntime runtime) + public void MarshalMethodsAppRuns ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = true; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { diff --git a/tests/MSBuildDeviceIntegration/Tests/MonoAndroidExportTest.cs b/tests/MSBuildDeviceIntegration/Tests/MonoAndroidExportTest.cs index 4d61be823d3..bcf142ef9f5 100644 --- a/tests/MSBuildDeviceIntegration/Tests/MonoAndroidExportTest.cs +++ b/tests/MSBuildDeviceIntegration/Tests/MonoAndroidExportTest.cs @@ -20,7 +20,7 @@ public class MonoAndroidExportTest : DeviceTest public void MonoAndroidExportReferencedAppStarts ( [Values] bool embedAssemblies, [Values] bool isRelease, - [Values] AndroidRuntime runtime) + [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (runtime == AndroidRuntime.NativeAOT) { Assert.Ignore ("NativeAOT does not support Mono.Android.Export"); @@ -109,7 +109,7 @@ protected override void OnCreate (Bundle bundle) [Test] public void ExportedMembersSurviveGarbageCollection ( [Values] bool isRelease, - [Values] AndroidRuntime runtime) + [Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { if (runtime == AndroidRuntime.NativeAOT) { Assert.Ignore ("NativeAOT does not support Mono.Android.Export"); diff --git a/tests/MSBuildDeviceIntegration/Tests/PerformanceTest.cs b/tests/MSBuildDeviceIntegration/Tests/PerformanceTest.cs index 915cbf9c57c..608dae19fd2 100644 --- a/tests/MSBuildDeviceIntegration/Tests/PerformanceTest.cs +++ b/tests/MSBuildDeviceIntegration/Tests/PerformanceTest.cs @@ -159,8 +159,6 @@ XamarinAndroidApplicationProject CreateApplicationProject () { var proj = new XamarinAndroidApplicationProject () { }; - // TODO: update times for CoreCLR in the future - proj.SetRuntime (Android.Tasks.AndroidRuntime.MonoVM); proj.SetRuntimeIdentifiers (new[] { DeviceAbi }); // Use a single ABI proj.SetProperty ("_FastDeploymentDiagnosticLogging", "False"); return proj; diff --git a/tests/MSBuildDeviceIntegration/Tests/SystemApplicationTests.cs b/tests/MSBuildDeviceIntegration/Tests/SystemApplicationTests.cs index 46d12ffe8eb..9bde7e63e83 100644 --- a/tests/MSBuildDeviceIntegration/Tests/SystemApplicationTests.cs +++ b/tests/MSBuildDeviceIntegration/Tests/SystemApplicationTests.cs @@ -17,7 +17,7 @@ public class SystemApplicationTests : DeviceTest { // All Tests here require the emulator to be started with -writable-system [Test, Category ("SystemApplication")] - public void SystemApplicationCanInstall ([Values] AndroidRuntime runtime) + public void SystemApplicationCanInstall ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { const bool isRelease = false; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { diff --git a/tests/MSBuildDeviceIntegration/Tests/TimeZoneInfoTests.cs b/tests/MSBuildDeviceIntegration/Tests/TimeZoneInfoTests.cs index ac934888791..33417011dcb 100644 --- a/tests/MSBuildDeviceIntegration/Tests/TimeZoneInfoTests.cs +++ b/tests/MSBuildDeviceIntegration/Tests/TimeZoneInfoTests.cs @@ -25,7 +25,7 @@ static IEnumerable Get_Fixture_Args () { var ret = new List (); - foreach (AndroidRuntime runtime in Enum.GetValues (typeof (AndroidRuntime))) { + foreach (AndroidRuntime runtime in new[] { AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT }) { ret.Add (new object[] { runtime }); } diff --git a/tests/MSBuildDeviceIntegration/Tests/UncaughtExceptionTests.cs b/tests/MSBuildDeviceIntegration/Tests/UncaughtExceptionTests.cs index 8b56eb48056..5cc02823946 100644 --- a/tests/MSBuildDeviceIntegration/Tests/UncaughtExceptionTests.cs +++ b/tests/MSBuildDeviceIntegration/Tests/UncaughtExceptionTests.cs @@ -21,7 +21,7 @@ class LogcatLine }; [Test] - public void EnsureUncaughtExceptionWorks ([Values] AndroidRuntime runtime) + public void EnsureUncaughtExceptionWorks ([Values (AndroidRuntime.CoreCLR, AndroidRuntime.NativeAOT)] AndroidRuntime runtime) { bool isRelease = runtime == AndroidRuntime.NativeAOT; if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) {