Skip to content

Commit 4541f8c

Browse files
committed
Coding enhancements in DumpManager and tests
1 parent 3d5ee0a commit 4541f8c

File tree

4 files changed

+75
-21
lines changed

4 files changed

+75
-21
lines changed

Aquality.Selenium.Core/src/Aquality.Selenium.Core/Aquality.Selenium.Core.xml

Lines changed: 22 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Aquality.Selenium.Core/src/Aquality.Selenium.Core/Visualization/DumpManager.cs

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using Aquality.Selenium.Core.Configurations;
22
using Aquality.Selenium.Core.Elements.Interfaces;
33
using Aquality.Selenium.Core.Localization;
4-
using SkiaSharp;
54
using System;
65
using System.Collections.Generic;
76
using System.Globalization;
@@ -39,15 +38,7 @@ public virtual float Compare(string dumpName = null)
3938
{
4039
var directory = GetDumpDirectory(dumpName);
4140
LocalizedLogger.Info("loc.form.dump.compare", directory.Name);
42-
if (!directory.Exists)
43-
{
44-
throw new InvalidOperationException($"Dump directory [{directory.FullName}] does not exist.");
45-
}
46-
var imageFiles = directory.GetFiles($"*{ImageFormat.Extension}");
47-
if (imageFiles.Length == 0)
48-
{
49-
throw new InvalidOperationException($"Dump directory [{directory.FullName}] does not contain any [*{ImageFormat.Extension}] files.");
50-
}
41+
var imageFiles = GetImageFiles(directory);
5142
var existingElements = FilterElementsForVisualization().ToDictionary(el => el.Key, el => el.Value);
5243
var countOfUnproceededElements = existingElements.Count;
5344
var countOfProceededElements = 0;
@@ -64,12 +55,21 @@ public virtual float Compare(string dumpName = null)
6455
}
6556
else
6657
{
67-
comparisonResult += existingElements[key].Visual.GetDifference(SKImage.FromEncodedData(imageFile.FullName));
58+
comparisonResult += existingElements[key].Visual.GetDifference(imageFile.ReadImage());
6859
countOfUnproceededElements--;
6960
countOfProceededElements++;
7061
existingElements.Remove(key);
7162
}
7263
}
64+
LogUnproceededElements(countOfUnproceededElements, existingElements, absentOnFormElementNames);
65+
// adding of countOfUnproceededElements means 100% difference for each element absent in dump or on page
66+
var result = (comparisonResult + countOfUnproceededElements) / (countOfProceededElements + countOfUnproceededElements);
67+
LocalizedLogger.Info("loc.form.dump.compare.result", result.ToString("P", CultureInfo.InvariantCulture));
68+
return result;
69+
}
70+
71+
private void LogUnproceededElements(int countOfUnproceededElements, IDictionary<string, T> existingElements, IList<string> absentOnFormElementNames)
72+
{
7373
if (countOfUnproceededElements > 0)
7474
{
7575
if (existingElements.Any())
@@ -82,10 +82,20 @@ public virtual float Compare(string dumpName = null)
8282
}
8383
LocalizedLogger.Warn("loc.form.dump.unprocessedelements", countOfUnproceededElements);
8484
}
85-
// adding of countOfUnproceededElements means 100% difference for each element absent in dump or on page
86-
var result = (comparisonResult + countOfUnproceededElements) / (countOfProceededElements + countOfUnproceededElements);
87-
LocalizedLogger.Info("loc.form.dump.compare.result", result.ToString("P", CultureInfo.InvariantCulture));
88-
return result;
85+
}
86+
87+
private FileInfo[] GetImageFiles(DirectoryInfo directory)
88+
{
89+
if (!directory.Exists)
90+
{
91+
throw new InvalidOperationException($"Dump directory [{directory.FullName}] does not exist.");
92+
}
93+
var imageFiles = directory.GetFiles($"*{ImageFormat.Extension}");
94+
if (imageFiles.Length == 0)
95+
{
96+
throw new InvalidOperationException($"Dump directory [{directory.FullName}] does not contain any [*{ImageFormat.Extension}] files.");
97+
}
98+
return imageFiles;
8999
}
90100

91101
public virtual void Save(string dumpName = null)
@@ -170,10 +180,11 @@ protected virtual DirectoryInfo GetDumpDirectory(string dumpName = null)
170180
if (fullDumpPath.Length + maxNameLengthOfDumpElements > MaxFullFileNameLength)
171181
{
172182
validDumpNameString = validDumpNameString.Substring(0, MaxFullFileNameLength - Path.GetFullPath(DumpsDirectory).Length - maxNameLengthOfDumpElements);
173-
LocalizedLogger.Warn("loc.form.dump.exceededdumpname", validDumpNameString);
183+
fullDumpPath = Path.Combine(DumpsDirectory, validDumpNameString);
184+
LocalizedLogger.Warn("loc.form.dump.exceededdumpname", fullDumpPath);
174185
}
175186

176-
return new DirectoryInfo(Path.Combine(DumpsDirectory, validDumpNameString));
187+
return new DirectoryInfo(fullDumpPath);
177188
}
178189
}
179190
}

Aquality.Selenium.Core/src/Aquality.Selenium.Core/Visualization/ImageExtensions.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,16 @@ public static class ImageExtensions
1818
0, 0, 0, 1, 0
1919
});
2020

21+
/// <summary>
22+
/// Reads image from file.
23+
/// </summary>
24+
/// <param name="imageFile">The file to read the image from.</param>
25+
/// <returns>Instance of SKImage.</returns>
26+
public static SKImage ReadImage(this FileInfo imageFile)
27+
{
28+
return SKImage.FromEncodedData(imageFile.FullName);
29+
}
30+
2131
/// <summary>
2232
/// Resizes an image
2333
/// </summary>
@@ -66,8 +76,19 @@ public static SKImage GetGrayScaleVersion(this SKImage original)
6676
return SKImage.FromBitmap(newBitmap);
6777
}
6878

79+
/// <summary>
80+
/// Gets size of the image.
81+
/// </summary>
82+
/// <param name="image">Current image.</param>
83+
/// <returns>Size of the image.</returns>
6984
public static Size Size(this SKImage image) => new Size(image.Width, image.Height);
7085

86+
/// <summary>
87+
/// Saves the image in specified format.
88+
/// </summary>
89+
/// <param name="image">Source image.</param>
90+
/// <param name="name">Target file name.</param>
91+
/// <param name="format">Image format.</param>
7192
public static void Save(this SKImage image, string name, SKEncodedImageFormat format = SKEncodedImageFormat.Png)
7293
{
7394
using (Stream stream = new FileStream(name, FileMode.OpenOrCreate))

Aquality.Selenium.Core/tests/Aquality.Selenium.Core.Tests/Visualization/FormDumpTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public void Should_BePossibleTo_SaveFormDump_WithDefaultName()
5050
public void Should_BePossibleTo_SaveFormDump_WithSubfoldersInName()
5151
{
5252
var form = new WebForm();
53-
var dumpName = $"SubFolder1\\SubFolder2";
53+
var dumpName = $"SubFolder1{Path.DirectorySeparatorChar}SubFolder2";
5454
var pathToDump = CleanUpAndGetPathToDump(dumpName);
5555

5656
Assert.DoesNotThrow(() => form.Dump.Save(dumpName));
@@ -103,11 +103,11 @@ public void Should_BePossibleTo_SaveAndCompareWithDump_WithOverlengthDumpName_Wh
103103
customForm.SetElementsForDump(WebForm.ElementsFilter.AllElements);
104104

105105
var maxElementNameLength = (int)customForm.Dump.GetType().GetMethod("GetMaxNameLengthOfDumpElements", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(customForm.Dump, new object[] { });
106-
var imageExtensioLength = ((ImageFormat)customForm.Dump.GetType().GetProperty("ImageFormat", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(customForm.Dump)).Extension.Length;
106+
var imageExtensionLength = ((ImageFormat)customForm.Dump.GetType().GetProperty("ImageFormat", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(customForm.Dump)).Extension.Length;
107107
var maxLength = (int)customForm.Dump.GetType().GetProperty("MaxFullFileNameLength", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(customForm.Dump);
108108
var pathToDumpLength = PathToDumps.Length;
109109

110-
var dumpName = new string('A', maxLength - pathToDumpLength - maxElementNameLength - imageExtensioLength);
110+
var dumpName = new string('A', maxLength - pathToDumpLength - maxElementNameLength - imageExtensionLength);
111111
var overlengthDumpName = dumpName + "_BCDE";
112112

113113
var overlengthPathToDump = CleanUpAndGetPathToDump(overlengthDumpName);
@@ -150,7 +150,7 @@ public void Should_BePossibleTo_SaveFormDump_WithValidExtension(string imageExte
150150

151151
foreach (var file in pathToDump.GetFiles())
152152
{
153-
Assert.AreEqual(imageExtension, file.Extension, "Image extension not exual to expexted");
153+
Assert.AreEqual(imageExtension, file.Extension, "Image extension not equal to expected");
154154
Assert.That(file.Name.Contains(imageExtension), "Image name doesn't contain expected extension");
155155
}
156156
}

0 commit comments

Comments
 (0)