summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Core.UnitTests/MultiTriggerTests.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Xamarin.Forms.Core.UnitTests/MultiTriggerTests.cs')
-rw-r--r--Xamarin.Forms.Core.UnitTests/MultiTriggerTests.cs134
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