diff options
Diffstat (limited to 'Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla37462.cs')
-rw-r--r-- | Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla37462.cs | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla37462.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla37462.cs new file mode 100644 index 00000000..9eebae8b --- /dev/null +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla37462.cs @@ -0,0 +1,88 @@ +using System.Collections.Generic; +using System.Linq; +using Xamarin.Forms.CustomAttributes; + +#if UITEST +using Xamarin.UITest; +using NUnit.Framework; +#endif + + +namespace Xamarin.Forms.Controls +{ + [Preserve (AllMembers = true)] + [Issue (IssueTracker.Bugzilla, 37462, "Using App Compat/App Compat theme breaks Navigation.RemovePage on Android ",PlatformAffected.Android )] + public class Bugzilla37462 : TestNavigationPage + { + protected override void Init () + { + var page1 = new ContentPage { Title = "Page 1" }; + var button1 = new Button { Text = "Go To 2" }; + var label1 = new Label { Text = "This is a label on page 1" }; + page1.Content = new StackLayout { Children = { button1, label1 } }; + page1.Appearing += (sender, args) => { + page1.InvalidateMeasure (InvalidationTrigger.MeasureChanged); + }; + + var page2 = new ContentPage { Title = "Page 2" }; + var button2 = new Button { Text = "Go To 3" }; + var label2 = new Label { Text = "This is a label on page 2" }; + page2.Content = new StackLayout { Children = { button2, label2 } }; + + var page3 = new ContentPage { Title = "Page 3" }; + var button3 = new Button { Text = "Go To 4" }; + var label3 = new Label { Text = "This is a label on page 3" }; + page3.Content = new StackLayout { Children = { button3, label3 } }; + + var page4 = new ContentPage { Title = "Page 4" }; + var button4 = new Button { Text = "Back to 1" }; + var label4 = new Label { Text = "This is a label on page 4" }; + page4.Content = new StackLayout { Children = { button4, label4 } }; + + button1.Clicked += async (sender, args) => { await Navigation.PushAsync (page2); }; + button2.Clicked += async (sender, args) => { await Navigation.PushAsync (page3); }; + button3.Clicked += async (sender, args) => { await Navigation.PushAsync (page4); }; + + button4.Clicked += async (sender, args) => { + List<Page> existingPages = Navigation.NavigationStack.ToList (); + + // Clear all pages except current and home + foreach (Page page in existingPages) { + if (page.Title != "Page 1" && page.Title != "Page 4") { + Navigation.RemovePage (page); + } + } + + await Navigation.PopAsync (); + }; + + Navigation.PushAsync (page1); + } + +#if UITEST + [Test] + public void CanRemoveIntermediatePagesAndPopToFirstPage () + { + // Start at page 1 + RunningApp.WaitForElement ("Go To 2"); + RunningApp.WaitForElement ("This is a label on page 1"); + RunningApp.Tap ("Go To 2"); + + RunningApp.WaitForElement ("Go To 3"); + RunningApp.Tap ("Go To 3"); + + RunningApp.WaitForElement ("Go To 4"); + RunningApp.Tap ("Go To 4"); + + RunningApp.WaitForElement ("Back to 1"); + RunningApp.Tap ("Back to 1"); + + // Clicking "Back to 1" should remove pages 2 and 3 from the stack + // Then call PopAsync, which should return to page 1 + RunningApp.WaitForElement ("Go To 2"); + RunningApp.WaitForElement ("This is a label on page 1"); + } +#endif + + } +}
\ No newline at end of file |