Implemented ThemeComponent reading/saving in translation layer

This commit is contained in:
Ben
2015-06-25 23:05:24 +01:00
parent e53e24100f
commit cc05945108
20 changed files with 450 additions and 34 deletions

View File

@@ -6,6 +6,7 @@ using Filtration.ObjectModel;
using Filtration.ObjectModel.BlockItemBaseTypes;
using Filtration.ObjectModel.BlockItemTypes;
using Filtration.ObjectModel.Enums;
using Filtration.ThemeEditor.Models;
using Filtration.Translators;
using Moq;
using NUnit.Framework;
@@ -490,7 +491,28 @@ namespace Filtration.Tests.Translators
Assert.AreEqual(255, blockItem.Color.R);
Assert.AreEqual(20, blockItem.Color.G);
Assert.AreEqual(100, blockItem.Color.B);
}
[Test]
public void TranslateStringToItemFilterBlock_SetTextColorWithThemeComponent_CallsThemeListBuilderAddComponent()
{
// Arrange
var inputString = "Show" + Environment.NewLine +
" SetTextColor 255 20 100 # Rare Item Text";
var testComponent = new ThemeComponent(typeof(TextColorBlockItem), "testComponent", new Color());
_testUtility.MockThemeComponentListBuilder.Setup(
t =>
t.AddComponent(typeof (TextColorBlockItem), "Rare Item Text",
new Color {A = 255, R = 255, G = 20, B = 100})).Returns(testComponent).Verifiable();
// Act
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString);
// Assert
var blockItem = result.BlockItems.OfType<TextColorBlockItem>().First();
Assert.AreSame(testComponent, blockItem.ThemeComponent);
_testUtility.MockThemeComponentListBuilder.Verify();
}
[Test]
@@ -1085,6 +1107,27 @@ namespace Filtration.Tests.Translators
Assert.AreEqual(expectedResult, result);
}
[Test]
public void TranslateItemFilterBlockToString_TextColorWithThemeComponent_ReturnsCorrectString()
{
// Arrange
var expectedResult = "Show" + Environment.NewLine +
" SetTextColor 54 102 255 # Test Theme Component";
var blockItem = new TextColorBlockItem(new Color {A = 255, R = 54, G = 102, B = 255})
{
ThemeComponent = new ThemeComponent(typeof (TextColorBlockItem), "Test Theme Component", new Color())
};
_testUtility.TestBlock.BlockItems.Add(blockItem);
// Act
var result = _testUtility.Translator.TranslateItemFilterBlockToString(_testUtility.TestBlock);
// Assert
Assert.AreEqual(expectedResult, result);
}
[Test]
public void TranslateItemFilterBlockToString_TextColorNotMaxAlpha_ReturnsCorrectString()
{
@@ -1291,13 +1334,16 @@ namespace Filtration.Tests.Translators
// Mock setups
MockBlockGroupHierarchyBuilder = new Mock<IBlockGroupHierarchyBuilder>();
MockThemeComponentListBuilder = new Mock<IThemeComponentListBuilder>();
// Class under test instantiation
Translator = new ItemFilterBlockTranslator(MockBlockGroupHierarchyBuilder.Object);
Translator = new ItemFilterBlockTranslator(MockBlockGroupHierarchyBuilder.Object,
MockThemeComponentListBuilder.Object);
}
public ItemFilterBlock TestBlock { get; set; }
public Mock<IBlockGroupHierarchyBuilder> MockBlockGroupHierarchyBuilder { get; private set; }
public Mock<IThemeComponentListBuilder> MockThemeComponentListBuilder { get; private set; }
public ItemFilterBlockTranslator Translator { get; private set; }
}
}

View File

@@ -1,10 +1,13 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Windows;
using Filtration.ObjectModel;
using Filtration.ObjectModel.BlockItemTypes;
using Filtration.ObjectModel.Enums;
using Filtration.Properties;
using Filtration.ThemeEditor.Models;
using Filtration.Translators;
using Moq;
using NUnit.Framework;
@@ -60,6 +63,37 @@ namespace Filtration.Tests.Translators
Assert.AreEqual(expectedDescription, script.Description);
}
[Test]
public void TranslateStringToItemFilterScript_CallsThemeComponentListBuilderInitialise()
{
// Arrange
var testInput = File.ReadAllText(@"Resources/testscript.txt");
_testUtility.MockThemeComponentListBuilder.Setup(t => t.Initialise()).Verifiable();
// Act
_testUtility.ScriptTranslator.TranslateStringToItemFilterScript(testInput);
// Assert
_testUtility.MockThemeComponentListBuilder.Verify();
}
[Test]
public void TranslateStringToItemFilterScript_SetsScriptThemeComponentsToComponentListBuilderResult()
{
// Arrange
var testInput = File.ReadAllText(@"Resources/testscript.txt");
List<ThemeComponent> testThemeComponents = new List<ThemeComponent>();
_testUtility.MockThemeComponentListBuilder.Setup(t => t.GetComponents()).Returns(testThemeComponents).Verifiable();
// Act
var result = _testUtility.ScriptTranslator.TranslateStringToItemFilterScript(testInput);
// Assert
_testUtility.MockThemeComponentListBuilder.Verify();
Assert.AreSame(testThemeComponents, result.ThemeComponents);
}
[Ignore("Integration Test")]
[Test]
public void TranslateStringToItemFilterScript_ThioleItemFilterTest()
@@ -67,10 +101,10 @@ namespace Filtration.Tests.Translators
// Arrange
var testInput = File.ReadAllText(@"Resources/ThioleItemFilter.txt");
var mockBlockGroupHierarchyBuilder = new Mock<IBlockGroupHierarchyBuilder>();
var blockTranslator = new ItemFilterBlockTranslator(mockBlockGroupHierarchyBuilder.Object);
var translator = new ItemFilterScriptTranslator(blockTranslator, mockBlockGroupHierarchyBuilder.Object);
var blockTranslator = new ItemFilterBlockTranslator(_testUtility.MockBlockGroupHierarchyBuilder.Object,
_testUtility.MockThemeComponentListBuilder.Object);
var translator = new ItemFilterScriptTranslator(blockTranslator,
_testUtility.MockBlockGroupHierarchyBuilder.Object, _testUtility.MockThemeComponentListBuilder.Object);
// Act
translator.TranslateStringToItemFilterScript(testInput);
@@ -127,9 +161,10 @@ namespace Filtration.Tests.Translators
" Width = 3" + Environment.NewLine +
" SetFontSize 7" + Environment.NewLine;
var mockBlockGroupHierarchyBuilder = new Mock<IBlockGroupHierarchyBuilder>();
var blockTranslator = new ItemFilterBlockTranslator(mockBlockGroupHierarchyBuilder.Object);
var translator = new ItemFilterScriptTranslator(blockTranslator, mockBlockGroupHierarchyBuilder.Object);
var blockTranslator = new ItemFilterBlockTranslator(_testUtility.MockBlockGroupHierarchyBuilder.Object,
_testUtility.MockThemeComponentListBuilder.Object);
var translator = new ItemFilterScriptTranslator(blockTranslator,
_testUtility.MockBlockGroupHierarchyBuilder.Object, _testUtility.MockThemeComponentListBuilder.Object);
// Act
var result = translator.TranslateItemFilterScriptToString(script);
@@ -172,9 +207,10 @@ namespace Filtration.Tests.Translators
" Width = 3" + Environment.NewLine +
" SetFontSize 7" + Environment.NewLine + Environment.NewLine;
var mockBlockGroupHierarchyBuilder = new Mock<IBlockGroupHierarchyBuilder>();
var blockTranslator = new ItemFilterBlockTranslator(mockBlockGroupHierarchyBuilder.Object);
var translator = new ItemFilterScriptTranslator(blockTranslator, mockBlockGroupHierarchyBuilder.Object);
var blockTranslator = new ItemFilterBlockTranslator(_testUtility.MockBlockGroupHierarchyBuilder.Object,
_testUtility.MockThemeComponentListBuilder.Object);
var translator = new ItemFilterScriptTranslator(blockTranslator,
_testUtility.MockBlockGroupHierarchyBuilder.Object, _testUtility.MockThemeComponentListBuilder.Object);
// Act
var result = translator.TranslateItemFilterScriptToString(script);
@@ -215,8 +251,10 @@ namespace Filtration.Tests.Translators
" SetBorderColor 255 0 255" + Environment.NewLine +
" SetFontSize 25";
var blockTranslator = new ItemFilterBlockTranslator(_testUtility.MockBlockGroupHierarchyBuilder.Object);
var translator = new ItemFilterScriptTranslator(blockTranslator, _testUtility.MockBlockGroupHierarchyBuilder.Object);
var blockTranslator = new ItemFilterBlockTranslator(_testUtility.MockBlockGroupHierarchyBuilder.Object,
_testUtility.MockThemeComponentListBuilder.Object);
var translator = new ItemFilterScriptTranslator(blockTranslator,
_testUtility.MockBlockGroupHierarchyBuilder.Object, _testUtility.MockThemeComponentListBuilder.Object);
// Act
var result = translator.TranslateStringToItemFilterScript(testInputScript);
@@ -237,14 +275,16 @@ namespace Filtration.Tests.Translators
// Mock setups
MockItemFilterBlockTranslator = new Mock<IItemFilterBlockTranslator>();
MockBlockGroupHierarchyBuilder = new Mock<IBlockGroupHierarchyBuilder>();
MockThemeComponentListBuilder = new Mock<IThemeComponentListBuilder>();
// Class under test instantiation
ScriptTranslator = new ItemFilterScriptTranslator(MockItemFilterBlockTranslator.Object, MockBlockGroupHierarchyBuilder.Object);
ScriptTranslator = new ItemFilterScriptTranslator(MockItemFilterBlockTranslator.Object, MockBlockGroupHierarchyBuilder.Object, MockThemeComponentListBuilder.Object);
}
public ItemFilterScriptTranslator ScriptTranslator { get; private set; }
public Mock<IItemFilterBlockTranslator> MockItemFilterBlockTranslator { get; private set; }
public Mock<IBlockGroupHierarchyBuilder> MockBlockGroupHierarchyBuilder { get; private set; }
public Mock<IThemeComponentListBuilder> MockThemeComponentListBuilder { get; private set; }
}
}
}

View File

@@ -0,0 +1,30 @@
using System.Windows.Media;
using Filtration.ObjectModel.BlockItemTypes;
using Filtration.Translators;
using NUnit.Framework;
namespace Filtration.Tests.Translators
{
[TestFixture]
public class TestThemeComponentListBuilder
{
[Test]
public void AddComponent_ReturnsFirstAddedComponent_WhenComponentAddedTwice()
{
// Arrange
var testInputTargetType = typeof (TextColorBlockItem);
var testInputComponentName = "testComponent";
var testInputColor = new Color();
var builder = new ThemeComponentListBuilder();
// Act
var firstResult = builder.AddComponent(testInputTargetType, testInputComponentName, testInputColor);
var secondResult = builder.AddComponent(testInputTargetType, testInputComponentName, testInputColor);
// Assert
Assert.AreSame(firstResult, secondResult);
}
}
}