mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Complete overhaul on Skippers
This change involves safety updates for serialization, better definitions of various classes, renames of some classes for accuracy, missing enum decoration, and various fixes.
This commit is contained in:
87
SabreTools.Skippers/Tests/FileTest.cs
Normal file
87
SabreTools.Skippers/Tests/FileTest.cs
Normal file
@@ -0,0 +1,87 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Skippers.Tests
|
||||
{
|
||||
/// <summary>
|
||||
/// Test that tests file size
|
||||
/// </summary>
|
||||
[XmlType("file")]
|
||||
public class FileTest : Test
|
||||
{
|
||||
#region Fields
|
||||
|
||||
/// <summary>
|
||||
/// Determines whether a pass or failure is expected
|
||||
/// </summary>
|
||||
[XmlAttribute("result")]
|
||||
public bool Result { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
/// Expected size of the input byte array, used with the Operator
|
||||
/// </summary>
|
||||
/// <remarks>Either numeric or the literal "po2"</remarks>
|
||||
[XmlAttribute("size")]
|
||||
public string Size
|
||||
{
|
||||
get => _size == null ? "po2" : _size.Value.ToString();
|
||||
set
|
||||
{
|
||||
if (value == null || value.ToLowerInvariant() == "po2")
|
||||
_size = null;
|
||||
else
|
||||
_size = Convert.ToInt64(value, fromBase: 16);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Expected range value for the input byte array size, used with Size
|
||||
/// </summary>
|
||||
[XmlAttribute("operator")]
|
||||
public HeaderSkipTestFileOperator Operator { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Private instance variables
|
||||
|
||||
/// <summary>
|
||||
/// File offset to run the test
|
||||
/// </summary>
|
||||
/// <remarks>null is PO2 ("power of 2" filesize)</remarks>
|
||||
private long? _size;
|
||||
|
||||
#endregion
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override bool Passes(Stream input)
|
||||
{
|
||||
// First get the file size from stream
|
||||
long size = input.Length;
|
||||
|
||||
// If we have a null size, check that the size is a power of 2
|
||||
bool result = true;
|
||||
if (_size == null)
|
||||
{
|
||||
// http://stackoverflow.com/questions/600293/how-to-check-if-a-number-is-a-power-of-2
|
||||
result = (((ulong)size & ((ulong)size - 1)) == 0);
|
||||
}
|
||||
else if (Operator == HeaderSkipTestFileOperator.Less)
|
||||
{
|
||||
result = (size < _size);
|
||||
}
|
||||
else if (Operator == HeaderSkipTestFileOperator.Greater)
|
||||
{
|
||||
result = (size > _size);
|
||||
}
|
||||
else if (Operator == HeaderSkipTestFileOperator.Equal)
|
||||
{
|
||||
result = (size == _size);
|
||||
}
|
||||
|
||||
// Return if the expected and actual results match
|
||||
return result == Result;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user