Пример #1
0
        public void WhenValueProviderPropertyChanged_ThenBindingRaisesChanged()
        {
            var raised   = false;
            var property = new PropertyBindingSettings();
            var binding  = new BindingSettings
            {
                Properties =
                {
                    new PropertyBindingSettings
                    {
                        ValueProvider = new ValueProviderBindingSettings
                        {
                            Properties =
                            {
                                property,
                            }
                        }
                    }
                }
            };

            binding.PropertyChanged += (sender, args) => raised = true;

            property.Value = "foo";

            Assert.True(raised);
        }
        public void WhenNoValueProviderExists_ThenReturnsBindingValue()
        {
            var settings = new PropertyBindingSettings {
                Value = "Foo"
            };

            Assert.Equal("Foo", settings.Evaluate(this.bindingFactory, this.tracer));
        }
Пример #3
0
        private static void AddPropertySettings(XElement cmdPropsElement, IList <IPropertyBindingSettings> bindings, XElement propSettingElement, IList <XElement> processedPropertySettings)
        {
            // Create a PropertyBindingSettings from the <PropertySettings> element.
            if (propSettingElement.Attributes().Any(a => a.Name == PropertySettingsNameName))
            {
                var binding = new PropertyBindingSettings
                {
                    Name  = TrimName(propSettingElement.Attribute(PropertySettingsNameName).Value),
                    Value = propSettingElement.Attributes().Any(a => a.Name == PropertySettingsValueName)
                            ? DecodeValue(propSettingElement.Attribute(PropertySettingsValueName).Value)
                            : null,
                };

                // Determine if has a ValueProvider
                var valueProviderElement = propSettingElement.Descendants(ValueProviderElementName)
                                           .FirstOrDefault();
                if (valueProviderElement != null)
                {
                    var valueProviderSettingsElement = valueProviderElement.Descendants(ValueProviderSettingElementName)
                                                       .FirstOrDefault();
                    if (valueProviderSettingsElement != null)
                    {
                        if (valueProviderSettingsElement.Attributes().Any(a => a.Name == ValueProviderSettingsIdName))
                        {
                            var vpBinding = new ValueProviderBindingSettings
                            {
                                TypeId = valueProviderSettingsElement.Attribute(ValueProviderSettingsTypeIdName).Value,
                            };

                            // Determine if the ValueProvider has nested <propertySettings> elements
                            var propSettingsMonikers = valueProviderSettingsElement.Descendants(PropertySettingMonikerElementName);
                            if (propSettingsMonikers.Any())
                            {
                                // Match each nested <propertySettings> element, which should be linked to <commandSettings><properties>
                                propSettingsMonikers.ForEach(psm =>
                                {
                                    var psmId          = psm.Attribute(PropertySettingsMonikerIdName).Value;
                                    var vpPropSettings = cmdPropsElement.Descendants(PropertySettingsElementName)
                                                         .FirstOrDefault(pse => pse.Attribute(PropertySettingsIdName).Value == psmId);
                                    if (vpPropSettings != null)
                                    {
                                        // Cache <propertySetting> element
                                        processedPropertySettings.Add(vpPropSettings);

                                        // Create Bindings
                                        AddPropertySettings(cmdPropsElement, vpBinding.Properties, vpPropSettings, processedPropertySettings);
                                    }
                                });
                            }

                            binding.ValueProvider = vpBinding;
                        }
                    }
                }

                bindings.Add(binding);
            }
        }
        public void WhenValueProviderExists_ThenEvaluatesItsValue()
        {
            var settings = new PropertyBindingSettings {
                ValueProvider = new ValueProviderBindingSettings {
                }
            };

            Assert.Equal("Foo", settings.Evaluate(this.bindingFactory, this.tracer));
        }
        public void WhenContextInitializerNotNull_ThenInvokesItOnEvaluation()
        {
            var settings = new PropertyBindingSettings {
                ValueProvider = new ValueProviderBindingSettings {
                }
            };
            bool invoked = false;

            settings.Evaluate(this.bindingFactory, this.tracer, c => invoked = true);

            Assert.True(invoked);
        }
            public void WhenDefaultValueHasOnlyValue_ThenValidateDefaultValueHasBothValueOrValueProviderSucceeds()
            {
                PropertyBindingSettings propertyBindings = new PropertyBindingSettings();

                propertyBindings.Value = "Foo";

                this.store.TransactionManager.DoWithinTransaction(() =>
                {
                    this.property.DefaultValue = propertyBindings;
                });
                this.property.ValidateDefaultValueHasValueOrValueProvider(validationContext);

                Assert.True(validationContext.CurrentViolations.Count == 0);
            }
Пример #7
0
        public void WhenPropertyValueProviderSet_ThenBindingRaisesChanged()
        {
            var binding  = new BindingSettings();
            var property = new PropertyBindingSettings();
            var raised   = false;

            binding.Properties.Add(property);

            binding.PropertyChanged += (sender, args) => raised = true;

            property.ValueProvider = new ValueProviderBindingSettings();

            Assert.True(raised);
        }
Пример #8
0
        public void WhenPropertyNameChanged_ThenBindingRaisesChanged()
        {
            var binding  = new BindingSettings();
            var property = new PropertyBindingSettings();
            var raised   = false;

            binding.Properties.Add(property);

            binding.PropertyChanged += (sender, args) => raised = true;

            property.Name = "hello";

            Assert.True(raised);
        }
        public void WhenValueProviderBindingFails_ThenThrowsInvalidOperationExceptionAndTraces()
        {
            var settings = new PropertyBindingSettings {
                ValueProvider = new ValueProviderBindingSettings {
                }
            };

            Mock.Get(this.binding)
            .Setup(x => x.Evaluate(It.IsAny <IDynamicBindingContext>()))
            .Returns(false);

            Assert.Throws <InvalidOperationException>(() => settings.Evaluate(this.bindingFactory, this.tracer));
            Mock.Get(this.tracer)
            .Verify(x => x.Trace(TraceEventType.Error, It.IsAny <string>(), It.IsAny <object[]>()));
        }
            public void WhenDefaultValueHasOnlyValueProvider_ThenValidateDefaultValueHasBothValueOrValueProviderSucceeds()
            {
                var propertyBindings = new PropertyBindingSettings
                {
                    Value         = string.Empty,
                    ValueProvider = new ValueProviderBindingSettings
                    {
                        TypeId = "FooType"
                    }
                };

                this.property.DefaultValue = propertyBindings;

                this.property.ValidateDefaultValueHasValueOrValueProvider(validationContext);

                Assert.True(validationContext.CurrentViolations.Count == 0);
            }
            public void WhenDefaultValueHasValueAndValueProvider_ThenValidateDefaultValueHasBothValueOrValueProviderFails()
            {
                PropertyBindingSettings propertyBindings = new PropertyBindingSettings();

                propertyBindings.Value         = "Foo";
                propertyBindings.ValueProvider = new ValueProviderBindingSettings
                {
                    TypeId = "FooType"
                };

                this.store.TransactionManager.DoWithinTransaction(() =>
                {
                    this.property.DefaultValue = propertyBindings;
                });
                this.property.ValidateDefaultValueHasValueOrValueProvider(validationContext);

                Assert.True(validationContext.CurrentViolations.Count == 1);
                Assert.True(validationContext.ValidationSubjects.IndexOf(this.property) == 0);
            }
            public void WhenValueProviderAndDefaultValueProvider_ThenValidateValueProviderOrDefaultValueFails()
            {
                PropertyBindingSettings defaultValueBindings = new PropertyBindingSettings();

                defaultValueBindings.Value         = "";
                defaultValueBindings.ValueProvider = new ValueProviderBindingSettings
                {
                    TypeId = "Foo"
                };
                ValueProviderBindingSettings valueProviderBindings = new ValueProviderBindingSettings
                {
                    TypeId = "Foo3"
                };

                this.store.TransactionManager.DoWithinTransaction(() =>
                {
                    this.property.DefaultValue  = defaultValueBindings;
                    this.property.ValueProvider = valueProviderBindings;
                });
                this.property.ValidateValueProviderOrDefaultValue(validationContext);

                Assert.True(validationContext.CurrentViolations.Count == 1);
                Assert.True(validationContext.ValidationSubjects.IndexOf(this.property) == 0);
            }
        /// <summary>
        /// Processes the document
        /// </summary>
        /// <param name="document">The document to process.</param>
        public void ProcessSchema(XDocument document)
        {
            Guard.NotNull(() => document, document);

            this.IsModified = false;

            // Locate all <commandSettings> that have a 'typeId="NuPattern.Library.Commands.AggregatorCommand"'
            var commandSettings = document.Descendants(CommandSettingsElementName)
                                  .Where(cs => cs.Attribute(CommandSettingsTypeIdName) != null && cs.Attribute(CommandSettingsTypeIdName).Value == typeof(AggregatorCommand).FullName)
                                  .Distinct();

            if (commandSettings.Any())
            {
                tracer.Info(Resources.AggregatorCommandUpgradeProcessor_TraceDeserialize);

                // Enumerate each <commandSettings> element
                commandSettings.ForEach(cmdSettingsElement =>
                {
                    var id = cmdSettingsElement.Attribute(CommandSettingsIdName) != null ? cmdSettingsElement.Attribute(CommandSettingsIdName).Value : string.Empty;
                    var cmdPropsElement = cmdSettingsElement.Descendants(CommandSettingsPropertiesElementName).FirstOrDefault();
                    if (cmdPropsElement != null)
                    {
                        // Ensure we have a value for <properties>
                        var propertiesValue = cmdPropsElement.Value;
                        if (!string.IsNullOrEmpty(propertiesValue))
                        {
                            try
                            {
                                // Determine if has a serialized 'string' value, as opposed to a 'Collection<CommmandReference>'
                                var bindings = BindingSerializer.Deserialize <IEnumerable <IPropertyBindingSettings> >(propertiesValue);
                                if (bindings != null && bindings.Any())
                                {
                                    var existingBinding = bindings.FirstOrDefault(b => b.Name == Reflector <AggregatorCommand> .GetPropertyName(x => x.CommandReferenceList));
                                    if (existingBinding != null)
                                    {
                                        // Ensure there is a value
                                        if (!String.IsNullOrEmpty(existingBinding.Value))
                                        {
                                            //Ensure value is previous GUID list format
                                            if (Regex.IsMatch(existingBinding.Value, DelimitedListGuidRegEx))
                                            {
                                                // Read the delimitied array of strings
                                                var referenceStrings = existingBinding.Value.Split(new[] { CommandReferenceDelimitier }, StringSplitOptions.RemoveEmptyEntries);
                                                if (referenceStrings.Any())
                                                {
                                                    tracer.Info(Resources.AggregatorCommandUpgradeProcessor_TraceDeserializeCommandSettings, id);

                                                    // Convert to command references
                                                    var references = new List <CommandReference>();
                                                    referenceStrings.ForEach(rs =>
                                                    {
                                                        Guid refId;
                                                        if (Guid.TryParse(rs, out refId))
                                                        {
                                                            references.Add(new CommandReference(null)
                                                            {
                                                                CommandId = refId,
                                                            });
                                                        }
                                                    });

                                                    // Update value of <properties> element
                                                    var newBinding = new PropertyBindingSettings
                                                    {
                                                        Name  = Reflector <AggregatorCommand> .GetPropertyName(x => x.CommandReferenceList),
                                                        Value = BindingSerializer.Serialize(new Collection <CommandReference>(references)),
                                                    };
                                                    cmdPropsElement.SetValue(BindingSerializer.Serialize(new IPropertyBindingSettings[] { newBinding }));
                                                    this.IsModified = true;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                            catch (BindingSerializationException)
                            {
                                // Ignore deserializaton exception
                            }
                        }
                    }
                });
            }
        }