maui-linux/Xamarin.Forms.Core.UnitTests/DataTriggerTests.cs

160 строки
4.6 KiB
C#

using NUnit.Framework;
using System.Threading.Tasks;
namespace Xamarin.Forms.Core.UnitTests
{
[TestFixture]
public class DataTriggerTests : BaseTestFixture
{
[SetUp]
public override void Setup()
{
Device.PlatformServices = new MockPlatformServices();
base.Setup();
}
[TearDown]
public override void TearDown()
{
base.TearDown();
Device.PlatformServices = null;
}
class MockElement : VisualElement
{
}
[Test]
public void SettersAppliedOnAttachIfConditionIsTrue ()
{
var setterbp = BindableProperty.Create ("bar", typeof(string), typeof(BindableObject), null);
var element = new MockElement ();
var datatrigger = new DataTrigger (typeof(VisualElement)) {
Binding = new Binding ("foo"),
Value = "foobar",
Setters = {
new Setter { Property = setterbp, Value = "qux" },
}
};
element.SetValue (setterbp, "default");
element.BindingContext = new {foo = "foobar"};
Assert.AreEqual ("default", element.GetValue (setterbp));
element.Triggers.Add (datatrigger);
Assert.AreEqual ("qux", element.GetValue (setterbp));
}
[Test]
public void SettersUnappliedOnDetach ()
{
var setterbp = BindableProperty.Create ("bar", typeof(string), typeof(BindableObject), null);
var element = new MockElement ();
var datatrigger = new DataTrigger (typeof(VisualElement)) {
Binding = new Binding ("foo"),
Value = "foobar",
Setters = {
new Setter { Property = setterbp, Value = "qux" },
}
};
element.SetValue (setterbp, "default");
element.Triggers.Add (datatrigger);
Assert.AreEqual ("default", element.GetValue (setterbp));
element.BindingContext = new {foo = "foobar"};
Assert.AreEqual ("qux", element.GetValue (setterbp));
element.Triggers.Remove (datatrigger);
Assert.AreEqual ("default", element.GetValue (setterbp));
}
[Test]
public void SettersAppliedOnConditionChanged ()
{
var setterbp = BindableProperty.Create ("bar", typeof(string), typeof(BindableObject), null);
var element = new MockElement ();
var trigger = new DataTrigger (typeof (VisualElement)){
Binding = new Binding ("foo"),
Value = "foobar",
Setters = {
new Setter { Property = setterbp, Value = "qux" },
}
};
element.SetValue (setterbp, "default");
element.Triggers.Add (trigger);
Assert.AreEqual ("default", element.GetValue (setterbp));
element.BindingContext = new {foo = "foobar"};
Assert.AreEqual ("qux", element.GetValue (setterbp));
element.BindingContext = new {foo = ""};
Assert.AreEqual ("default", element.GetValue (setterbp));
}
[Test]
public void TriggersAppliedOnMultipleElements ()
{
var setterbp = BindableProperty.Create ("bar", typeof(string), typeof(BindableObject), null);
var trigger = new DataTrigger (typeof(VisualElement)) {
Binding = new Binding ("foo"),
Value = "foobar",
Setters = {
new Setter { Property = setterbp, Value = "qux" },
}
};
var element0 = new MockElement { Triggers = { trigger } };
var element1 = new MockElement { Triggers = { trigger } };
element0.BindingContext = element1.BindingContext = new {foo = "foobar"};
Assert.AreEqual ("qux", element0.GetValue (setterbp));
Assert.AreEqual ("qux", element1.GetValue (setterbp));
}
[Test]
//https://bugzilla.xamarin.com/show_bug.cgi?id=30074
public void AllTriggersUnappliedBeforeApplying ()
{
var boxview = new BoxView {
Triggers = {
new DataTrigger (typeof(BoxView)) {
Binding = new Binding ("."),
Value = "Complete",
Setters = {
new Setter { Property = BoxView.ColorProperty, Value = Color.Green },
new Setter { Property = VisualElement.OpacityProperty, Value = .5 },
}
},
new DataTrigger (typeof(BoxView)) {
Binding = new Binding ("."),
Value = "MissingInfo",
Setters = {
new Setter { Property = BoxView.ColorProperty, Value = Color.Yellow },
}
},
new DataTrigger (typeof(BoxView)) {
Binding = new Binding ("."),
Value = "Error",
Setters = {
new Setter { Property = BoxView.ColorProperty, Value = Color.Red },
}
},
}
};
boxview.BindingContext = "Complete";
Assert.AreEqual (Color.Green, boxview.Color);
Assert.AreEqual (.5, boxview.Opacity);
boxview.BindingContext = "MissingInfo";
Assert.AreEqual (Color.Yellow, boxview.Color);
Assert.AreEqual (1, boxview.Opacity);
boxview.BindingContext = "Error";
Assert.AreEqual (Color.Red, boxview.Color);
Assert.AreEqual (1, boxview.Opacity);
boxview.BindingContext = "Complete";
Assert.AreEqual (Color.Green, boxview.Color);
Assert.AreEqual (.5, boxview.Opacity);
}
}
}