public void BindingCurrentValue_UsingADot_WorksOnEveryBindingPath()
        {
            var value = new ComplicatedType();

            Element.SetTarget(value);
            Assert.That(Element.Q <ComplicatedTypeElement>(".").value, Is.EqualTo(value));
            Assert.That(Element.Q <Label>(".").text, Is.EqualTo(value.ToString()));
        }
        public void Bindings_WithAbsoluteAndRelativePaths_UpdatesValuesCorrectly(string path)
        {
            var value = new ComplicatedType
            {
                A      = 0, B = 1,
                Nested = new NestedType {
                    A = 2, B = 3, Nested = new SubNestedType {
                        A = 4, B = 5, Nested = 6
                    }
                }
            };

            Element.SetTarget(value);
            var values   = new float[] { 1, 2, 3, 4, 5 };
            var elements = Element.Query <FloatField>(path).ToList();

            foreach (var element in elements)
            {
                Assert.That(element.value,
                            Is.EqualTo(PropertyContainer.GetValue <ComplicatedType, float>(ref value, path)));
            }

            foreach (var element in elements)
            {
                foreach (var v in values)
                {
                    element.value = v;
                    UpdateBindables();
                    Assert.That(PropertyContainer.GetValue <ComplicatedType, float>(ref value, path), Is.EqualTo(v));
                }
            }

            foreach (var v in values)
            {
                PropertyContainer.SetValue(ref value, path, v);
                UpdateBindables();

                foreach (var element in elements)
                {
                    Assert.That(PropertyContainer.GetValue <ComplicatedType, float>(ref value, path),
                                Is.EqualTo(element.value));
                }
            }
        }