From 71b7a45f8413ca705a5e0bb98ce89a2d62a91be2 Mon Sep 17 00:00:00 2001 From: azakhi Date: Fri, 10 Aug 2018 17:08:17 +0300 Subject: [PATCH] Add tests and small bugfixes --- .../BlockItemTypes/GemLevelBlockItem.cs | 10 ++ .../BlockItemTypes/StackSizeBlockItem.cs | 10 ++ .../Services/TestItemFilterBlockTranslator.cs | 131 ++++++++++++++++++ .../Services/ItemFilterScriptTranslator.cs | 2 +- 4 files changed, 152 insertions(+), 1 deletion(-) diff --git a/Filtration.ObjectModel/BlockItemTypes/GemLevelBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/GemLevelBlockItem.cs index da65452..50f3f6e 100644 --- a/Filtration.ObjectModel/BlockItemTypes/GemLevelBlockItem.cs +++ b/Filtration.ObjectModel/BlockItemTypes/GemLevelBlockItem.cs @@ -1,10 +1,20 @@ using System.Windows.Media; using Filtration.ObjectModel.BlockItemBaseTypes; +using Filtration.ObjectModel.Enums; namespace Filtration.ObjectModel.BlockItemTypes { public class GemLevelBlockItem : NumericFilterPredicateBlockItem { + public GemLevelBlockItem() + { + } + + public GemLevelBlockItem(FilterPredicateOperator predicateOperator, int predicateOperand) + : base(predicateOperator, predicateOperand) + { + } + public override string PrefixText => "GemLevel"; public override int MaximumAllowed => 2; public override string DisplayHeading => "Gem Level"; diff --git a/Filtration.ObjectModel/BlockItemTypes/StackSizeBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/StackSizeBlockItem.cs index 4ea5ec0..dc36b76 100644 --- a/Filtration.ObjectModel/BlockItemTypes/StackSizeBlockItem.cs +++ b/Filtration.ObjectModel/BlockItemTypes/StackSizeBlockItem.cs @@ -1,10 +1,20 @@ using System.Windows.Media; using Filtration.ObjectModel.BlockItemBaseTypes; +using Filtration.ObjectModel.Enums; namespace Filtration.ObjectModel.BlockItemTypes { public class StackSizeBlockItem : NumericFilterPredicateBlockItem { + public StackSizeBlockItem() + { + } + + public StackSizeBlockItem(FilterPredicateOperator predicateOperator, int predicateOperand) + : base(predicateOperator, predicateOperand) + { + } + public override string PrefixText => "StackSize"; public override int MaximumAllowed => 2; public override string DisplayHeading => "Stack Size"; diff --git a/Filtration.Parser.Tests/Services/TestItemFilterBlockTranslator.cs b/Filtration.Parser.Tests/Services/TestItemFilterBlockTranslator.cs index e05f9d4..3fcc7bc 100644 --- a/Filtration.Parser.Tests/Services/TestItemFilterBlockTranslator.cs +++ b/Filtration.Parser.Tests/Services/TestItemFilterBlockTranslator.cs @@ -318,6 +318,42 @@ namespace Filtration.Parser.Tests.Services Assert.AreEqual(FilterPredicateOperator.Equal, blockItem.FilterPredicate.PredicateOperator); } + [Test] + public void TranslateStringToItemFilterBlock_GemLevel_ReturnsCorrectObject() + { + // Arrange + var inputString = "Show" + Environment.NewLine + + " GemLevel = 20"; + + // Act + var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript); + + // Assert + + Assert.AreEqual(1, result.BlockItems.Count(b => b is GemLevelBlockItem)); + var blockItem = result.BlockItems.OfType().First(); + Assert.AreEqual(20, blockItem.FilterPredicate.PredicateOperand); + Assert.AreEqual(FilterPredicateOperator.Equal, blockItem.FilterPredicate.PredicateOperator); + } + + [Test] + public void TranslateStringToItemFilterBlock_StackSize_ReturnsCorrectObject() + { + // Arrange + var inputString = "Show" + Environment.NewLine + + " StackSize > 5"; + + // Act + var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript); + + // Assert + + Assert.AreEqual(1, result.BlockItems.Count(b => b is StackSizeBlockItem)); + var blockItem = result.BlockItems.OfType().First(); + Assert.AreEqual(5, blockItem.FilterPredicate.PredicateOperand); + Assert.AreEqual(FilterPredicateOperator.GreaterThan, blockItem.FilterPredicate.PredicateOperator); + } + [Test] public void TranslateStringToItemFilterBlock_Corrupted_ReturnsCorrectObject() { @@ -494,6 +530,25 @@ namespace Filtration.Parser.Tests.Services Assert.Contains("Test BaseType 2", blockItem.Items); } + [Test] + public void TranslateStringToItemFilterBlock_HasExplicitMod_ReturnsCorrectObject() + { + // Arrange + var inputString = "Show" + Environment.NewLine + + @" HasExplicitMod ""Test Mod 1"" ""TestOneWordModInQuotes"" TestOneWordModNotInQuotes ""Test Mod 2"""; + + // Act + var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript); + + // Assert + Assert.AreEqual(1, result.BlockItems.Count(b => b is BaseTypeBlockItem)); + var blockItem = result.BlockItems.OfType().First(); + Assert.Contains("Test Mod 1", blockItem.Items); + Assert.Contains("TestOneWordModInQuotes", blockItem.Items); + Assert.Contains("TestOneWordModNotInQuotes", blockItem.Items); + Assert.Contains("Test Mod 2", blockItem.Items); + } + [Test] public void TranslateStringToItemFilterBlock_Sockets_ReturnsCorrectObject() { @@ -813,6 +868,8 @@ namespace Filtration.Parser.Tests.Services "Show" + Environment.NewLine + " ItemLevel >= 50" + Environment.NewLine + " DropLevel < 70" + Environment.NewLine + + " GemLevel = 20" + Environment.NewLine + + " StackSize > 2" + Environment.NewLine + " Quality = 15" + Environment.NewLine + " Rarity <= Unique" + Environment.NewLine + " Identified True" + Environment.NewLine + @@ -822,6 +879,7 @@ namespace Filtration.Parser.Tests.Services " ShapedMap TRUE" + Environment.NewLine + @" Class ""My Item Class"" AnotherClass ""AndAnotherClass""" + Environment.NewLine + @" BaseType MyBaseType ""Another BaseType""" + Environment.NewLine + + @" HasExplicitMod MyMod ""Another Mod""" + Environment.NewLine + " JunkLine Let's ignore this one!" + Environment.NewLine + " #Quality Commented out quality line" + Environment.NewLine + " Sockets >= 3" + Environment.NewLine + @@ -861,6 +919,14 @@ namespace Filtration.Parser.Tests.Services Assert.AreEqual(FilterPredicateOperator.LessThan, dropLevelblockItem.FilterPredicate.PredicateOperator); Assert.AreEqual(70, dropLevelblockItem.FilterPredicate.PredicateOperand); + var gemLevelBlockItem = result.BlockItems.OfType().First(); + Assert.AreEqual(FilterPredicateOperator.Equal, gemLevelBlockItem.FilterPredicate.PredicateOperator); + Assert.AreEqual(20, gemLevelBlockItem.FilterPredicate.PredicateOperand); + + var stackSizeBlockItem = result.BlockItems.OfType().First(); + Assert.AreEqual(FilterPredicateOperator.GreaterThan, stackSizeBlockItem.FilterPredicate.PredicateOperator); + Assert.AreEqual(2, stackSizeBlockItem.FilterPredicate.PredicateOperand); + var qualityblockItem = result.BlockItems.OfType().First(); Assert.AreEqual(FilterPredicateOperator.Equal, qualityblockItem.FilterPredicate.PredicateOperator); Assert.AreEqual(15, qualityblockItem.FilterPredicate.PredicateOperand); @@ -880,6 +946,11 @@ namespace Filtration.Parser.Tests.Services Assert.Contains("MyBaseType", baseTypeblockItem.Items); Assert.Contains("Another BaseType", baseTypeblockItem.Items); + var hasExplicitModBlockItem = result.BlockItems.OfType().First(); + Assert.AreEqual(2, hasExplicitModBlockItem.Items.Count); + Assert.Contains("MyMod", hasExplicitModBlockItem.Items); + Assert.Contains("Another Mod", hasExplicitModBlockItem.Items); + var socketsblockItem = result.BlockItems.OfType().First(); Assert.AreEqual(FilterPredicateOperator.GreaterThanOrEqual, socketsblockItem.FilterPredicate.PredicateOperator); Assert.AreEqual(3, socketsblockItem.FilterPredicate.PredicateOperand); @@ -1334,6 +1405,38 @@ namespace Filtration.Parser.Tests.Services Assert.AreEqual(expectedResult, result); } + [Test] + public void TranslateItemFilterBlockToString_GemLevel_ReturnsCorrectString() + { + // Arrange + var expectedResult = "Show" + Environment.NewLine + + " GemLevel <= 15"; + + _testUtility.TestBlock.BlockItems.Add(new GemLevelBlockItem(FilterPredicateOperator.LessThanOrEqual, 15)); + + // Act + var result = _testUtility.Translator.TranslateItemFilterBlockToString(_testUtility.TestBlock); + + // Assert + Assert.AreEqual(expectedResult, result); + } + + [Test] + public void TranslateItemFilterBlockToString_StackSize_ReturnsCorrectString() + { + // Arrange + var expectedResult = "Show" + Environment.NewLine + + " StackSize = 5"; + + _testUtility.TestBlock.BlockItems.Add(new StackSizeBlockItem(FilterPredicateOperator.Equal, 5)); + + // Act + var result = _testUtility.Translator.TranslateItemFilterBlockToString(_testUtility.TestBlock); + + // Assert + Assert.AreEqual(expectedResult, result); + } + [Test] public void TranslateItemFilterBlockToString_Quality_ReturnsCorrectString() { @@ -1425,6 +1528,26 @@ namespace Filtration.Parser.Tests.Services Assert.AreEqual(expectedResult, result); } + [Test] + public void TranslateItemFilterBlockToString_HasExplicitMod_ReturnsCorrectString() + { + // Arrange + var expectedResult = "Show" + Environment.NewLine + + " HasExplicitMod \"Test Mod\" \"Another Mod\" \"Yet Another Mod\""; + + var hasExplicitModBlockItem = new HasExplicitModBlockItem(); + hasExplicitModBlockItem.Items.Add("Test Mod"); + hasExplicitModBlockItem.Items.Add("Another Mod"); + hasExplicitModBlockItem.Items.Add("Yet Another Mod"); + _testUtility.TestBlock.BlockItems.Add(hasExplicitModBlockItem); + + // Act + var result = _testUtility.Translator.TranslateItemFilterBlockToString(_testUtility.TestBlock); + + // Assert + Assert.AreEqual(expectedResult, result); + } + [Test] public void TranslateItemFilterBlockToString_Sockets_ReturnsCorrectString() { @@ -1706,9 +1829,12 @@ namespace Filtration.Parser.Tests.Services " ItemLevel > 70" + Environment.NewLine + " ItemLevel <= 85" + Environment.NewLine + " DropLevel > 56" + Environment.NewLine + + " GemLevel < 15" + Environment.NewLine + + " StackSize >= 4" + Environment.NewLine + " Rarity = Unique" + Environment.NewLine + " Class \"Body Armour\" \"Gloves\" \"Belt\" \"Two Hand Axes\"" + Environment.NewLine + " BaseType \"Greater Life Flask\" \"Simple Robe\" \"Full Wyrmscale\"" + Environment.NewLine + + " HasExplicitMod \"Guatelitzi's\" \"of Tacati\" \"Tyrannical\"" + Environment.NewLine + " SetTextColor 255 89 0 56" + Environment.NewLine + " SetBackgroundColor 0 0 0" + Environment.NewLine + " SetBorderColor 255 1 254" + Environment.NewLine + @@ -1735,6 +1861,11 @@ namespace Filtration.Parser.Tests.Services baseTypeItemblockItem.Items.Add("Simple Robe"); baseTypeItemblockItem.Items.Add("Full Wyrmscale"); _testUtility.TestBlock.BlockItems.Add(baseTypeItemblockItem); + var hasExplicitModBlockItem = new HasExplicitModBlockItem(); + hasExplicitModBlockItem.Items.Add("Guatelitzi's"); + hasExplicitModBlockItem.Items.Add("of Tacati"); + hasExplicitModBlockItem.Items.Add("Tyrannical"); + _testUtility.TestBlock.BlockItems.Add(hasExplicitModBlockItem); _testUtility.TestBlock.BlockItems.Add(new SocketsBlockItem(FilterPredicateOperator.LessThanOrEqual, 6)); _testUtility.TestBlock.BlockItems.Add(new LinkedSocketsBlockItem(FilterPredicateOperator.GreaterThanOrEqual, 4)); _testUtility.TestBlock.BlockItems.Add(new WidthBlockItem(FilterPredicateOperator.Equal, 3)); diff --git a/Filtration.Parser/Services/ItemFilterScriptTranslator.cs b/Filtration.Parser/Services/ItemFilterScriptTranslator.cs index c245487..3b61dcb 100644 --- a/Filtration.Parser/Services/ItemFilterScriptTranslator.cs +++ b/Filtration.Parser/Services/ItemFilterScriptTranslator.cs @@ -234,7 +234,7 @@ namespace Filtration.Parser.Services var outputString = string.Empty; outputString += "# Script edited with Filtration - https://github.com/ben-wallis/Filtration" + - Environment.NewLine; + Environment.NewLine + Environment.NewLine; if (script.ItemFilterScriptSettings.BlockGroupsEnabled) {