public void ReturnsConstructorValuesTest() { var type = typeof (string); var name = Guid.NewGuid().ToString(); var target = new IgnoreRule(type, name); target.TargetType.Should().Be(type); target.PropertyName.Should().Be(name); }
public void AddWithIgnoreRuleAddsRuleToCompilerTest() { var rule = new IgnoreRule(typeof(Person), "FirstName"); var target = new BuildStrategyCompiler(); target.Add(rule); target.IgnoreRules.Should().Contain(rule); }
public void AddWithIgnoreRuleThrowsExceptionWithNullCompilerTest() { var rule = new IgnoreRule(typeof(Person), "FirstName"); IBuildStrategyCompiler target = null; Action action = () => target.Add(rule); action.ShouldThrow<ArgumentNullException>(); }
public void PopulateSkipsPropertiesMarkedWithIgnoreRuleWithTypeMatchesBaseClassTest() { var staff = new List<Person>(); var name = Guid.NewGuid().ToString(); var expected = new SpecificCompany(); var ignoreRule = new IgnoreRule(typeof(Company), "Name"); var valueGenerators = new List<IValueGenerator>(); var typeCreators = new List<ITypeCreator>(); var ignoreRules = new List<IgnoreRule> { ignoreRule }; var buildStrategy = Substitute.For<IBuildStrategy>(); var typeCreator = Substitute.For<ITypeCreator>(); var valueGenerator = Substitute.For<IValueGenerator>(); typeCreators.Add(typeCreator); valueGenerators.Add(valueGenerator); buildStrategy.TypeCreators.Returns(typeCreators.AsReadOnly()); buildStrategy.ValueGenerators.Returns(valueGenerators.AsReadOnly()); buildStrategy.IgnoreRules.Returns(ignoreRules.AsReadOnly()); var target = new DefaultExecuteStrategy(); target.Initialize(buildStrategy, buildStrategy.GetBuildLog()); typeCreator.CanCreate( typeof(IEnumerable<Person>), "Staff", Arg.Is<LinkedList<object>>(x => x.Last.Value == expected)).Returns(true); typeCreator.Create( typeof(IEnumerable<Person>), "Staff", Arg.Is<LinkedList<object>>(x => x.Last.Value == expected)).Returns(staff); typeCreator.Populate(staff, target).Returns(staff); valueGenerator.IsSupported( typeof(string), Arg.Any<string>(), Arg.Is<LinkedList<object>>(x => x.Last.Value == expected)).Returns(true); valueGenerator.Generate( typeof(string), Arg.Any<string>(), Arg.Is<LinkedList<object>>(x => x.Last.Value == expected)).Returns(name); var actual = (SpecificCompany)target.Populate(expected); actual.Should().BeSameAs(expected); actual.Name.Should().BeNullOrEmpty(); actual.Staff.Should().BeSameAs(staff); }
public void Null_Path_Throws_Exception() { var rule = new IgnoreRule("test.txt"); Assert.Throws <ArgumentException>(() => rule.IsMatch(null, false)); }
public void PopulateDoesNotApplyIgnoreRuleWhenPropertyTypeNotMatchedTest() { var staff = new List<Person>(); var name = Guid.NewGuid().ToString(); var address = Guid.NewGuid().ToString(); var expected = new Company(); var ignoreRule = new IgnoreRule(typeof(Stream), "Name"); var valueGenerators = new List<IValueGenerator>(); var typeCreators = new List<ITypeCreator>(); var ignoreRules = new List<IgnoreRule> { ignoreRule }; var buildStrategy = Substitute.For<IBuildStrategy>(); var typeCreator = Substitute.For<ITypeCreator>(); var valueGenerator = Substitute.For<IValueGenerator>(); typeCreators.Add(typeCreator); valueGenerators.Add(valueGenerator); buildStrategy.TypeCreators.Returns(typeCreators.AsReadOnly()); buildStrategy.ValueGenerators.Returns(valueGenerators.AsReadOnly()); buildStrategy.IgnoreRules.Returns(ignoreRules.AsReadOnly()); var target = new DefaultExecuteStrategy(); target.Initialize(buildStrategy, buildStrategy.GetBuildLog()); typeCreator.CanCreate( typeof(IEnumerable<Person>), "Staff", Arg.Is<LinkedList<object>>(x => x.Last.Value == expected)).Returns(true); typeCreator.Create( typeof(IEnumerable<Person>), "Staff", Arg.Is<LinkedList<object>>(x => x.Last.Value == expected)).Returns(staff); typeCreator.Populate(staff, target).Returns(staff); valueGenerator.IsSupported( typeof(string), "Name", Arg.Is<LinkedList<object>>(x => x.Last.Value == expected)).Returns(true); valueGenerator.Generate(typeof(string), "Name", Arg.Is<LinkedList<object>>(x => x.Last.Value == expected)) .Returns(name); valueGenerator.IsSupported( typeof(string), "Address", Arg.Is<LinkedList<object>>(x => x.Last.Value == expected)).Returns(true); valueGenerator.Generate( typeof(string), "Address", Arg.Is<LinkedList<object>>(x => x.Last.Value == expected)).Returns(address); var actual = (Company)target.Populate(expected); actual.Should().BeSameAs(expected); actual.Name.Should().Be(name); actual.Address.Should().Be(address); actual.Staff.Should().BeSameAs(staff); }
internal static IRule ReadRule(XmlReader xml, bool includeFilter=true) { IRule rule; var elementName = xml.Name; switch (elementName.ToLower()) { case "recycle": rule = new RecycleRule(); break; case "delete": rule = new DeleteRule(); break; case "ignore": rule = new IgnoreRule(); break; case "move": rule = new MoveRule(); break; case "rename": rule = new RenameRule(); break; default: xml.Skip(); throw new IgnoredElementException(elementName); } var attributes = new AttributeParser(xml); rule.Target = attributes.GetOptional("Target").AsEnum(RuleTarget.FilesAndFolders); rule.AppliesToSubfolders = attributes.GetOptional("ApplyToSubfolders").AsBool(true); if (rule is MoveRuleBase) { ((MoveRuleBase)rule).IfExists = attributes.GetOptional("ifexists").AsEnum(MoveRuleBase.IfExistsMode.Cancel); } if( rule is MoveRule) { ((MoveRule)rule).Destination = attributes.GetMandatory("destination").AsString(); ((MoveRule)rule).CreateFolder = attributes.GetOptional("createfolder").AsBool(true); } if (rule is RenameRule) { ((RenameRule)rule).Name = attributes.GetMandatory("name").AsString(); } attributes.AssertNoUnused(); if (includeFilter) { var filters = ReadFilters(xml).ToArray(); if (filters.Length == 0) throw new Exception("You must specificy a filter for this rule"); if (filters.Length > 1) throw new Exception("You can only specify one filter at rule's root. Please use <MatchingAll>, <MatchingAny> or <MatchingNone>."); rule.Filter = filters.First(); } return rule; }
private void DeleteFilterCommand_Executed(IgnoreRule rule) { this.FiltersList.Remove(rule); this.IsFiltersAdded = this.FiltersList?.Count > 0; }
internal static IRule ReadRule(XmlReader xml, bool includeFilter = true) { IRule rule; var elementName = xml.Name; switch (elementName.ToLower()) { case "recycle": rule = new RecycleRule(); break; case "delete": rule = new DeleteRule(); break; case "ignore": rule = new IgnoreRule(); break; case "move": rule = new MoveRule(); break; case "rename": rule = new RenameRule(); break; default: xml.Skip(); throw new IgnoredElementException(elementName); } var attributes = new AttributeParser(xml); rule.Target = attributes.GetOptional("Target").AsEnum(RuleTarget.FilesAndFolders); rule.AppliesToSubfolders = attributes.GetOptional("ApplyToSubfolders").AsBool(true); if (rule is MoveRuleBase) { ((MoveRuleBase)rule).IfExists = attributes.GetOptional("ifexists").AsEnum(MoveRuleBase.IfExistsMode.Cancel); } if (rule is MoveRule) { ((MoveRule)rule).Destination = attributes.GetMandatory("destination").AsString(); ((MoveRule)rule).CreateFolder = attributes.GetOptional("createfolder").AsBool(true); } if (rule is RenameRule) { ((RenameRule)rule).Name = attributes.GetMandatory("name").AsString(); } attributes.AssertNoUnused(); if (includeFilter) { var filters = ReadFilters(xml).ToArray(); if (filters.Length == 0) { throw new Exception("You must specificy a filter for this rule"); } if (filters.Length > 1) { throw new Exception("You can only specify one filter at rule's root. Please use <MatchingAll>, <MatchingAny> or <MatchingNone>."); } rule.Filter = filters.First(); } return(rule); }
//constructor /// <summary> /// Create instance of <see cref="IgnoreRuleConstructionFlow"/> /// </summary> /// <param name="target"></param> public IgnoreRuleConstructionFlow(IgnoreRule target) { this.target = target; }