Implemented BlockGroups and related translation

This commit is contained in:
Ben
2015-06-08 22:29:39 +01:00
parent d48f7a58ec
commit 7b0e83b9ae
12 changed files with 269 additions and 72 deletions

View File

@@ -47,10 +47,12 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Models\TestItemFilterBlock.cs" />
<Compile Include="Models\TestItemFilterBlockGroup.cs" />
<Compile Include="Models\TestItemFilterScript.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Services\TestItemFilterPersistenceService.cs" />
<Compile Include="Services\TestStaticDataService.cs" />
<Compile Include="Translators\TestBlockGroupHierarchyBuilder.cs" />
<Compile Include="Translators\TestItemFilterBlockTranslator.cs" />
<Compile Include="Translators\TestItemFilterScriptTranslator.cs" />
</ItemGroup>

View File

@@ -29,10 +29,8 @@ namespace Filtration.Tests.Models
{
// Arrange
var script = new ItemFilterScript
{
ItemFilterBlocks = new ObservableCollection<ItemFilterBlock> {new ItemFilterBlock()}
};
var script = new ItemFilterScript();
script.ItemFilterBlocks.Add(new ItemFilterBlock());
// Act
var result = script.Validate();
@@ -62,15 +60,12 @@ namespace Filtration.Tests.Models
var testInputBlock3 = new ItemFilterBlock();
testInputBlock3.BlockItems.Add(new BackgroundColorBlockItem(new Color { A = 255, R = 255, G = 0, B = 0 }));
var script = new ItemFilterScript()
{
ItemFilterBlocks = new ObservableCollection<ItemFilterBlock>
{
testInputBlock1,
testInputBlock2,
testInputBlock3
}
};
var script = new ItemFilterScript();
script.ItemFilterBlocks.Add(testInputBlock1);
script.ItemFilterBlocks.Add(testInputBlock2);
script.ItemFilterBlocks.Add(testInputBlock3);
// Act
script.ReplaceColors(testInputReplaceColors);
@@ -108,14 +103,9 @@ namespace Filtration.Tests.Models
testInputBlock2.BlockItems.Add(new BackgroundColorBlockItem(oldBackgroundColor));
testInputBlock2.BlockItems.Add(new TextColorBlockItem(new Color {A = 1, R = 2, G = 3, B = 4}));
var script = new ItemFilterScript
{
ItemFilterBlocks = new ObservableCollection<ItemFilterBlock>
{
testInputBlock1,
testInputBlock2
}
};
var script = new ItemFilterScript();
script.ItemFilterBlocks.Add(testInputBlock1);
script.ItemFilterBlocks.Add(testInputBlock2);
// Act
script.ReplaceColors(testInputReplaceColors);
@@ -131,3 +121,4 @@ namespace Filtration.Tests.Models
}
}
}

View File

@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Media;
using Filtration.Enums;
@@ -6,6 +7,7 @@ using Filtration.Models;
using Filtration.Models.BlockItemBaseTypes;
using Filtration.Models.BlockItemTypes;
using Filtration.Translators;
using Moq;
using NUnit.Framework;
namespace Filtration.Tests.Translators
@@ -38,6 +40,64 @@ namespace Filtration.Tests.Translators
Assert.AreEqual(FilterPredicateOperator.GreaterThanOrEqual, blockItem.FilterPredicate.PredicateOperator);
}
[Test]
public void TranslateStringToItemFilterBlock_BlockGroupComment_CallsBlockGroupHierarchyBuilder()
{
// Arrange
var inputString = "Show # TestBlockGroup" + Environment.NewLine;
// Act
_testUtility.MockBlockGroupHierarchyBuilder.Setup(b => b.IntegrateStringListIntoBlockGroupHierarchy(It.IsAny<IEnumerable<string>>())).Verifiable();
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString);
// Assert
_testUtility.MockBlockGroupHierarchyBuilder.Verify();
}
[Test]
public void TranslateStringToItemFilterBlock_NoBlockGroupComment_CallsBlockGroupHierarchyBuilder()
{
// Arrange
var inputString = "Show" + Environment.NewLine;
// Act
_testUtility.MockBlockGroupHierarchyBuilder.Setup(b => b.IntegrateStringListIntoBlockGroupHierarchy(It.IsAny<IEnumerable<string>>())).Verifiable();
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString);
// Assert
_testUtility.MockBlockGroupHierarchyBuilder.Verify(b => b.IntegrateStringListIntoBlockGroupHierarchy(It.IsAny<IEnumerable<string>>()), Times.Never);
}
[Test]
public void TranslateStringToItemFilterBlock_BlockGroupCommentWithNoGroups_DoesNotThrow()
{
// Arrange
var inputString = "Show #" + Environment.NewLine;
// Act
_testUtility.MockBlockGroupHierarchyBuilder.Setup(b => b.IntegrateStringListIntoBlockGroupHierarchy(It.IsAny<IEnumerable<string>>())).Verifiable();
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString);
// Assert
_testUtility.MockBlockGroupHierarchyBuilder.Verify(b => b.IntegrateStringListIntoBlockGroupHierarchy(It.IsAny<IEnumerable<string>>()), Times.Never);
}
[Test]
public void TranslateStringToItemFilterBlock_BlockGroupComment_SetsBlockItemGroupCorrectly()
{
// Arrange
var inputString = "Show # Test Block Group - Test Sub Block Group - Test Another Block Group" + Environment.NewLine;
var testBlockGroup = new ItemFilterBlockGroup("zzzzz", null);
// Act
_testUtility.MockBlockGroupHierarchyBuilder.Setup(b => b.IntegrateStringListIntoBlockGroupHierarchy(It.IsAny<IEnumerable<string>>())).Returns(testBlockGroup).Verifiable();
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString);
// Assert
Assert.AreEqual(testBlockGroup, result.BlockGroup);
_testUtility.MockBlockGroupHierarchyBuilder.Verify();
}
[Test]
public void TranslateStringToItemFilterBlock_Hide_ReturnsCorrectObject()
{
@@ -686,6 +746,24 @@ namespace Filtration.Tests.Translators
Assert.AreEqual(expectedResult, result);
}
[Test]
public void TranslateItemFilterBlockToString_HasBlockGroup_ReturnsCorrectString()
{
// Arrange
var expectedResult = "Show # 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);
_testUtility.TestBlock.BlockGroup = child2BlockGroup;
// Act
var result = _testUtility.Translator.TranslateItemFilterBlockToString(_testUtility.TestBlock);
// Assert
Assert.AreEqual(expectedResult, result);
}
[Test]
public void TranslateItemFilterBlockToString_FilterTypeHide_ReturnsCorrectString()
{
@@ -1158,11 +1236,15 @@ namespace Filtration.Tests.Translators
// Test Data
TestBlock = new ItemFilterBlock();
// Mock setups
MockBlockGroupHierarchyBuilder = new Mock<IBlockGroupHierarchyBuilder>();
// Class under test instantiation
Translator = new ItemFilterBlockTranslator();
Translator = new ItemFilterBlockTranslator(MockBlockGroupHierarchyBuilder.Object);
}
public ItemFilterBlock TestBlock { get; set; }
public Mock<IBlockGroupHierarchyBuilder> MockBlockGroupHierarchyBuilder { get; private set; }
public ItemFilterBlockTranslator Translator { get; private set; }
}
}

View File

@@ -13,23 +13,28 @@ namespace Filtration.Tests.Translators
[TestFixture]
public class TestItemFilterScriptTranslator
{
private ItemFilterScriptTranslatorTestUtility _testUtility;
[SetUp]
public void ItemFilterScriptTranslatorTestSetup()
{
_testUtility = new ItemFilterScriptTranslatorTestUtility();
}
[Test]
public void TranslateStringToItemFilterScript_ReturnsScriptWithCorrectNumberOfBlocks()
{
// Arrange
var testInput = File.ReadAllText(@"Resources/testscript.txt");
var mockItemFilterBlockTranslator = new Mock<IItemFilterBlockTranslator>();
mockItemFilterBlockTranslator.Setup(t => t.TranslateStringToItemFilterBlock(It.IsAny<string>())).Verifiable();
var translator = new ItemFilterScriptTranslator(mockItemFilterBlockTranslator.Object);
_testUtility.MockItemFilterBlockTranslator.Setup(t => t.TranslateStringToItemFilterBlock(It.IsAny<string>())).Verifiable();
// Act
var script = translator.TranslateStringToItemFilterScript(testInput);
var script = _testUtility.ScriptTranslator.TranslateStringToItemFilterScript(testInput);
// Assert
Assert.AreEqual(5, script.ItemFilterBlocks.Count);
mockItemFilterBlockTranslator.Verify();
_testUtility.MockItemFilterBlockTranslator.Verify();
}
[Test]
@@ -46,10 +51,8 @@ namespace Filtration.Tests.Translators
var mockItemFilterBlockTranslator = new Mock<IItemFilterBlockTranslator>();
mockItemFilterBlockTranslator.Setup(t => t.TranslateStringToItemFilterBlock(It.IsAny<string>())).Verifiable();
var translator = new ItemFilterScriptTranslator(mockItemFilterBlockTranslator.Object);
// Act
var script = translator.TranslateStringToItemFilterScript(testInput);
var script = _testUtility.ScriptTranslator.TranslateStringToItemFilterScript(testInput);
// Assert
Assert.AreEqual(expectedDescription, script.Description);
@@ -62,9 +65,10 @@ namespace Filtration.Tests.Translators
// Arrange
var testInput = File.ReadAllText(@"Resources/ThioleItemFilter.txt");
var BlockTranslator = new ItemFilterBlockTranslator();
var translator = new ItemFilterScriptTranslator(BlockTranslator);
var mockBlockGroupHierarchyBuilder = new Mock<IBlockGroupHierarchyBuilder>();
var blockTranslator = new ItemFilterBlockTranslator(mockBlockGroupHierarchyBuilder.Object);
var translator = new ItemFilterScriptTranslator(blockTranslator, mockBlockGroupHierarchyBuilder.Object);
// Act
var script = translator.TranslateStringToItemFilterScript(testInput);
@@ -82,20 +86,17 @@ namespace Filtration.Tests.Translators
testBlock.BlockItems.Add(new ItemLevelBlockItem(FilterPredicateOperator.Equal, 5));
var BlockOutput = "Test Script Output";
var expectedOutput = "Test Script Output" + Environment.NewLine + Environment.NewLine;
testScript.ItemFilterBlocks.Add(testBlock);
var mockItemFilterBlockTranslator = new Mock<IItemFilterBlockTranslator>();
mockItemFilterBlockTranslator.Setup(t => t.TranslateItemFilterBlockToString(testBlock)).Returns(BlockOutput).Verifiable();
_testUtility.MockItemFilterBlockTranslator.Setup(t => t.TranslateItemFilterBlockToString(testBlock)).Returns(BlockOutput).Verifiable();
var translator = new ItemFilterScriptTranslator(mockItemFilterBlockTranslator.Object);
// Act
var result = translator.TranslateItemFilterScriptToString(testScript);
var result = _testUtility.ScriptTranslator.TranslateItemFilterScriptToString(testScript);
// Assert
mockItemFilterBlockTranslator.Verify();
_testUtility.MockItemFilterBlockTranslator.Verify();
}
[Test]
@@ -132,8 +133,9 @@ namespace Filtration.Tests.Translators
" Width = 3" + Environment.NewLine +
" SetFontSize 7" + Environment.NewLine + Environment.NewLine;
var blockTranslator = new ItemFilterBlockTranslator();
var translator = new ItemFilterScriptTranslator(blockTranslator);
var mockBlockGroupHierarchyBuilder = new Mock<IBlockGroupHierarchyBuilder>();
var blockTranslator = new ItemFilterBlockTranslator(mockBlockGroupHierarchyBuilder.Object);
var translator = new ItemFilterScriptTranslator(blockTranslator, mockBlockGroupHierarchyBuilder.Object);
// Act
var result = translator.TranslateItemFilterScriptToString(script);
@@ -155,11 +157,8 @@ namespace Filtration.Tests.Translators
Environment.NewLine +
"# Test script description" + Environment.NewLine + Environment.NewLine;
var blockTranslator = new ItemFilterBlockTranslator();
var translator = new ItemFilterScriptTranslator(blockTranslator);
// Act
var result = translator.TranslateItemFilterScriptToString(script);
var result = _testUtility.ScriptTranslator.TranslateItemFilterScriptToString(script);
// Assert
Assert.AreEqual(expectedOutput, result);
@@ -177,8 +176,8 @@ namespace Filtration.Tests.Translators
" SetBorderColor 255 0 255" + Environment.NewLine +
" SetFontSize 25";
var blockTranslator = new ItemFilterBlockTranslator();
var translator = new ItemFilterScriptTranslator(blockTranslator);
var blockTranslator = new ItemFilterBlockTranslator(_testUtility.MockBlockGroupHierarchyBuilder.Object);
var translator = new ItemFilterScriptTranslator(blockTranslator, _testUtility.MockBlockGroupHierarchyBuilder.Object);
// Act
var result = translator.TranslateStringToItemFilterScript(testInputScript);
@@ -191,5 +190,22 @@ namespace Filtration.Tests.Translators
Assert.AreEqual(2, baseTypeItem.Items.Count);
}
private class ItemFilterScriptTranslatorTestUtility
{
public ItemFilterScriptTranslatorTestUtility()
{
// Mock setups
MockItemFilterBlockTranslator = new Mock<IItemFilterBlockTranslator>();
MockBlockGroupHierarchyBuilder = new Mock<IBlockGroupHierarchyBuilder>();
// Class under test instantiation
ScriptTranslator = new ItemFilterScriptTranslator(MockItemFilterBlockTranslator.Object, MockBlockGroupHierarchyBuilder.Object);
}
public ItemFilterScriptTranslator ScriptTranslator { get; private set; }
public Mock<IItemFilterBlockTranslator> MockItemFilterBlockTranslator { get; private set; }
public Mock<IBlockGroupHierarchyBuilder> MockBlockGroupHierarchyBuilder { get; private set; }
}
}
}