public ItemFilterBlockGroup IntegrateStringListIntoBlockGroupHierarchy(IEnumerable <string> groupStrings, ItemFilterBlockGroup startItemGroup) { var inputGroups = groupStrings.ToList(); var firstGroup = inputGroups.First().Trim(); if (firstGroup.StartsWith("~")) { firstGroup = firstGroup.Substring(1); } ItemFilterBlockGroup matchingChildItemGroup = null; if (startItemGroup.ChildGroups.Count(g => g.GroupName == firstGroup) > 0) { matchingChildItemGroup = startItemGroup.ChildGroups.First(c => c.GroupName == firstGroup); } if (matchingChildItemGroup == null) { var newItemGroup = CreateBlockGroup(inputGroups.First().Trim(), startItemGroup); startItemGroup.ChildGroups.Add(newItemGroup); inputGroups = inputGroups.Skip(1).ToList(); return(inputGroups.Count > 0 ? IntegrateStringListIntoBlockGroupHierarchy(inputGroups, newItemGroup) : newItemGroup); } inputGroups = inputGroups.Skip(1).ToList(); return(inputGroups.Count > 0 ? IntegrateStringListIntoBlockGroupHierarchy(inputGroups, matchingChildItemGroup) : matchingChildItemGroup); }
public void IntegrateStringListIntoBlockGroupHierarchy_MultipleBlockGroups() { // Arrange var rootBlock = new ItemFilterBlockGroup("Root", null); var builder = new BlockGroupHierarchyBuilder(); // Act var inputStrings = new List <string> { "Block Group" }; builder.IntegrateStringListIntoBlockGroupHierarchy(inputStrings, rootBlock); inputStrings = new List <string> { "Block Group 2" }; builder.IntegrateStringListIntoBlockGroupHierarchy(inputStrings, rootBlock); inputStrings = new List <string> { "Block Group", "Sub Block Group" }; var result = builder.IntegrateStringListIntoBlockGroupHierarchy(inputStrings, rootBlock); // Assert Assert.AreEqual(2, rootBlock.ChildGroups.Count); Assert.AreEqual("Sub Block Group", result.GroupName); }
public ItemFilterBlockGroupViewModel(ItemFilterBlockGroup itemFilterBlockGroup, bool showAdvanced, ItemFilterBlockGroupViewModel parent) { GroupName = itemFilterBlockGroup.GroupName; ParentGroup = parent; Advanced = itemFilterBlockGroup.Advanced; SourceBlockGroup = itemFilterBlockGroup; SourceBlockGroup.ClearStatusChangeSubscribers(); SourceBlockGroup.BlockGroupStatusChanged += OnSourceBlockGroupStatusChanged; IsShowChecked = itemFilterBlockGroup.IsShowChecked; IsEnableChecked = itemFilterBlockGroup.IsEnableChecked; ChildGroups = new ObservableCollection <ItemFilterBlockGroupViewModel>(); foreach (var childGroup in itemFilterBlockGroup.ChildGroups.Where(c => showAdvanced || !c.Advanced)) { ChildGroups.Add(new ItemFilterBlockGroupViewModel(childGroup, showAdvanced, this)); } VisibleChildGroups = new ObservableCollection <ItemFilterBlockGroupViewModel>(); foreach (var childGroup in ChildGroups.Where(item => !item.IsHidden)) { VisibleChildGroups.Add(childGroup); } if (ChildGroups.Any()) { SetIsCheckedBasedOnChildGroups(); } }
public void ToString_ReturnsFullBlockHierarchy() { // Arrange const string expectedResult = "Child 1 Block Group - Child 2 Block Group"; var rootBlockGroup = new ItemFilterBlockGroup("Root Block Group", null); var child1BlockGroup = new ItemFilterBlockGroup("Child 1 Block Group", rootBlockGroup); var child2BlockGroup = new ItemFilterBlockGroup("Child 2 Block Group", child1BlockGroup); // Act var result = child2BlockGroup.ToString(); // Assert Assert.AreEqual(expectedResult, result); }
public void ToString_AddsTildeForAdvancedBlock() { // Arrange const string expectedResult = "~Child 1 Block Group - Child 2 Block Group"; var rootBlockGroup = new ItemFilterBlockGroup("Root Block Group", null); var child1BlockGroup = new ItemFilterBlockGroup("Child 1 Block Group", rootBlockGroup, true); var child2BlockGroup = new ItemFilterBlockGroup("Child 2 Block Group", child1BlockGroup); // Act var result = child2BlockGroup.ToString(); // Assert Assert.AreEqual(expectedResult, result); }
public void ToString_ReturnsFullBlockHierarchy() { // Arrange const string ExpectedResult = "Child 1 Block Group - Child 2 Block Group"; var rootBlockGroup = new ItemFilterBlockGroup("Root Block Group", null); var child1BlockGroup = new ItemFilterBlockGroup("Child 1 Block Group", rootBlockGroup); var child2BlockGroup = new ItemFilterBlockGroup("Child 2 Block Group", child1BlockGroup); // Act var result = child2BlockGroup.ToString(); // Assert Assert.AreEqual(ExpectedResult, result); }
public void ToString_AddsTildeForAdvancedBlock() { // Arrange const string ExpectedResult = "~Child 1 Block Group - Child 2 Block Group"; var rootBlockGroup = new ItemFilterBlockGroup("Root Block Group", null); var child1BlockGroup = new ItemFilterBlockGroup("Child 1 Block Group", rootBlockGroup, true); var child2BlockGroup = new ItemFilterBlockGroup("Child 2 Block Group", child1BlockGroup); // Act var result = child2BlockGroup.ToString(); // Assert Assert.AreEqual(ExpectedResult, result); }
public void HasParentInBlockGroupHierarchy_ReturnsCorrectResult() { // Arrange var testInputRootBlockGroup = new ItemFilterBlockGroup("Root Block Group", null); var testInputSubBlockGroup = new ItemFilterBlockGroup("Sub Block Group", testInputRootBlockGroup); var testInputSubSubBlockGroup = new ItemFilterBlockGroup("Sub Sub Block Group", testInputSubBlockGroup); var block = new ItemFilterBlock {BlockGroup = testInputSubSubBlockGroup}; // Act // Assert Assert.AreEqual(true, block.HasBlockGroupInParentHierarchy(testInputRootBlockGroup, block.BlockGroup)); Assert.AreEqual(true, block.HasBlockGroupInParentHierarchy(testInputSubBlockGroup, block.BlockGroup)); }
private ItemFilterBlockGroup CreateBlockGroup(string groupNameString, ItemFilterBlockGroup parentGroup) { var advanced = false; if (groupNameString.StartsWith("~")) { groupNameString = groupNameString.Substring(1); advanced = true; } if (parentGroup.Advanced) { advanced = true; } return(new ItemFilterBlockGroup(groupNameString, parentGroup, advanced)); }
public void HasParentInBlockGroupHierarchy_ReturnsCorrectResult() { // Arrange var testInputRootBlockGroup = new ItemFilterBlockGroup("Root Block Group", null); var testInputSubBlockGroup = new ItemFilterBlockGroup("Sub Block Group", testInputRootBlockGroup); var testInputSubSubBlockGroup = new ItemFilterBlockGroup("Sub Sub Block Group", testInputSubBlockGroup); var block = new ItemFilterBlock { BlockGroup = testInputSubSubBlockGroup }; // Act // Assert Assert.AreEqual(true, block.HasBlockGroupInParentHierarchy(testInputRootBlockGroup, block.BlockGroup)); Assert.AreEqual(true, block.HasBlockGroupInParentHierarchy(testInputSubBlockGroup, block.BlockGroup)); }
public void IntegrateStringListIntoBlockGroupHierarchy_SingleBlockGroup() { // Arrange var inputStrings = new List <string> { "Block Group" }; var rootBlock = new ItemFilterBlockGroup("Root", null); var builder = new BlockGroupHierarchyBuilder(); // Act var result = builder.IntegrateStringListIntoBlockGroupHierarchy(inputStrings, rootBlock, true, true); // Assert Assert.AreEqual(1, rootBlock.ChildGroups.Count); Assert.AreEqual("Block Group", result.ParentGroup.GroupName); }
public void IntegrateStringListIntoBlockGroupHierarchy_AdvancedBlockGroup_ChildrenAreCreatedAsAdvanced() { // Arrange var inputStrings = new List <string> { "~Advanced Block Group", "This should be advanced too" }; var rootBlock = new ItemFilterBlockGroup("Root", null); var builder = new BlockGroupHierarchyBuilder(); // Act var result = builder.IntegrateStringListIntoBlockGroupHierarchy(inputStrings, rootBlock); // Assert Assert.AreEqual(1, rootBlock.ChildGroups.Count); Assert.AreEqual(true, result.Advanced); }
public void IntegrateStringListIntoBlockGroupHierarchy_AdvancedBlockGroup_MarksBlockGroupAsAdvanced() { // Arrange var inputStrings = new List <string> { "~Block Group" }; var rootBlock = new ItemFilterBlockGroup("Root", null); var builder = new BlockGroupHierarchyBuilder(); // Act var result = builder.IntegrateStringListIntoBlockGroupHierarchy(inputStrings, rootBlock); // Assert Assert.AreEqual(1, rootBlock.ChildGroups.Count); Assert.AreEqual("Block Group", result.GroupName); Assert.AreEqual(true, result.Advanced); }
public ItemFilterBlockGroupViewModel(ItemFilterBlockGroup itemFilterBlockGroup, bool showAdvanced, ItemFilterBlockGroupViewModel parent) { GroupName = itemFilterBlockGroup.GroupName; ParentGroup = parent; Advanced = itemFilterBlockGroup.Advanced; SourceBlockGroup = itemFilterBlockGroup; IsChecked = itemFilterBlockGroup.IsChecked; ChildGroups = new ObservableCollection <ItemFilterBlockGroupViewModel>(); foreach (var childGroup in itemFilterBlockGroup.ChildGroups.Where(c => showAdvanced || !c.Advanced)) { ChildGroups.Add(new ItemFilterBlockGroupViewModel(childGroup, showAdvanced, this)); } if (ChildGroups.Any()) { SetIsCheckedBasedOnChildGroups(); } }
public void IntegrateStringListIntoBlockGroupHierarchy_ExistingAdvancedBlockGroup_SetsParentCorrectly() { // Arrange var inputStrings = new List <string> { "~Block Group" }; var rootBlock = new ItemFilterBlockGroup("Root", null); var subBlock = new ItemFilterBlockGroup("Block Group", rootBlock, true); rootBlock.ChildGroups.Add(subBlock); var builder = new BlockGroupHierarchyBuilder(); // Act var result = builder.IntegrateStringListIntoBlockGroupHierarchy(inputStrings, rootBlock, true, true); // Assert Assert.AreEqual(1, rootBlock.ChildGroups.Count); Assert.AreEqual("Block Group", result.ParentGroup.GroupName); Assert.AreEqual(true, result.ParentGroup.Advanced); }
public ItemFilterBlockGroup IntegrateStringListIntoBlockGroupHierarchy(IEnumerable <string> groupStrings, ItemFilterBlockGroup startItemGroup, bool show, bool enabled) { var inputGroups = groupStrings.ToList(); var firstGroup = inputGroups.First().Trim(); if (firstGroup.StartsWith("~")) { firstGroup = firstGroup.Substring(1); } ItemFilterBlockGroup matchingChildItemGroup = null; if (startItemGroup.ChildGroups.Count(g => g.GroupName == firstGroup) > 0) { matchingChildItemGroup = startItemGroup.ChildGroups.First(c => c.GroupName == firstGroup); } if (matchingChildItemGroup == null) { var newItemGroup = CreateBlockGroup(inputGroups.First().Trim(), startItemGroup); newItemGroup.IsShowChecked = show; newItemGroup.IsEnableChecked = enabled; startItemGroup.ChildGroups.Add(newItemGroup); inputGroups = inputGroups.Skip(1).ToList(); if (inputGroups.Count > 0) { return(IntegrateStringListIntoBlockGroupHierarchy(inputGroups, newItemGroup, show, enabled)); } else { var leafNode = new ItemFilterBlockGroup("", newItemGroup, false, true); leafNode.IsShowChecked = show; leafNode.IsEnableChecked = enabled; newItemGroup.ChildGroups.Add(leafNode); return(leafNode); } } else { if (matchingChildItemGroup.IsShowChecked != show) { matchingChildItemGroup.IsShowChecked = null; } if (matchingChildItemGroup.IsEnableChecked != enabled) { matchingChildItemGroup.IsEnableChecked = null; } } inputGroups = inputGroups.Skip(1).ToList(); if (inputGroups.Count > 0) { return(IntegrateStringListIntoBlockGroupHierarchy(inputGroups, matchingChildItemGroup, show, enabled)); } else { var leafNode = new ItemFilterBlockGroup("", matchingChildItemGroup, false, true); leafNode.IsShowChecked = show; leafNode.IsEnableChecked = enabled; matchingChildItemGroup.ChildGroups.Add(leafNode); return(leafNode); } }
public void Cleanup() { _rootBlockGroup = null; }
public void Initialise(ItemFilterBlockGroup rootBlockGroup) { _rootBlockGroup = rootBlockGroup; }