Fixed copy paste crashes
This commit is contained in:
parent
3a60a5005b
commit
0c470b3c97
|
@ -18,7 +18,8 @@ namespace Filtration.Tests.Services
|
|||
{
|
||||
// Arrange
|
||||
var testInputData = @"<UpdateData>
|
||||
<CurrentVersion>0.2</CurrentVersion>
|
||||
<LatestVersionMajorPart>1</LatestVersionMajorPart>
|
||||
<LatestVersionMinorPart>3</LatestVersionMinorPart>
|
||||
<ReleaseDate>2015-07-01</ReleaseDate>
|
||||
<DownloadUrl>http://www.google.com</DownloadUrl>
|
||||
<ReleaseNotes>* Release notes line 1
|
||||
|
@ -28,7 +29,8 @@ namespace Filtration.Tests.Services
|
|||
|
||||
var expectedResult = new UpdateData
|
||||
{
|
||||
CurrentVersion = 0.2m,
|
||||
LatestVersionMajorPart = 1,
|
||||
LatestVersionMinorPart = 3,
|
||||
DownloadUrl = "http://www.google.com",
|
||||
ReleaseDate = new DateTime(2015, 7, 1),
|
||||
ReleaseNotes = @"* Release notes line 1
|
||||
|
@ -43,7 +45,8 @@ namespace Filtration.Tests.Services
|
|||
var result = service.DeserializeUpdateData(testInputData);
|
||||
|
||||
// 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.ReleaseDate, result.ReleaseDate);
|
||||
Assert.AreEqual(expectedResult.ReleaseNotes, result.ReleaseNotes);
|
||||
|
|
|
@ -506,6 +506,7 @@ namespace Filtration.Tests.Translators
|
|||
t =>
|
||||
t.AddComponent(ThemeComponentType.TextColor, "Rare Item Text",
|
||||
new Color {A = 255, R = 255, G = 20, B = 100})).Returns(testComponent).Verifiable();
|
||||
_testUtility.MockThemeComponentListBuilder.SetupGet(t => t.IsInitialised).Returns(true);
|
||||
|
||||
// Act
|
||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString);
|
||||
|
@ -1460,6 +1461,23 @@ namespace Filtration.Tests.Translators
|
|||
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
|
||||
{
|
||||
public ItemFilterBlockTranslatorTestUtility()
|
||||
|
|
|
@ -20,6 +20,7 @@ namespace Filtration.Tests.Translators
|
|||
var testInputColor = new Color();
|
||||
|
||||
var builder = new ThemeComponentListBuilder();
|
||||
builder.Initialise();
|
||||
|
||||
// Act
|
||||
var firstResult = builder.AddComponent(testInputTargetType, testInputComponentName, testInputColor);
|
||||
|
@ -28,5 +29,32 @@ namespace Filtration.Tests.Translators
|
|||
// Assert
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,7 +71,6 @@ namespace Filtration
|
|||
public void OnDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
|
||||
{
|
||||
_logger.Fatal(e.Exception);
|
||||
|
||||
var exception = e.Exception.Message + Environment.NewLine + e.Exception.StackTrace;
|
||||
var innerException = e.Exception.InnerException != null
|
||||
? e.Exception.InnerException.Message + Environment.NewLine +
|
||||
|
|
|
@ -293,14 +293,17 @@ namespace Filtration.Translators
|
|||
{
|
||||
throw new Exception("Parsing error - unknown theme component type");
|
||||
}
|
||||
|
||||
blockItem.ThemeComponent = _themeComponentListBuilder.AddComponent(componentType, componentName, blockItem.Color);
|
||||
if (_themeComponentListBuilder.IsInitialised)
|
||||
{
|
||||
blockItem.ThemeComponent = _themeComponentListBuilder.AddComponent(componentType, componentName,
|
||||
blockItem.Color);
|
||||
}
|
||||
}
|
||||
|
||||
return blockItem;
|
||||
}
|
||||
|
||||
public void ReplaceColorBlockItemsFromString(ObservableCollection<IItemFilterBlockItem> blockItems , string inputString)
|
||||
public void ReplaceColorBlockItemsFromString(ObservableCollection<IItemFilterBlockItem> blockItems, string inputString)
|
||||
{
|
||||
// Reverse iterate to remove existing IAudioVisualBlockItems
|
||||
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)
|
||||
{
|
||||
var blockGroupStart = inputString.IndexOf("#", StringComparison.Ordinal);
|
||||
|
|
|
@ -10,6 +10,8 @@ namespace Filtration.Translators
|
|||
internal interface IThemeComponentListBuilder
|
||||
{
|
||||
void Initialise();
|
||||
void Initialise(List<ThemeComponent> themeComponents);
|
||||
bool IsInitialised { get; }
|
||||
ThemeComponent AddComponent(ThemeComponentType componentType, string componentName, Color componentColor);
|
||||
List<ThemeComponent> GetComponents();
|
||||
void Cleanup();
|
||||
|
@ -21,7 +23,14 @@ namespace Filtration.Translators
|
|||
|
||||
public ThemeComponentListBuilder()
|
||||
{
|
||||
_themeComponents = new List<ThemeComponent>();
|
||||
}
|
||||
|
||||
public bool IsInitialised
|
||||
{
|
||||
get
|
||||
{
|
||||
return _themeComponents != null;
|
||||
}
|
||||
}
|
||||
|
||||
public void Initialise()
|
||||
|
@ -29,6 +38,11 @@ namespace Filtration.Translators
|
|||
_themeComponents = new List<ThemeComponent>();
|
||||
}
|
||||
|
||||
public void Initialise(List<ThemeComponent> themeComponents)
|
||||
{
|
||||
_themeComponents = themeComponents;
|
||||
}
|
||||
|
||||
public void Cleanup()
|
||||
{
|
||||
_themeComponents = null;
|
||||
|
|
|
@ -532,6 +532,8 @@ namespace Filtration.ViewModels
|
|||
}
|
||||
|
||||
public void PasteBlock(IItemFilterBlockViewModel targetBlockViewModel)
|
||||
{
|
||||
try
|
||||
{
|
||||
var clipboardText = Clipboard.GetText();
|
||||
if (clipboardText.IsNullOrEmpty()) return;
|
||||
|
@ -544,7 +546,8 @@ namespace Filtration.ViewModels
|
|||
|
||||
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);
|
||||
}
|
||||
else
|
||||
|
@ -555,7 +558,13 @@ namespace Filtration.ViewModels
|
|||
|
||||
SelectedBlockViewModel = vm;
|
||||
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()
|
||||
|
|
Loading…
Reference in New Issue