diff options
Diffstat (limited to 'Xamarin.Forms.Core.UnitTests/MultiTriggerTests.cs')
-rw-r--r-- | Xamarin.Forms.Core.UnitTests/MultiTriggerTests.cs | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/Xamarin.Forms.Core.UnitTests/MultiTriggerTests.cs b/Xamarin.Forms.Core.UnitTests/MultiTriggerTests.cs new file mode 100644 index 00000000..df253e76 --- /dev/null +++ b/Xamarin.Forms.Core.UnitTests/MultiTriggerTests.cs @@ -0,0 +1,134 @@ +using NUnit.Framework; + +namespace Xamarin.Forms.Core.UnitTests +{ + [TestFixture] + public class MultiTriggerTests : BaseTestFixture + { + 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 + } + } +}
\ No newline at end of file |