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

148 строки
5.2 KiB
C#

using NUnit.Framework;
namespace Xamarin.Forms.Core.UnitTests
{
[TestFixture]
public class MultiTriggerTests : 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 conditionbp = BindableProperty.Create ("foo", typeof(string), typeof(BindableObject), null);
var setterbp = BindableProperty.Create ("bar", typeof(string), typeof(BindableObject), null);
var element = new MockElement ();
var multiTrigger = new MultiTrigger (typeof(VisualElement)) {
Conditions = {
new PropertyCondition { Property = conditionbp, Value = "foobar" },
new BindingCondition { Binding = new Binding ("baz"), Value = "foobaz" },
},
Setters = {
new Setter { Property = setterbp, Value = "qux" },
}
};
element.SetValue (setterbp, "default");
element.SetValue (conditionbp, "foobar");
element.BindingContext = new {baz = "foobaz"};
Assert.AreEqual ("default", element.GetValue (setterbp));
element.Triggers.Add (multiTrigger);
Assert.AreEqual ("qux", element.GetValue (setterbp));
}
[Test]
public void SettersNotAppliedOnAttachIfOneConditionIsFalse ()
{
var conditionbp = BindableProperty.Create ("foo", typeof(string), typeof(BindableObject), null);
var setterbp = BindableProperty.Create ("bar", typeof(string), typeof(BindableObject), null);
var element = new MockElement ();
var multiTrigger = new MultiTrigger (typeof(VisualElement)) {
Conditions = {
new PropertyCondition { Property = conditionbp, Value = "foobar" },
new BindingCondition { Binding = new Binding ("baz"), Value = "foobaz" },
},
Setters = {
new Setter { Property = setterbp, Value = "qux" },
}
};
element.SetValue (setterbp, "default");
element.SetValue (conditionbp, "foobar");
element.BindingContext = new {baz = "foobazXX"};
Assert.AreEqual ("default", element.GetValue (setterbp));
element.Triggers.Add (multiTrigger);
Assert.AreEqual ("default", element.GetValue (setterbp));
}
[Test]
public void SettersUnappliedOnDetach ()
{
var conditionbp = BindableProperty.Create ("foo", typeof(string), typeof(BindableObject), null);
var setterbp = BindableProperty.Create ("bar", typeof(string), typeof(BindableObject), null);
var element = new MockElement ();
var multiTrigger = new MultiTrigger (typeof(VisualElement)) {
Conditions = {
new PropertyCondition { Property = conditionbp, Value = "foobar" },
new BindingCondition { Binding = new Binding ("baz"), Value = "foobaz" },
},
Setters = {
new Setter { Property = setterbp, Value = "qux" },
}
};
element.SetValue (setterbp, "default");
element.BindingContext = new {baz = "" };
element.Triggers.Add (multiTrigger);
Assert.AreEqual ("default", element.GetValue (setterbp)); //both conditions false
element.SetValue (conditionbp, "foobar");
Assert.AreEqual ("default", element.GetValue (setterbp)); //one condition false
element.BindingContext = new {baz = "foobaz"};
Assert.AreEqual ("qux", element.GetValue (setterbp)); //both condition true
element.Triggers.Remove (multiTrigger);
Assert.AreEqual ("default", element.GetValue (setterbp));
}
[Test]
public void SettersAppliedAndUnappliedOnConditionsChange ()
{
var conditionbp = BindableProperty.Create ("foo", typeof(string), typeof(BindableObject), null);
var setterbp = BindableProperty.Create ("bar", typeof(string), typeof(BindableObject), null);
var element = new MockElement ();
var multiTrigger = new MultiTrigger (typeof(VisualElement)) {
Conditions = {
new PropertyCondition { Property = conditionbp, Value = "foobar" },
new BindingCondition { Binding = new Binding ("baz"), Value = "foobaz" },
},
Setters = {
new Setter { Property = setterbp, Value = "qux" },
}
};
element.SetValue (setterbp, "default");
element.BindingContext = new {baz = "" };
element.Triggers.Add (multiTrigger);
Assert.AreEqual ("default", element.GetValue (setterbp)); //both conditions false
element.SetValue (conditionbp, "foobar");
Assert.AreEqual ("default", element.GetValue (setterbp)); //one condition false
element.BindingContext = new {baz = "foobaz"};
Assert.AreEqual ("qux", element.GetValue (setterbp)); //both condition true
element.BindingContext = new {baz = ""};
Assert.AreEqual ("default", element.GetValue (setterbp)); //one condition false
element.BindingContext = new {baz = "foobaz"};
Assert.AreEqual ("qux", element.GetValue (setterbp)); //both condition true
element.SetValue (conditionbp, "");
Assert.AreEqual ("default", element.GetValue (setterbp)); //one condition false
element.SetValue (conditionbp, "foobar");
Assert.AreEqual ("qux", element.GetValue (setterbp)); //both condition true
element.SetValue (conditionbp, "");
element.BindingContext = new {baz = "foobaz"};
Assert.AreEqual ("default", element.GetValue (setterbp)); //both conditions false
}
}
}