summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue892.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue892.cs')
-rw-r--r--Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue892.cs224
1 files changed, 224 insertions, 0 deletions
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue892.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue892.cs
new file mode 100644
index 00000000..eb93bc82
--- /dev/null
+++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue892.cs
@@ -0,0 +1,224 @@
+using System.Diagnostics;
+
+using Xamarin.Forms.CustomAttributes;
+
+#if UITEST
+using NUnit.Framework;
+using Xamarin.UITest;
+#endif
+
+namespace Xamarin.Forms.Controls
+{
+
+ public class NavPageNameObject
+ {
+ public string PageName { get; private set; }
+
+ public NavPageNameObject (string pageName)
+ {
+ PageName = pageName;
+ }
+ }
+
+ [Preserve (AllMembers=true)]
+ [Issue (IssueTracker.Github, 892, "NavigationPages as details in MasterDetailPage don't work as expected", PlatformAffected.Android)]
+ public class Issue892 : TestMasterDetailPage
+ {
+ protected override void Init ()
+ {
+ var cells = new [] {
+ new NavPageNameObject ("Close Master"),
+ new NavPageNameObject ("Page 1"),
+ new NavPageNameObject ("Page 3"),
+ new NavPageNameObject ("Page 4"),
+ new NavPageNameObject ("Page 5"),
+ new NavPageNameObject ("Page 6"),
+ new NavPageNameObject ("Page 7"),
+ new NavPageNameObject ("Page 8"),
+ };
+
+ var template = new DataTemplate (typeof (TextCell));
+ template.SetBinding (TextCell.TextProperty, "PageName");
+
+ var listView = new ListView {
+ ItemTemplate = template,
+ ItemsSource = cells
+ };
+
+ listView.BindingContext = cells;
+
+ listView.ItemTapped += (sender, e) => {
+ var cellName = ((NavPageNameObject)e.Item).PageName;
+ if (cellName == "Close Master") {
+ IsPresented = false;
+ } else {
+ Detail = new CustomNavDetailPage (cellName);
+ }
+ };
+
+ var master = new ContentPage {
+ Padding = new Thickness(0, 20, 0, 0),
+ Title = "Master",
+ Content = listView
+ };
+
+ Master = master;
+ Detail = new CustomNavDetailPage ("Initial Page");
+
+ MessagingCenter.Subscribe<NestedNavPageRootView> (this, "PresentMaster", (sender) => {
+ IsPresented = true;
+ });
+ }
+
+ // Issue892
+ // NavigationPage nested in MasterDetail not working as expected Android
+
+#if UITEST
+ [Test]
+ [Description ("Change pages in the Master ListView, and navigate to the end and back")]
+ [UiTest (typeof(MasterDetailPage))]
+ [UiTest (typeof(NavigationPage))]
+ public void Issue892TestsNavigateChangePagesNavigate ()
+ {
+ NavigateToEndAndBack ();
+
+ RunningApp.Tap (q => q.Marked ("Present Master"));
+
+ RunningApp.Tap (q => q.Marked ("Page 5"));
+
+ RunningApp.Tap (q => q.Marked ("Close Master"));
+
+ RunningApp.Screenshot ("Select new detail navigation");
+
+ NavigateToEndAndBack ();
+ }
+
+ void NavigateToEndAndBack ()
+ {
+ RunningApp.WaitForElement (q => q.Button ("Push next page")); // still required on iOS
+ RunningApp.Tap (q => q.Marked ("Push next page"));
+ RunningApp.Screenshot ("Pushed first page");
+
+ RunningApp.WaitForElement (q => q.Button ("Push next next page")); // still required on iOS
+ RunningApp.Tap (q => q.Marked ("Push next next page"));
+ RunningApp.Screenshot ("Pushed second page");
+
+ RunningApp.WaitForElement (q => q.Marked ("You are at the end of the line"));
+ RunningApp.Screenshot ("Pushed last page");
+
+ RunningApp.Tap (q => q.Marked ("Check back one"));
+ RunningApp.WaitForElement (q => q.Marked ("Pop one"));
+ RunningApp.Back ();
+ RunningApp.Screenshot ("Navigate Back");
+
+ RunningApp.Tap (q => q.Marked ("Check back two"));
+ RunningApp.WaitForElement (q => q.Marked ("Pop two"));
+ RunningApp.Back ();
+ RunningApp.Screenshot ("Navigate Back");
+
+ RunningApp.Tap (q => q.Marked ("Check back three"));
+ RunningApp.WaitForElement (q => q.Marked ("At root"));
+ RunningApp.Screenshot ("At root");
+ }
+#endif
+
+ }
+
+ public class CustomNavDetailPage : NavigationPage
+ {
+ public CustomNavDetailPage (string pageName)
+ {
+ PushAsync (new NestedNavPageRootView (pageName));
+ }
+ }
+
+ public class NestedNavPageRootView : ContentPage
+ {
+ public NestedNavPageRootView (string pageTitle)
+ {
+ Title = pageTitle;
+ BackgroundColor = Color.FromHex("#666");
+
+ var label = new Label {
+ Text = "Not Tapped"
+ };
+
+ Content = new StackLayout {
+ Children = {
+ label,
+ new Button {
+ Text = "Check back three",
+ Command = new Command (() => { label.Text = "At root"; })
+ },
+ new Button {
+ Text = "Push next page",
+ Command = new Command (() => Navigation.PushAsync (new NestedNavPageOneLevel ()))
+ },
+ new Button {
+ Text = "Present Master",
+ Command = new Command (() => {
+ MessagingCenter.Send<NestedNavPageRootView> (this, "PresentMaster");
+ })
+ }
+ }
+ };
+ }
+ }
+
+ public class NestedNavPageOneLevel : ContentPage
+ {
+ public NestedNavPageOneLevel ()
+ {
+ Title = "One pushed";
+ BackgroundColor = Color.FromHex("#999");
+
+ var label = new Label {
+ Text = "Not Tapped"
+ };
+
+ Content = new StackLayout {
+ Children = {
+ label,
+ new Button {
+ Text = "Check back two",
+ Command = new Command (() => { label.Text = "Pop two"; })
+ },
+ new Button {
+ Text = "Push next next page",
+ Command = new Command (() => Navigation.PushAsync (new NestedNavPageTwoLevels ()))
+ }
+ }
+ };
+ }
+ }
+
+ public class NestedNavPageTwoLevels : ContentPage
+ {
+ public NestedNavPageTwoLevels ()
+ {
+ Title = "Two pushed";
+ BackgroundColor = Color.FromHex("#BBB");
+
+ var label = new Label {
+ Text = "Not Tapped",
+ TextColor = Color.Red
+ };
+
+ var label2 = new Label {
+ Text = "You are at the end of the line",
+ TextColor = Color.Red
+ };
+
+ Content = new StackLayout {
+ Children = {
+ label,
+ label2,
+ new Button {
+ Text = "Check back one",
+ Command = new Command (() => { label.Text = "Pop one"; })
+ },
+ }
+ };
+ }
+ }
+}