maui-linux/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issu.../Bugzilla31255.cs

92 строки
2.0 KiB
C#

using System;
using Xamarin.Forms.CustomAttributes;
using System.Threading.Tasks;
using Xamarin.Forms.Internals;
#if UITEST
using Xamarin.UITest;
using NUnit.Framework;
#endif
namespace Xamarin.Forms.Controls.Issues
{
[Preserve (AllMembers = true)]
[Issue (IssueTracker.Bugzilla, 31255, "Master's page Icon cause memory leak after MasterDetailPage is popped out by holding on page")]
public class Bugzilla31255 : TestContentPage // or TestMasterDetailPage, etc ...
{
protected override void Init ()
{
var stack = new StackLayout () { VerticalOptions = LayoutOptions.Center };
stack.Children.Add (new Label () { VerticalOptions =
#pragma warning disable 618
LayoutOptions.Center, XAlign = TextAlignment.Center, Text = "Page 1"
#pragma warning restore 618
});
Content = stack;
}
WeakReference _page2Tracker;
protected override async void OnAppearing ()
{
base.OnAppearing ();
if (_page2Tracker == null) {
var page2 = new Page2 ();
_page2Tracker = new WeakReference (page2, false);
await Task.Delay (1000);
await Navigation.PushModalAsync (page2);
StartTrackPage2 ();
}
}
async void StartTrackPage2 ()
{
while (true) {
((Label)((StackLayout)Content).Children [0]).Text =
string.Format ("Page1. But Page2 IsAlive = {0}", _page2Tracker.IsAlive);
await Task.Delay (1000);
GC.Collect ();
}
}
[Preserve (AllMembers = true)]
public class Page2 : MasterDetailPage
{
public Page2 ()
{
Master = new Page () { Title = "Master",
Icon = "Icon.png"
};
Detail = new Page () { Title = "Detail" };
}
protected override async void OnAppearing ()
{
base.OnAppearing ();
await Task.Delay (1000);
await Navigation.PopModalAsync ();
}
}
#if UITEST
[Test]
[Ignore("Fails intermittently on TestCloud")]
public async void Bugzilla31255Test ()
{
RunningApp.Screenshot ("I am at Bugzilla 31255");
await Task.Delay (5000);
RunningApp.WaitForElement (q => q.Marked ("Page1. But Page2 IsAlive = False"));
}
#endif
}
}