فهرست منبع

Wrote few tests

flabbet 5 سال پیش
والد
کامیت
6c1fc30ddc

+ 1 - 0
PixiEditor/Models/Tools/Tool.cs

@@ -1,6 +1,7 @@
 using System.Windows.Input;
 using PixiEditor.Helpers;
 using PixiEditor.Models.Tools.ToolSettings;
+using PixiEditor.Models.Tools.ToolSettings.Toolbars;
 
 namespace PixiEditor.Models.Tools
 {

+ 3 - 0
PixiEditor/Models/Tools/ToolSettings/Toolbars/BasicToolbar.cs

@@ -2,6 +2,9 @@
 
 namespace PixiEditor.Models.Tools.ToolSettings.Toolbars
 {
+    /// <summary>
+    ///     Toolbar with size setting
+    /// </summary>
     public class BasicToolbar : Toolbar
     {
         public BasicToolbar()

+ 3 - 1
PixiEditor/Models/Tools/ToolSettings/Toolbars/EmptyToolbar.cs

@@ -1,4 +1,6 @@
-namespace PixiEditor.Models.Tools.ToolSettings
+using PixiEditor.Models.Tools.ToolSettings.Toolbars;
+
+namespace PixiEditor.Models.Tools.ToolSettings
 {
     public class EmptyToolbar : Toolbar
     {

+ 19 - 15
PixiEditor/Models/Tools/ToolSettings/Toolbars/Toolbar.cs

@@ -1,22 +1,23 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.Linq;
 
-namespace PixiEditor.Models.Tools.ToolSettings
+namespace PixiEditor.Models.Tools.ToolSettings.Toolbars
 {
     public abstract class Toolbar
     {
-        private static readonly List<Setting> _sharedSettings = new List<Setting>();
+        private static readonly List<Setting> SharedSettings = new List<Setting>();
         public ObservableCollection<Setting> Settings { get; set; } = new ObservableCollection<Setting>();
 
+        /// <summary>
+        ///     Gets setting in toolbar by name.
+        /// </summary>
+        /// <param name="name">Setting name, non case sensitive</param>
+        /// <returns></returns>
         public virtual Setting GetSetting(string name)
         {
-            return Settings.FirstOrDefault(x => x.Name == name);
-        }
-
-        public virtual Setting[] GetSettings(string name)
-        {
-            return Settings.Where(x => x.Name == name).ToArray();
+            return Settings.FirstOrDefault(x => string.Equals(x.Name, name, StringComparison.CurrentCultureIgnoreCase));
         }
 
         /// <summary>
@@ -25,17 +26,20 @@ namespace PixiEditor.Models.Tools.ToolSettings
         public void SaveToolbarSettings()
         {
             for (int i = 0; i < Settings.Count; i++)
-                if (_sharedSettings.Any(x => x.Name == Settings[i].Name))
-                    _sharedSettings.First(x => x.Name == Settings[i].Name).Value = Settings[i].Value;
+                if (SharedSettings.Any(x => x.Name == Settings[i].Name))
+                    SharedSettings.First(x => x.Name == Settings[i].Name).Value = Settings[i].Value;
                 else
-                    _sharedSettings.Add(Settings[i]);
+                    SharedSettings.Add(Settings[i]);
         }
 
+        /// <summary>
+        ///     Loads common settings saved from previous tools to current one.
+        /// </summary>
         public void LoadSharedSettings()
         {
-            for (int i = 0; i < _sharedSettings.Count; i++)
-                if (Settings.Any(x => x.Name == _sharedSettings[i].Name))
-                    Settings.First(x => x.Name == _sharedSettings[i].Name).Value = _sharedSettings[i].Value;
+            for (int i = 0; i < SharedSettings.Count; i++)
+                if (Settings.Any(x => x.Name == SharedSettings[i].Name))
+                    Settings.First(x => x.Name == SharedSettings[i].Name).Value = SharedSettings[i].Value;
         }
     }
 }

+ 13 - 2
PixiEditor/Models/Tools/Tools/LineTool.cs

@@ -26,11 +26,22 @@ namespace PixiEditor.Models.Tools.Tools
             var pixels =
                 BitmapPixelChanges.FromSingleColoredArray(
                     CreateLine(coordinates, 
-                        (int) Toolbar.GetSetting("ToolSize").Value, CapType.Round, CapType.Round), color);
+                        (int) Toolbar.GetSetting("ToolSize").Value, CapType.Square, CapType.Square), color);
             return Only(pixels, layer);
         }
 
-        public Coordinates[] CreateLine(Coordinates[] coordinates, int thickness, CapType startCap, CapType endCap)
+        public Coordinates[] CreateLine(Coordinates start, Coordinates end, int thickness)
+        {
+            return CreateLine(new[] { end, start }, thickness, CapType.Square, CapType.Square);
+        }
+
+        public Coordinates[] CreateLine(Coordinates start, Coordinates end, int thickness, CapType startCap,
+            CapType endCap)
+        {
+            return CreateLine(new[] {end, start}, thickness, startCap, endCap);
+        }
+
+        private Coordinates[] CreateLine(Coordinates[] coordinates, int thickness, CapType startCap, CapType endCap)
         {
             Coordinates startingCoordinates = coordinates[^1];
             Coordinates latestCoordinates = coordinates[0];

+ 1 - 2
PixiEditor/Models/Tools/Tools/PenTool.cs

@@ -33,8 +33,7 @@ namespace PixiEditor.Models.Tools.Tools
         {
             LineTool line = new LineTool();
             return BitmapPixelChanges.FromSingleColoredArray(
-                line.CreateLine(new[] { startingCoords, latestCords }, toolSize, 
-                    CapType.Square, CapType.Square), color);
+                line.CreateLine(startingCoords, latestCords, toolSize), color);
         }
     }
 }

+ 1 - 0
PixiEditorTests/ModelsTests/ControllersTests/ShortcutControllerTests.cs

@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
 using System.Text;
 using System.Windows;
 using System.Windows.Input;

+ 35 - 0
PixiEditorTests/ModelsTests/ToolsTests/LineToolTests.cs

@@ -0,0 +1,35 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using PixiEditor.Models.DataHolders;
+using PixiEditor.Models.Enums;
+using PixiEditor.Models.Layers;
+using PixiEditor.Models.Position;
+using PixiEditor.Models.Tools.Tools;
+using Xunit;
+
+namespace PixiEditorTests.ModelsTests.ToolsTests
+{
+    [Collection("Application collection")]
+    public class LineToolTests
+    {
+        [StaTheory]
+        [InlineData(2)]
+        [InlineData(10)]
+        [InlineData(100)]
+        public void TestThatCreateLineCreatesDiagonalLine(int length)
+        {
+            LineTool lineTool = new LineTool();
+
+            var line = lineTool.CreateLine(new Coordinates(0,0), new Coordinates(length - 1, length - 1), 1);
+
+            Assert.Equal(length, line.Length);
+
+            for (int i = 0; i < length; i++)
+            {
+                Assert.Contains(new Coordinates(i,i), line);
+            }
+        }
+    }
+}

+ 44 - 0
PixiEditorTests/ModelsTests/ToolsTests/ToolbarTests/ToolbarBaseTests.cs

@@ -0,0 +1,44 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using PixiEditor.Models.Tools.ToolSettings;
+using PixiEditor.Models.Tools.ToolSettings.Toolbars;
+using Xunit;
+
+namespace PixiEditorTests.ModelsTests.ToolsTests.ToolbarTests
+{
+    [Collection("Application collection")]
+    public class ToolbarBaseTests
+    {
+
+        [StaFact]
+        public void TestThatGetSettingReturnsCorrectSetting()
+        {
+            BasicToolbar toolbar = new BasicToolbar();
+            string settingName = "ToolSize";
+
+            Setting setting = toolbar.GetSetting(settingName);
+
+            Assert.NotNull(setting);
+            Assert.Equal(settingName,setting.Name);
+        }
+
+        [StaFact]
+        public void TestThatSaveToolbarSettingsSavesSettingAndLoadsItIntoNewToolbar()
+        {
+            BasicToolbar toolbar = new BasicToolbar();
+
+            toolbar.Settings[0].Value = 5;
+
+            toolbar.SaveToolbarSettings();
+
+            BasicShapeToolbar shapeToolbar = new BasicShapeToolbar();
+
+            Assert.NotEqual(5, (int)shapeToolbar.GetSetting("ToolSize").Value);
+
+            shapeToolbar.LoadSharedSettings();
+
+            Assert.Equal(5, (int)shapeToolbar.GetSetting("ToolSize").Value);
+        }
+    }
+}

+ 1 - 6
PixiEditorTests/ViewModelsTests/ViewModelMainTests.cs

@@ -1,15 +1,10 @@
-using System.Diagnostics.CodeAnalysis;
-using System.IO;
-using System.Windows;
-using System.Windows.Input;
+using System.IO;
 using System.Windows.Media;
-using PixiEditor;
 using PixiEditor.Models.Controllers;
 using PixiEditor.Models.DataHolders;
 using PixiEditor.Models.IO;
 using PixiEditor.Models.Position;
 using PixiEditor.Models.Tools;
-using PixiEditor.Models.Tools.Tools;
 using PixiEditor.ViewModels;
 using Xunit;