From 6be29dbd280ce49fb1a7e8f25bfb6d62e8ac1b1b Mon Sep 17 00:00:00 2001 From: azakhi Date: Fri, 31 Aug 2018 16:02:17 +0300 Subject: [PATCH] Add tests and fix theme bug --- .../Services/TestItemFilterBlockTranslator.cs | 59 +++++++++++++++++-- .../Services/ItemFilterBlockTranslator.cs | 35 ++++++----- 2 files changed, 71 insertions(+), 23 deletions(-) diff --git a/Filtration.Parser.Tests/Services/TestItemFilterBlockTranslator.cs b/Filtration.Parser.Tests/Services/TestItemFilterBlockTranslator.cs index 8da9022..d21aef7 100644 --- a/Filtration.Parser.Tests/Services/TestItemFilterBlockTranslator.cs +++ b/Filtration.Parser.Tests/Services/TestItemFilterBlockTranslator.cs @@ -405,6 +405,24 @@ namespace Filtration.Parser.Tests.Services Assert.IsTrue(blockItem.BooleanValue); } + [Test] + public void TranslateStringToItemFilterBlock_MapTier_ReturnsCorrectObject() + { + // Arrange + var inputString = "Show" + Environment.NewLine + + " MapTier >= 15"; + + // Act + var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript); + + // Assert + + Assert.AreEqual(1, result.BlockItems.Count(b => b is MapTierBlockItem)); + var blockItem = result.BlockItems.OfType().First(); + Assert.AreEqual(15, blockItem.FilterPredicate.PredicateOperand); + Assert.AreEqual(FilterPredicateOperator.GreaterThanOrEqual, blockItem.FilterPredicate.PredicateOperator); + } + [Test] public void TranslateStringToItemFilterBlock_ShapedMap_ReturnsCorrectObject() { @@ -925,7 +943,10 @@ namespace Filtration.Parser.Tests.Services " SetBorderColor 0 0 0" + Environment.NewLine + " SetFontSize 50" + Environment.NewLine + " PlayAlertSound 3" + Environment.NewLine + - " DisableDropSound False" + Environment.NewLine; + " DisableDropSound False" + Environment.NewLine + + " CustomAlertSound \"test.mp3\" # customSoundTheme" + Environment.NewLine + + " MinimapIcon 2 Green Triangle # iconTheme" + Environment.NewLine + + " PlayEffect Green Temp # effectTheme" + Environment.NewLine; // Act var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript); @@ -1023,13 +1044,41 @@ namespace Filtration.Parser.Tests.Services var fontSizeblockItem = result.BlockItems.OfType().First(); Assert.AreEqual(50, fontSizeblockItem.Value); - - var soundblockItem = result.BlockItems.OfType().First(); - Assert.AreEqual("3", soundblockItem.Value); - Assert.AreEqual(79, soundblockItem.SecondValue); + + Assert.AreEqual(0, result.BlockItems.OfType().Count()); var disableDropSoundBlockItem = result.BlockItems.OfType().First(); Assert.IsFalse(disableDropSoundBlockItem.BooleanValue); + + var customSoundBlockItem = result.BlockItems.OfType().First(); + Assert.AreEqual("test.mp3", customSoundBlockItem.Value); + Assert.AreNotEqual(null, customSoundBlockItem.ThemeComponent); + Assert.AreEqual(ThemeComponentType.CustomSound, customSoundBlockItem.ThemeComponent.ComponentType); + Assert.AreEqual("customSoundTheme", customSoundBlockItem.ThemeComponent.ComponentName); + Assert.AreEqual(typeof(StringThemeComponent), customSoundBlockItem.ThemeComponent.GetType()); + Assert.AreEqual("test.mp3", ((StringThemeComponent)customSoundBlockItem.ThemeComponent).Value); + + var mapIconBlockItem = result.BlockItems.OfType().First(); + Assert.AreEqual(IconSize.Small, mapIconBlockItem.Size); + Assert.AreEqual(IconColor.Green, mapIconBlockItem.Color); + Assert.AreEqual(IconShape.Triangle, mapIconBlockItem.Shape); + Assert.AreNotEqual(null, mapIconBlockItem.ThemeComponent); + Assert.AreEqual(ThemeComponentType.Icon, mapIconBlockItem.ThemeComponent.ComponentType); + Assert.AreEqual("iconTheme", mapIconBlockItem.ThemeComponent.ComponentName); + Assert.AreEqual(typeof(IconThemeComponent), mapIconBlockItem.ThemeComponent.GetType()); + Assert.AreEqual(IconSize.Small, ((IconThemeComponent)mapIconBlockItem.ThemeComponent).IconSize); + Assert.AreEqual(IconColor.Green, ((IconThemeComponent)mapIconBlockItem.ThemeComponent).IconColor); + Assert.AreEqual(IconShape.Triangle, ((IconThemeComponent)mapIconBlockItem.ThemeComponent).IconShape); + + var effectColorBlockItem = result.BlockItems.OfType().First(); + Assert.AreEqual(EffectColor.Green, effectColorBlockItem.Color); + Assert.IsTrue(effectColorBlockItem.Temporary); + Assert.AreNotEqual(null, effectColorBlockItem.ThemeComponent); + Assert.AreEqual(ThemeComponentType.Effect, effectColorBlockItem.ThemeComponent.ComponentType); + Assert.AreEqual("effectTheme", effectColorBlockItem.ThemeComponent.ComponentName); + Assert.AreEqual(typeof(EffectColorThemeComponent), effectColorBlockItem.ThemeComponent.GetType()); + Assert.AreEqual(EffectColor.Green, ((EffectColorThemeComponent)effectColorBlockItem.ThemeComponent).EffectColor); + Assert.IsTrue(((EffectColorThemeComponent)effectColorBlockItem.ThemeComponent).Temporary); } [Test] diff --git a/Filtration.Parser/Services/ItemFilterBlockTranslator.cs b/Filtration.Parser/Services/ItemFilterBlockTranslator.cs index 385a311..9d27596 100644 --- a/Filtration.Parser/Services/ItemFilterBlockTranslator.cs +++ b/Filtration.Parser/Services/ItemFilterBlockTranslator.cs @@ -86,8 +86,7 @@ namespace Filtration.Parser.Services var fullLine = line.Trim(); var trimmedLine = fullLine; var blockComment = ""; - var nextBlockIndex = block.BlockItems.Count; - ThemeComponentType themeComponentType = ThemeComponentType.AlertSound; + var themeComponentType = -1; if(trimmedLine.IndexOf('#') > 0) { blockComment = trimmedLine.Substring(trimmedLine.IndexOf('#') + 1); @@ -221,7 +220,7 @@ namespace Filtration.Parser.Services var blockItem = new TextColorBlockItem(); blockItem.Color = GetColorFromString(result[0].Groups[1].Value); block.BlockItems.Add(blockItem); - themeComponentType = ThemeComponentType.TextColor; + themeComponentType = (int)ThemeComponentType.TextColor; break; } case "SetBackgroundColor": @@ -234,7 +233,7 @@ namespace Filtration.Parser.Services var blockItem = new BackgroundColorBlockItem(); blockItem.Color = GetColorFromString(result[0].Groups[1].Value); block.BlockItems.Add(blockItem); - themeComponentType = ThemeComponentType.BackgroundColor; + themeComponentType = (int)ThemeComponentType.BackgroundColor; break; } case "SetBorderColor": @@ -247,7 +246,7 @@ namespace Filtration.Parser.Services var blockItem = new BorderColorBlockItem(); blockItem.Color = GetColorFromString(result[0].Groups[1].Value); block.BlockItems.Add(blockItem); - themeComponentType = ThemeComponentType.BorderColor; + themeComponentType = (int)ThemeComponentType.BorderColor; break; } case "SetFontSize": @@ -260,8 +259,8 @@ namespace Filtration.Parser.Services { var blockItem = new FontSizeBlockItem(Convert.ToInt16(match[0].Groups[2].Value)); block.BlockItems.Add(blockItem); + themeComponentType = (int)ThemeComponentType.FontSize; } - themeComponentType = ThemeComponentType.FontSize; break; } case "PlayAlertSound": @@ -305,9 +304,9 @@ namespace Filtration.Parser.Services SecondValue = secondValue }; block.BlockItems.Add(blockItemValue); - } - } - themeComponentType = ThemeComponentType.AlertSound; + } + themeComponentType = (int)ThemeComponentType.AlertSound; + } break; } case "GemLevel": @@ -364,8 +363,8 @@ namespace Filtration.Parser.Services blockItemValue.ThemeComponent = themeComponent; } block.BlockItems.Add(blockItemValue); + themeComponentType = (int)ThemeComponentType.Icon; } - themeComponentType = ThemeComponentType.Icon; break; } case "PlayEffect": @@ -383,9 +382,9 @@ namespace Filtration.Parser.Services Color = EnumHelper.GetEnumValueFromDescription(match.Groups[1].Value), Temporary = match.Groups[2].Value.Trim().ToLower() == "temp" }; - block.BlockItems.Add(blockItemValue); + block.BlockItems.Add(blockItemValue); + themeComponentType = (int)ThemeComponentType.Effect; } - themeComponentType = ThemeComponentType.Effect; break; } case "CustomAlertSound": @@ -403,9 +402,9 @@ namespace Filtration.Parser.Services { Value = match.Groups[1].Value }; - block.BlockItems.Add(blockItemValue); - } - themeComponentType = ThemeComponentType.CustomSound; + block.BlockItems.Add(blockItemValue); + themeComponentType = (int)ThemeComponentType.CustomSound; + } break; } case "MapTier": @@ -422,9 +421,9 @@ namespace Filtration.Parser.Services { block.BlockItems.Last().Comment = blockComment; } - else if(nextBlockIndex == block.BlockItems.Count - 1) // If these 2 are not equal, this theme doesn't belong to last block + else { - switch(themeComponentType) + switch((ThemeComponentType)themeComponentType) { case ThemeComponentType.AlertSound: { @@ -461,7 +460,7 @@ namespace Filtration.Parser.Services ThemeComponent themeComponent = _masterComponentCollection.AddComponent(ThemeComponentType.CustomSound, blockComment.Trim(), ((CustomSoundBlockItem)blockItemWithTheme).Value); blockItemWithTheme.ThemeComponent = themeComponent; - break; + break; } case ThemeComponentType.Effect: {