maui-linux/Xamarin.Forms.Pages.UnitTests/DataPageTests.cs

160 строки
3.9 KiB
C#

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NUnit.Framework;
using Xamarin.Forms.Core.UnitTests;
namespace Xamarin.Forms.Pages.UnitTests
{
[TestFixture]
public class DataPageTests
{
[SetUp]
public void Setup ()
{
Device.PlatformServices = new MockPlatformServices ();
}
[TearDown]
public void TearDown ()
{
Device.PlatformServices = null;
}
class TestDataPage : DataPage
{
public static readonly BindableProperty NameProperty =
BindableProperty.Create (nameof (Name), typeof (string), typeof (TestDataPage), null);
public string Name
{
get { return (string)GetValue (NameProperty); }
set { SetValue (NameProperty, value); }
}
public TestDataPage ()
{
SetBinding (NameProperty, new DataSourceBinding ("Name"));
}
}
class DataSource : BaseDataSource
{
ObservableCollection<IDataItem> data = new ObservableCollection<IDataItem> ();
protected override Task<IList<IDataItem>> GetRawData ()
{
return Task.FromResult<IList<IDataItem>> (data);
}
protected override object GetValue (string key)
{
var target = data.FirstOrDefault (d => d.Name == key);
if (target == null)
throw new KeyNotFoundException ();
return target.Value;
}
protected override bool SetValue (string key, object value)
{
var target = data.FirstOrDefault (d => d.Name == key);
if (target == null)
data.Add (new DataItem (key, value));
else if (target.Value == value)
return false;
else
target.Value = value;
return true;
}
}
[Test]
public void DefaultBindingsLoad ()
{
IDataSource dataSource = new DataSource ();
dataSource["Name"] = "Jason";
var detailpage = new TestDataPage ();
detailpage.DataSource = dataSource;
Assert.AreEqual ("Jason", detailpage.Name);
}
[Test]
public void RebindingDataSource ()
{
IDataSource dataSource = new DataSource ();
dataSource["UserName"] = "Jason";
var detailpage = new TestDataPage ();
detailpage.SetBinding (TestDataPage.NameProperty, new DataSourceBinding ("UserName"));
detailpage.DataSource = dataSource;
Assert.AreEqual ("Jason", detailpage.Name);
}
[Test]
public void RebindingDataSourceNotMasked ()
{
IDataSource dataSource = new DataSource ();
dataSource["UserName"] = "Jason";
var detailpage = new TestDataPage ();
detailpage.DataSource = dataSource;
detailpage.SetBinding (TestDataPage.NameProperty, new DataSourceBinding ("UserName"));
Assert.AreEqual ("Jason", detailpage.Name);
Assert.AreEqual (1, detailpage.DataSource.MaskedKeys.Count ());
}
[Test]
public void UpdateDataSource ()
{
IDataSource dataSource = new DataSource ();
dataSource["UserName"] = "Jason";
var detailpage = new TestDataPage ();
detailpage.SetBinding (TestDataPage.NameProperty, new DataSourceBinding ("UserName"));
detailpage.DataSource = dataSource;
dataSource["UserName"] = "Jerry";
Assert.AreEqual ("Jerry", detailpage.Name);
}
[Test]
public void MaskedItemsNotInData ()
{
IDataSource dataSource = new DataSource ();
dataSource["Name"] = "Jason";
dataSource["Other"] = "Foo";
var detailpage = new TestDataPage ();
detailpage.DataSource = dataSource;
Assert.AreEqual ("Jason", detailpage.Name);
Assert.AreEqual (1, detailpage.Data.Count ());
Assert.AreEqual ("Other", detailpage.Data.First ().Name);
}
[Test]
public void TwoWayDataSourceBinding ()
{
IDataSource dataSource = new DataSource ();
dataSource["UserName"] = "Jason";
var detailpage = new TestDataPage ();
detailpage.SetBinding (TestDataPage.NameProperty, new DataSourceBinding ("UserName", BindingMode.TwoWay));
detailpage.DataSource = dataSource;
((IElementController)detailpage).SetValueFromRenderer (TestDataPage.NameProperty, "John");
Assert.AreEqual ("John", dataSource["UserName"]);
}
}
}