From 692269ddb36ae0f76c62e574355ac6557c0c6a9a Mon Sep 17 00:00:00 2001 From: Ben Date: Mon, 22 Jun 2015 19:00:22 +0100 Subject: [PATCH] Fixed ColorBlock parsing to respect comments, preventing overflow errors when numbers are present in comments on these lines. --- .../TestItemFilterBlockTranslator.cs | 21 +++++++++++++++++++ .../Translators/ItemFilterBlockTranslator.cs | 5 ++++- .../ViewModels/ItemFilterScriptViewModel.cs | 6 ------ Filtration/ViewModels/MainWindowViewModel.cs | 6 +----- 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/Filtration.Tests/Translators/TestItemFilterBlockTranslator.cs b/Filtration.Tests/Translators/TestItemFilterBlockTranslator.cs index a693aff..43ef2e6 100644 --- a/Filtration.Tests/Translators/TestItemFilterBlockTranslator.cs +++ b/Filtration.Tests/Translators/TestItemFilterBlockTranslator.cs @@ -472,6 +472,27 @@ namespace Filtration.Tests.Translators Assert.AreEqual(100, blockItem.Color.B); } + [Test] + public void TranslateStringToItemFilterBlock_SetBorderColor_CommentWithLargeNumber_DoesNotThrow() + { + // Arrange + var inputString = "Show" + Environment.NewLine + + " SetBorderColor 255 20 100 # Some stuff 8504 with a number in a comment"; + + // Act + + Assert.DoesNotThrow(() => _testUtility.Translator.TranslateStringToItemFilterBlock(inputString)); + var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString); + + // Assert + Assert.AreEqual(1, result.BlockItems.Count(b => b is BorderColorBlockItem)); + var blockItem = result.BlockItems.OfType().First(); + Assert.AreEqual(255, blockItem.Color.R); + Assert.AreEqual(20, blockItem.Color.G); + Assert.AreEqual(100, blockItem.Color.B); + + } + [Test] public void TranslateStringToItemFilterBlock_SetFontSize_ReturnsCorrectObject() { diff --git a/Filtration/Translators/ItemFilterBlockTranslator.cs b/Filtration/Translators/ItemFilterBlockTranslator.cs index 36ee736..1e35598 100644 --- a/Filtration/Translators/ItemFilterBlockTranslator.cs +++ b/Filtration/Translators/ItemFilterBlockTranslator.cs @@ -260,7 +260,10 @@ namespace Filtration.Translators private static void AddColorItemToBlockItems(ItemFilterBlock block, string inputString) where T : ColorBlockItem { var blockItem = Activator.CreateInstance(); - blockItem.Color = GetColorFromString(inputString); + var result = Regex.Matches(inputString, @"([\w\s]*)[#]?(.*)"); + + // When Theme support is added result[0].Groups[2].Value will contain the ColorGroup in the comment if it exists. + blockItem.Color = GetColorFromString(result[0].Groups[1].Value); block.BlockItems.Add(blockItem); } diff --git a/Filtration/ViewModels/ItemFilterScriptViewModel.cs b/Filtration/ViewModels/ItemFilterScriptViewModel.cs index 6526bdc..9b34a69 100644 --- a/Filtration/ViewModels/ItemFilterScriptViewModel.cs +++ b/Filtration/ViewModels/ItemFilterScriptViewModel.cs @@ -23,7 +23,6 @@ namespace Filtration.ViewModels ItemFilterScript Script { get; } IItemFilterBlockViewModel SelectedBlockViewModel { get; set; } IItemFilterBlockViewModel SectionBrowserSelectedBlockViewModel { get; set; } - ObservableCollection BlockGroups { get; } IEnumerable ItemFilterSectionViewModels { get; } Predicate BlockFilterPredicate { get; set; } bool IsDirty { get; } @@ -183,11 +182,6 @@ namespace Filtration.ViewModels public ItemFilterScript Script { get; private set; } - public ObservableCollection BlockGroups - { - get { return Script.ItemFilterBlockGroups; } - } - public bool IsDirty { get { return _isDirty || HasDirtyChildren; } diff --git a/Filtration/ViewModels/MainWindowViewModel.cs b/Filtration/ViewModels/MainWindowViewModel.cs index deea5c0..a2a712b 100644 --- a/Filtration/ViewModels/MainWindowViewModel.cs +++ b/Filtration/ViewModels/MainWindowViewModel.cs @@ -1,17 +1,13 @@ -using System; -using System.Diagnostics; +using System.Diagnostics; using System.IO; using System.Reflection; using System.Windows.Forms; -using Filtration.Models; using Filtration.Repositories; -using Filtration.Services; using Filtration.Translators; using Filtration.Views; using GalaSoft.MvvmLight.CommandWpf; using GalaSoft.MvvmLight.Messaging; using Clipboard = System.Windows.Clipboard; -using MessageBox = System.Windows.Forms.MessageBox; using OpenFileDialog = Microsoft.Win32.OpenFileDialog; namespace Filtration.ViewModels