Fixed copy paste crashes

This commit is contained in:
Ben 2015-07-04 16:47:28 +01:00
parent 3a60a5005b
commit 0c470b3c97
7 changed files with 102 additions and 47 deletions

View File

@ -18,7 +18,8 @@ namespace Filtration.Tests.Services
{ {
// Arrange // Arrange
var testInputData = @"<UpdateData> var testInputData = @"<UpdateData>
<CurrentVersion>0.2</CurrentVersion> <LatestVersionMajorPart>1</LatestVersionMajorPart>
<LatestVersionMinorPart>3</LatestVersionMinorPart>
<ReleaseDate>2015-07-01</ReleaseDate> <ReleaseDate>2015-07-01</ReleaseDate>
<DownloadUrl>http://www.google.com</DownloadUrl> <DownloadUrl>http://www.google.com</DownloadUrl>
<ReleaseNotes>* Release notes line 1 <ReleaseNotes>* Release notes line 1
@ -28,7 +29,8 @@ namespace Filtration.Tests.Services
var expectedResult = new UpdateData var expectedResult = new UpdateData
{ {
CurrentVersion = 0.2m, LatestVersionMajorPart = 1,
LatestVersionMinorPart = 3,
DownloadUrl = "http://www.google.com", DownloadUrl = "http://www.google.com",
ReleaseDate = new DateTime(2015, 7, 1), ReleaseDate = new DateTime(2015, 7, 1),
ReleaseNotes = @"* Release notes line 1 ReleaseNotes = @"* Release notes line 1
@ -43,7 +45,8 @@ namespace Filtration.Tests.Services
var result = service.DeserializeUpdateData(testInputData); var result = service.DeserializeUpdateData(testInputData);
// Assert // Assert
Assert.AreEqual(expectedResult.CurrentVersion, result.CurrentVersion); Assert.AreEqual(expectedResult.LatestVersionMajorPart, result.LatestVersionMajorPart);
Assert.AreEqual(expectedResult.LatestVersionMinorPart, result.LatestVersionMinorPart);
Assert.AreEqual(expectedResult.DownloadUrl, result.DownloadUrl); Assert.AreEqual(expectedResult.DownloadUrl, result.DownloadUrl);
Assert.AreEqual(expectedResult.ReleaseDate, result.ReleaseDate); Assert.AreEqual(expectedResult.ReleaseDate, result.ReleaseDate);
Assert.AreEqual(expectedResult.ReleaseNotes, result.ReleaseNotes); Assert.AreEqual(expectedResult.ReleaseNotes, result.ReleaseNotes);

View File

@ -506,6 +506,7 @@ namespace Filtration.Tests.Translators
t => t =>
t.AddComponent(ThemeComponentType.TextColor, "Rare Item Text", t.AddComponent(ThemeComponentType.TextColor, "Rare Item Text",
new Color {A = 255, R = 255, G = 20, B = 100})).Returns(testComponent).Verifiable(); new Color {A = 255, R = 255, G = 20, B = 100})).Returns(testComponent).Verifiable();
_testUtility.MockThemeComponentListBuilder.SetupGet(t => t.IsInitialised).Returns(true);
// Act // Act
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString); var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString);
@ -1460,6 +1461,23 @@ namespace Filtration.Tests.Translators
Assert.AreEqual(0, testInputBlockItems.Count(b => b is BorderColorBlockItem)); Assert.AreEqual(0, testInputBlockItems.Count(b => b is BorderColorBlockItem));
} }
[Test]
public void ReplaceColorBlockItemsFromString_ThemeComponentBuilderNotInitialised_DoesNotCallAddComponent()
{
// Arrange
var testInputString = "SetTextColor 240 200 150 # Rarest Currency";
var testInputBlockItems = new ObservableCollection<IItemFilterBlockItem>();
var testInputBlockItem = new TextColorBlockItem(Colors.Red);
testInputBlockItems.Add(testInputBlockItem);
_testUtility.MockThemeComponentListBuilder.Setup(t => t.AddComponent(It.IsAny<ThemeComponentType>(), It.IsAny<string>(), It.IsAny<Color>())).Verifiable();
// Act
_testUtility.Translator.ReplaceColorBlockItemsFromString(testInputBlockItems, testInputString);
// Assert
_testUtility.MockThemeComponentListBuilder.Verify(t => t.AddComponent(It.IsAny<ThemeComponentType>(), It.IsAny<string>(), It.IsAny<Color>()), Times.Never);
}
private class ItemFilterBlockTranslatorTestUtility private class ItemFilterBlockTranslatorTestUtility
{ {
public ItemFilterBlockTranslatorTestUtility() public ItemFilterBlockTranslatorTestUtility()

View File

@ -20,6 +20,7 @@ namespace Filtration.Tests.Translators
var testInputColor = new Color(); var testInputColor = new Color();
var builder = new ThemeComponentListBuilder(); var builder = new ThemeComponentListBuilder();
builder.Initialise();
// Act // Act
var firstResult = builder.AddComponent(testInputTargetType, testInputComponentName, testInputColor); var firstResult = builder.AddComponent(testInputTargetType, testInputComponentName, testInputColor);
@ -28,5 +29,32 @@ namespace Filtration.Tests.Translators
// Assert // Assert
Assert.AreSame(firstResult, secondResult); Assert.AreSame(firstResult, secondResult);
} }
[Test]
public void IsInitialised_NotInitialised_ReturnsFalse()
{
// Arrange
var builder = new ThemeComponentListBuilder();
// Act
var result = builder.IsInitialised;
// Assert
Assert.IsFalse(result);
}
[Test]
public void IsInitialised_Initialised_ReturnsTrue()
{
// Arrange
var builder = new ThemeComponentListBuilder();
builder.Initialise();
// Act
var result = builder.IsInitialised;
// Assert
Assert.IsTrue(result);
}
} }
} }

View File

@ -71,7 +71,6 @@ namespace Filtration
public void OnDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e) public void OnDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{ {
_logger.Fatal(e.Exception); _logger.Fatal(e.Exception);
var exception = e.Exception.Message + Environment.NewLine + e.Exception.StackTrace; var exception = e.Exception.Message + Environment.NewLine + e.Exception.StackTrace;
var innerException = e.Exception.InnerException != null var innerException = e.Exception.InnerException != null
? e.Exception.InnerException.Message + Environment.NewLine + ? e.Exception.InnerException.Message + Environment.NewLine +

View File

@ -293,14 +293,17 @@ namespace Filtration.Translators
{ {
throw new Exception("Parsing error - unknown theme component type"); throw new Exception("Parsing error - unknown theme component type");
} }
if (_themeComponentListBuilder.IsInitialised)
blockItem.ThemeComponent = _themeComponentListBuilder.AddComponent(componentType, componentName, blockItem.Color); {
blockItem.ThemeComponent = _themeComponentListBuilder.AddComponent(componentType, componentName,
blockItem.Color);
}
} }
return blockItem; return blockItem;
} }
public void ReplaceColorBlockItemsFromString(ObservableCollection<IItemFilterBlockItem> blockItems , string inputString) public void ReplaceColorBlockItemsFromString(ObservableCollection<IItemFilterBlockItem> blockItems, string inputString)
{ {
// Reverse iterate to remove existing IAudioVisualBlockItems // Reverse iterate to remove existing IAudioVisualBlockItems
for (var idx = blockItems.Count - 1; idx >= 0; idx--) for (var idx = blockItems.Count - 1; idx >= 0; idx--)
@ -343,25 +346,6 @@ namespace Filtration.Translators
} }
} }
private void ReplaceColorBlockItem<T>(ObservableCollection<IItemFilterBlockItem> blockItems, string inputString) where T : ColorBlockItem
{
var newBlockItem = GetColorBlockItemFromString<T>(inputString);
var existingBlockItem = blockItems.OfType<T>().FirstOrDefault();
blockItems.Remove(existingBlockItem);
blockItems.Add(newBlockItem);
}
private void ReplaceFontSizeBlockItem(ObservableCollection<IItemFilterBlockItem> blockItems, string inputString)
{
var match = Regex.Match(inputString, @"\s+(\d+)");
if (!match.Success) return;
var newBlockItem = new FontSizeBlockItem(Convert.ToInt16(match.Value));
var existingBlockItem = blockItems.OfType<FontSizeBlockItem>().FirstOrDefault();
blockItems.Remove(existingBlockItem);
blockItems.Add(newBlockItem);
}
private void AddBlockGroupToBlock(ItemFilterBlock block, string inputString) private void AddBlockGroupToBlock(ItemFilterBlock block, string inputString)
{ {
var blockGroupStart = inputString.IndexOf("#", StringComparison.Ordinal); var blockGroupStart = inputString.IndexOf("#", StringComparison.Ordinal);

View File

@ -10,6 +10,8 @@ namespace Filtration.Translators
internal interface IThemeComponentListBuilder internal interface IThemeComponentListBuilder
{ {
void Initialise(); void Initialise();
void Initialise(List<ThemeComponent> themeComponents);
bool IsInitialised { get; }
ThemeComponent AddComponent(ThemeComponentType componentType, string componentName, Color componentColor); ThemeComponent AddComponent(ThemeComponentType componentType, string componentName, Color componentColor);
List<ThemeComponent> GetComponents(); List<ThemeComponent> GetComponents();
void Cleanup(); void Cleanup();
@ -21,7 +23,14 @@ namespace Filtration.Translators
public ThemeComponentListBuilder() public ThemeComponentListBuilder()
{ {
_themeComponents = new List<ThemeComponent>(); }
public bool IsInitialised
{
get
{
return _themeComponents != null;
}
} }
public void Initialise() public void Initialise()
@ -29,6 +38,11 @@ namespace Filtration.Translators
_themeComponents = new List<ThemeComponent>(); _themeComponents = new List<ThemeComponent>();
} }
public void Initialise(List<ThemeComponent> themeComponents)
{
_themeComponents = themeComponents;
}
public void Cleanup() public void Cleanup()
{ {
_themeComponents = null; _themeComponents = null;

View File

@ -532,6 +532,8 @@ namespace Filtration.ViewModels
} }
public void PasteBlock(IItemFilterBlockViewModel targetBlockViewModel) public void PasteBlock(IItemFilterBlockViewModel targetBlockViewModel)
{
try
{ {
var clipboardText = Clipboard.GetText(); var clipboardText = Clipboard.GetText();
if (clipboardText.IsNullOrEmpty()) return; if (clipboardText.IsNullOrEmpty()) return;
@ -544,7 +546,8 @@ namespace Filtration.ViewModels
if (ItemFilterBlockViewModels.Count > 0) if (ItemFilterBlockViewModels.Count > 0)
{ {
Script.ItemFilterBlocks.Insert(Script.ItemFilterBlocks.IndexOf(targetBlockViewModel.Block) + 1, translatedBlock); Script.ItemFilterBlocks.Insert(Script.ItemFilterBlocks.IndexOf(targetBlockViewModel.Block) + 1,
translatedBlock);
ItemFilterBlockViewModels.Insert(ItemFilterBlockViewModels.IndexOf(targetBlockViewModel) + 1, vm); ItemFilterBlockViewModels.Insert(ItemFilterBlockViewModels.IndexOf(targetBlockViewModel) + 1, vm);
} }
else else
@ -555,7 +558,13 @@ namespace Filtration.ViewModels
SelectedBlockViewModel = vm; SelectedBlockViewModel = vm;
IsDirty = true; IsDirty = true;
}
catch (Exception e)
{
_logger.Error(e);
MessageBox.Show(e.Message + Environment.NewLine + e.StackTrace + Environment.NewLine +
e.InnerException.Message + Environment.NewLine + e.InnerException.StackTrace, "Paste Error", MessageBoxButton.OK);
}
} }
private void OnMoveBlockToTopCommand() private void OnMoveBlockToTopCommand()