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

260 строки
5.3 KiB
C#

using System;
using Xamarin.Forms.CustomAttributes;
using System.Collections.Generic;
using System.Threading;
using Xamarin.Forms.Internals;
#if UITEST
using Xamarin.UITest;
using Xamarin.UITest.iOS;
using Xamarin.UITest.Android;
using NUnit.Framework;
#endif
namespace Xamarin.Forms.Controls.Issues
{
#if UITEST
[NUnit.Framework.Category(Core.UITests.UITestCategories.Github5000)]
#endif
[Preserve(AllMembers = true)]
[Issue(IssueTracker.Github, 2948, "MasterDetailPage Detail is interactive even when Master is open when in Landscape")]
public class Issue2948 : TestMasterDetailPage
{
static MasterDetailPage s_mdp;
protected override void Init()
{
s_mdp = this;
var menuPage = new MenuPage();
menuPage.Menu.ItemSelected += (sender, e) => NavigateTo(e.SelectedItem as MenuItem);
Master = menuPage;
Detail = new NavigationPage(new ContractsPage());
}
[Preserve(AllMembers = true)]
public class MenuListData : List<MenuItem>
{
public MenuListData()
{
Add(new MenuItem()
{
Title = "Contracts",
IconSource = "bank.png",
TargetType = typeof(ContractsPage)
});
Add(new MenuItem()
{
Title = "Leads",
IconSource = "bank.png",
TargetType = typeof(ContractsPage)
});
Add(new MenuItem()
{
Title = "Accounts",
IconSource = "bank.png",
TargetType = typeof(ContractsPage)
});
Add(new MenuItem()
{
Title = "Opportunities",
IconSource = "bank.png",
TargetType = typeof(ContractsPage)
});
}
}
[Preserve(AllMembers = true)]
public class ContractsPage : ContentPage
{
public ContractsPage()
{
Title = "Contracts";
IconImageSource = "bank.png";
var grid = new Grid();
grid.ColumnDefinitions.Add(new ColumnDefinition());
grid.ColumnDefinitions.Add(new ColumnDefinition());
var btn = new Button
{
HeightRequest = 300,
HorizontalOptions = LayoutOptions.End,
BackgroundColor = Color.Pink,
AutomationId = "btnOnDetail"
};
btn.Clicked += (object sender, EventArgs e) =>
{
DisplayAlert("Clicked", "I was clicked", "Ok");
};
Grid.SetColumn(btn, 1);
grid.Children.Add(btn);
var showMasterButton = new Button
{
AutomationId = "ShowMasterBtn",
Text = "Show Master"
};
showMasterButton.Clicked += (sender, e) =>
{
s_mdp.IsPresented = true;
};
Content = new ScrollView
{
Content = new StackLayout
{
Children = {
showMasterButton,
grid,
new BoxView {
HeightRequest = 100,
Color = Color.Red,
},
new BoxView {
HeightRequest = 200,
Color = Color.Green,
},
new BoxView {
HeightRequest = 300,
Color = Color.Red,
},
new BoxView {
HeightRequest = 400,
Color = Color.Green,
},
new BoxView {
HeightRequest = 500,
Color = Color.Red,
}
}
},
};
}
}
[Preserve(AllMembers = true)]
public class MenuListView : ListView
{
public MenuListView()
{
List<MenuItem> data = new MenuListData();
ItemsSource = data;
VerticalOptions = LayoutOptions.FillAndExpand;
BackgroundColor = Color.Transparent;
var cell = new DataTemplate(typeof(ImageCell));
cell.SetBinding(TextCell.TextProperty, "Title");
cell.SetBinding(ImageCell.ImageSourceProperty, "IconSource");
ItemTemplate = cell;
SelectedItem = data[0];
}
}
public class MenuPage : ContentPage
{
public ListView Menu { get; set; }
public MenuPage()
{
Title = "Menu";
BackgroundColor = Color.FromHex("333333");
Menu = new MenuListView();
var menuLabel = new ContentView
{
Padding = new Thickness(10, 36, 0, 5),
Content = new Label
{
TextColor = Color.FromHex("AAAAAA"),
Text = "MENU",
}
};
var layout = new StackLayout
{
Spacing = 0,
VerticalOptions = LayoutOptions.FillAndExpand
};
layout.Children.Add(menuLabel);
layout.Children.Add(Menu);
Content = layout;
}
}
void NavigateTo(MenuItem menu)
{
var displayPage = (Page)Activator.CreateInstance(menu.TargetType);
Detail = new NavigationPage(displayPage);
}
[Preserve(AllMembers = true)]
public class MenuItem
{
public string Title { get; set; }
public string IconSource { get; set; }
public Type TargetType { get; set; }
}
#if UITEST
[Test]
public void Issue2948Test()
{
RunningApp.Screenshot("I am at Issue 2948");
RunningApp.SetOrientationLandscape();
Thread.Sleep(5000);
if (ShouldRunTest())
{
OpenMDP();
var btns = RunningApp.Query(c => c.Marked("btnOnDetail"));
if (btns.Length > 0)
{
// on iOS the button could be out of screen
RunningApp.Tap(c => c.Marked("btnOnDetail"));
RunningApp.Screenshot("I in landscape and master is open");
}
RunningApp.WaitForNoElement(c => c.Marked("Clicked"), "Time out", new TimeSpan(0, 0, 1));
}
}
[TearDown]
public void TestTearDown()
{
RunningApp.SetOrientationPortrait();
}
public bool ShouldRunTest()
{
var isMasterVisible = RunningApp.Query(q => q.Marked("Leads")).Length > 0;
return !isMasterVisible;
}
public void OpenMDP()
{
#if __IOS__
RunningApp.Tap(q => q.Marked("Menu"));
#else
RunningApp.Tap ("ShowMasterBtn");
#endif
}
#endif
}
}