Skip to content

Commit 6ece18b

Browse files
committed
AndroidAddKeepAlives works
1 parent de81217 commit 6ece18b

File tree

1 file changed

+51
-32
lines changed
  • src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks

1 file changed

+51
-32
lines changed

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/LinkerTests.cs

Lines changed: 51 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using System.Diagnostics;
34
using System.IO;
45
using System.Linq;
@@ -411,41 +412,58 @@ public AttributedButtonStub (Context context) : base (context)
411412
}
412413
}
413414

414-
static readonly object [] AndroidAddKeepAlivesSource = new object [] {
415-
// Debug configuration
416-
new object [] {
417-
/* isRelease */ false,
418-
/* AndroidAddKeepAlives=true */ false,
419-
/* AndroidLinkMode=None */ false,
420-
/* should add KeepAlives */ false,
421-
},
422-
// Debug configuration, AndroidAddKeepAlives=true
423-
new object [] {
424-
/* isRelease */ false,
425-
/* AndroidAddKeepAlives=true */ true,
426-
/* AndroidLinkMode=None */ false,
427-
/* should add KeepAlives */ true,
428-
},
429-
// Release configuration
430-
new object [] {
431-
/* isRelease */ true,
432-
/* AndroidAddKeepAlives=true */ false,
433-
/* AndroidLinkMode=None */ false,
434-
/* should add KeepAlives */ true,
435-
},
436-
// Release configuration, AndroidLinkMode=None
437-
new object [] {
438-
/* isRelease */ true,
439-
/* AndroidAddKeepAlives=true */ false,
440-
/* AndroidLinkMode=None */ true,
441-
/* should add KeepAlives */ true,
442-
},
443-
};
415+
static IEnumerable<object[]> Get_AndroidAddKeepAlivesData ()
416+
{
417+
var ret = new List<object[]> ();
418+
419+
foreach (AndroidRuntime runtime in new[] { AndroidRuntime.MonoVM, AndroidRuntime.CoreCLR }) {
420+
// Debug configuration
421+
AddTestData (isRelease: false, setAndroidAddKeepAlivesTrue: false, setLinkModeNone: false, shouldAddKeepAlives: false, runtime);
422+
423+
// Debug configuration, AndroidAddKeepAlives=true
424+
AddTestData (isRelease: false, setAndroidAddKeepAlivesTrue: true, setLinkModeNone: false, shouldAddKeepAlives: true, runtime);
425+
426+
// Release configuration
427+
AddTestData (isRelease: true, setAndroidAddKeepAlivesTrue: false, setLinkModeNone: false, shouldAddKeepAlives: true, runtime);
428+
429+
// Release configuration, AndroidLinkMode=None
430+
AddTestData (isRelease: true, setAndroidAddKeepAlivesTrue: false, setLinkModeNone: true, shouldAddKeepAlives: true, runtime);
431+
}
432+
433+
return ret;
434+
435+
void AddTestData (bool isRelease, bool setAndroidAddKeepAlivesTrue, bool setLinkModeNone, bool shouldAddKeepAlives, AndroidRuntime runtime)
436+
{
437+
ret.Add (new object[] {
438+
isRelease,
439+
setAndroidAddKeepAlivesTrue,
440+
setLinkModeNone,
441+
shouldAddKeepAlives,
442+
runtime
443+
});
444+
}
445+
}
444446

445447
[Test]
446-
[TestCaseSource (nameof (AndroidAddKeepAlivesSource))]
447-
public void AndroidAddKeepAlives (bool isRelease, bool setAndroidAddKeepAlivesTrue, bool setLinkModeNone, bool shouldAddKeepAlives)
448+
[TestCaseSource (nameof (Get_AndroidAddKeepAlivesData))]
449+
public void AndroidAddKeepAlives (bool isRelease, bool setAndroidAddKeepAlivesTrue, bool setLinkModeNone, bool shouldAddKeepAlives, AndroidRuntime runtime)
448450
{
451+
if (runtime == AndroidRuntime.CoreCLR && isRelease && !setAndroidAddKeepAlivesTrue && setLinkModeNone && shouldAddKeepAlives) {
452+
// This currently fails with the following exception:
453+
//
454+
// error XALNS7015: System.NotSupportedException: Writing mixed-mode assemblies is not supported
455+
// at Mono.Cecil.ModuleWriter.Write(ModuleDefinition module, Disposable`1 stream, WriterParameters parameters)
456+
// at Mono.Cecil.ModuleWriter.WriteModule(ModuleDefinition module, Disposable`1 stream, WriterParameters parameters)
457+
// at Mono.Cecil.ModuleDefinition.Write(String fileName, WriterParameters parameters)
458+
// at Mono.Cecil.AssemblyDefinition.Write(String fileName, WriterParameters parameters)
459+
// at Xamarin.Android.Tasks.SaveChangedAssemblyStep.ProcessAssembly(AssemblyDefinition assembly, StepContext context) in src/Xamarin.Android.Build.Tasks/Tasks/AssemblyModifierPipeline.cs:line 197
460+
// at Xamarin.Android.Tasks.AssemblyPipeline.Run(AssemblyDefinition assembly, StepContext context) in src/Xamarin.Android.Build.Tasks/Utilities/AssemblyPipeline.cs:line 26
461+
// at Xamarin.Android.Tasks.AssemblyModifierPipeline.RunPipeline(AssemblyPipeline pipeline, ITaskItem source, ITaskItem destination) in src/Xamarin.Android.Build.Tasks/Tasks/AssemblyModifierPipeline.cs:line 175
462+
// at Xamarin.Android.Tasks.AssemblyModifierPipeline.RunTask() in src/Xamarin.Android.Build.Tasks/Tasks/AssemblyModifierPipeline.cs:line 123
463+
Assert.Ignore ("CoreCLR: fails because of a Mono.Cecil lack of support");
464+
return;
465+
};
466+
449467
var proj = new XamarinAndroidApplicationProject {
450468
IsRelease = isRelease,
451469
OtherBuildItems = {
@@ -475,6 +493,7 @@ public unsafe bool MyMethod (Android.OS.IBinder windowToken, [global::Android.Ru
475493
}
476494
};
477495

496+
proj.SetRuntime (runtime);
478497
proj.SetProperty ("AllowUnsafeBlocks", "True");
479498

480499
// We don't want `[TargetPlatform ("android35")]` to get set because we don't do AddKeepAlives on .NET for Android assemblies

0 commit comments

Comments
 (0)