Fixed ColorBlock parsing to respect comments, preventing overflow errors when numbers are present in comments on these lines.

This commit is contained in:
Ben 2015-06-22 19:00:22 +01:00
parent 72e9caec29
commit 692269ddb3
4 changed files with 26 additions and 12 deletions

View File

@ -472,6 +472,27 @@ namespace Filtration.Tests.Translators
Assert.AreEqual(100, blockItem.Color.B); 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<BorderColorBlockItem>().First();
Assert.AreEqual(255, blockItem.Color.R);
Assert.AreEqual(20, blockItem.Color.G);
Assert.AreEqual(100, blockItem.Color.B);
}
[Test] [Test]
public void TranslateStringToItemFilterBlock_SetFontSize_ReturnsCorrectObject() public void TranslateStringToItemFilterBlock_SetFontSize_ReturnsCorrectObject()
{ {

View File

@ -260,7 +260,10 @@ namespace Filtration.Translators
private static void AddColorItemToBlockItems<T>(ItemFilterBlock block, string inputString) where T : ColorBlockItem private static void AddColorItemToBlockItems<T>(ItemFilterBlock block, string inputString) where T : ColorBlockItem
{ {
var blockItem = Activator.CreateInstance<T>(); var blockItem = Activator.CreateInstance<T>();
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); block.BlockItems.Add(blockItem);
} }

View File

@ -23,7 +23,6 @@ namespace Filtration.ViewModels
ItemFilterScript Script { get; } ItemFilterScript Script { get; }
IItemFilterBlockViewModel SelectedBlockViewModel { get; set; } IItemFilterBlockViewModel SelectedBlockViewModel { get; set; }
IItemFilterBlockViewModel SectionBrowserSelectedBlockViewModel { get; set; } IItemFilterBlockViewModel SectionBrowserSelectedBlockViewModel { get; set; }
ObservableCollection<ItemFilterBlockGroup> BlockGroups { get; }
IEnumerable<IItemFilterBlockViewModel> ItemFilterSectionViewModels { get; } IEnumerable<IItemFilterBlockViewModel> ItemFilterSectionViewModels { get; }
Predicate<IItemFilterBlockViewModel> BlockFilterPredicate { get; set; } Predicate<IItemFilterBlockViewModel> BlockFilterPredicate { get; set; }
bool IsDirty { get; } bool IsDirty { get; }
@ -183,11 +182,6 @@ namespace Filtration.ViewModels
public ItemFilterScript Script { get; private set; } public ItemFilterScript Script { get; private set; }
public ObservableCollection<ItemFilterBlockGroup> BlockGroups
{
get { return Script.ItemFilterBlockGroups; }
}
public bool IsDirty public bool IsDirty
{ {
get { return _isDirty || HasDirtyChildren; } get { return _isDirty || HasDirtyChildren; }

View File

@ -1,17 +1,13 @@
using System; using System.Diagnostics;
using System.Diagnostics;
using System.IO; using System.IO;
using System.Reflection; using System.Reflection;
using System.Windows.Forms; using System.Windows.Forms;
using Filtration.Models;
using Filtration.Repositories; using Filtration.Repositories;
using Filtration.Services;
using Filtration.Translators; using Filtration.Translators;
using Filtration.Views; using Filtration.Views;
using GalaSoft.MvvmLight.CommandWpf; using GalaSoft.MvvmLight.CommandWpf;
using GalaSoft.MvvmLight.Messaging; using GalaSoft.MvvmLight.Messaging;
using Clipboard = System.Windows.Clipboard; using Clipboard = System.Windows.Clipboard;
using MessageBox = System.Windows.Forms.MessageBox;
using OpenFileDialog = Microsoft.Win32.OpenFileDialog; using OpenFileDialog = Microsoft.Win32.OpenFileDialog;
namespace Filtration.ViewModels namespace Filtration.ViewModels