public void ParameterlessConstructorShouldInitializeEmptyCollection() { var pairs = new PropertyOptionPairs(); pairs.Count.Should().Be(0); pairs.Any().Should().BeFalse(); }
private static TElement CreateElement(ArgKeyValuePairs pairs, PropertyOptionPairs properties) { var element = new TElement(); foreach (var pair in pairs) { if (!properties.TryFindByOption(pair.Key, out var property)) { throw new UnboundTokenException(pair.Key); } var parsedValue = pair.Value.Parse(property.PropertyType); property.SetValue(element, parsedValue); } return(element); }
public void MethodTryFindByOptionShouldReturnFalseAndOutputNullWhenKeyIsNotFound(string[] options, string searchTerm) { var propertyName = nameof(PropertyOptionPair.Option); var property = typeof(PropertyOptionPair).GetProperty(propertyName); var collection = new List <PropertyOptionPair>(); foreach (var option in options) { collection.Add(new PropertyOptionPair(property, option)); } var pairs = new PropertyOptionPairs(collection); pairs.Count.Should().Be(collection.Count); var found = pairs.TryFindByOption(searchTerm, out var output); found.Should().BeFalse(); output.Should().BeNull(); }
private static PropertyOptionPairs GetPropertyOptionPairs() { var query = from property in typeof(TElement).GetProperties() from propertyAttribute in property.GetCustomAttributes() where propertyAttribute is IOptionAttribute let optionAttribute = propertyAttribute as IOptionAttribute let option = optionAttribute.GetValue() select new PropertyOptionPair(property, option); var collection = new PropertyOptionPairs(query); var duplicated = collection.GetDuplicatedOptions(); if (duplicated.Any()) { throw new DuplicatedOptionsException(duplicated); } return(collection); }
public void CollectionConstructorShouldInitializeWithGivenCollection(params string[] options) { var propertyName = nameof(PropertyOptionPair.Option); var property = typeof(PropertyOptionPair).GetProperty(propertyName); var collection = new List <PropertyOptionPair>(); foreach (var option in options) { collection.Add(new PropertyOptionPair(property, option)); } var pairs = new PropertyOptionPairs(collection); pairs.Count.Should().Be(collection.Count); pairs.Any().Should().BeTrue(); for (var i = 0; i < pairs.Count; i++) { var pair = pairs[i]; pair.Option.Should().Be(options[i]); pair.Property.Should().BeSameAs(property); pair.Should().BeSameAs(collection[i]); } }