mirror of
https://github.com/SabreTools/SabreTools.Serialization.git
synced 2026-07-08 18:06:41 +00:00
Handle an enum that needed to be handled
This commit is contained in:
@@ -1879,6 +1879,22 @@ namespace SabreTools.Data.Extensions.Test
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(null, null)]
|
||||
[InlineData("8", Width.Byte)]
|
||||
[InlineData("byte", Width.Byte)]
|
||||
[InlineData("16", Width.Short)]
|
||||
[InlineData("short", Width.Short)]
|
||||
[InlineData("32", Width.Int)]
|
||||
[InlineData("int", Width.Int)]
|
||||
[InlineData("64", Width.Long)]
|
||||
[InlineData("long", Width.Long)]
|
||||
public void AsWidth(string? field, Width? expected)
|
||||
{
|
||||
Width? actual = field.AsWidth();
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(null, null)]
|
||||
[InlineData("INVALID", null)]
|
||||
@@ -2205,6 +2221,18 @@ namespace SabreTools.Data.Extensions.Test
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData((Width)int.MaxValue, null)]
|
||||
[InlineData(Width.Byte, "8")]
|
||||
[InlineData(Width.Short, "16")]
|
||||
[InlineData(Width.Int, "32")]
|
||||
[InlineData(Width.Long, "64")]
|
||||
public void FromWidthTest(Width field, string? expected)
|
||||
{
|
||||
string? actual = field.AsStringValue();
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(null, null)]
|
||||
[InlineData(true, "yes")]
|
||||
|
||||
@@ -218,6 +218,7 @@ namespace SabreTools.Data.Extensions
|
||||
{
|
||||
cloneDataArea.Endianness = selfDataArea.Endianness;
|
||||
cloneDataArea.Size = selfDataArea.Size;
|
||||
cloneDataArea.Width = selfDataArea.Width;
|
||||
}
|
||||
else if (self is Device selfDevice && clone is Device cloneDevice)
|
||||
{
|
||||
@@ -1448,6 +1449,23 @@ namespace SabreTools.Data.Extensions
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the enum value for an input string, if possible
|
||||
/// </summary>
|
||||
/// <param name="value">String value to parse/param>
|
||||
/// <returns>Enum value representing the input, null on error</returns>
|
||||
public static Width? AsWidth(this string? value)
|
||||
{
|
||||
return value?.ToLowerInvariant() switch
|
||||
{
|
||||
"8" or "byte" => Width.Byte,
|
||||
"16" or "short" => Width.Short,
|
||||
"32" or "int" => Width.Int,
|
||||
"64" or "long" => Width.Long,
|
||||
_ => null,
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get bool? value from input string
|
||||
/// </summary>
|
||||
@@ -1839,6 +1857,23 @@ namespace SabreTools.Data.Extensions
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the string value for an input enum, if possible
|
||||
/// </summary>
|
||||
/// <param name="value">Enum value to parse/param>
|
||||
/// <returns>String value representing the input, null on error</returns>
|
||||
public static string? AsStringValue(this Width value)
|
||||
{
|
||||
return value switch
|
||||
{
|
||||
Width.Byte =>"8",
|
||||
Width.Short =>"16",
|
||||
Width.Int =>"32",
|
||||
Width.Long =>"64",
|
||||
_ => null,
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the string value for an input enum, if possible
|
||||
/// </summary>
|
||||
|
||||
@@ -15,6 +15,9 @@ namespace SabreTools.Data.Models.Metadata
|
||||
|
||||
public long? Size { get; set; }
|
||||
|
||||
/// <remarks>(8|16|32|64) "8"</remarks>
|
||||
public Width? Width { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Keys
|
||||
@@ -23,10 +26,6 @@ namespace SabreTools.Data.Models.Metadata
|
||||
[NoFilter]
|
||||
public const string RomKey = "rom";
|
||||
|
||||
/// <remarks>(8|16|32|64) "8"</remarks>
|
||||
/// TODO: Convert to enum
|
||||
public const string WidthKey = "width";
|
||||
|
||||
#endregion
|
||||
|
||||
public DataArea() => ItemType = ItemType.DataArea;
|
||||
|
||||
@@ -574,4 +574,22 @@ namespace SabreTools.Data.Models.Metadata
|
||||
/// <summary>"test"</summary>
|
||||
Test,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determine area width
|
||||
/// </summary>
|
||||
public enum Width
|
||||
{
|
||||
/// <summary>8</summary>
|
||||
Byte = 8,
|
||||
|
||||
/// <summary>16</summary>
|
||||
Short = 16,
|
||||
|
||||
/// <summary>32</summary>
|
||||
Int = 32,
|
||||
|
||||
/// <summary>64</summary>
|
||||
Long = 64,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ namespace SabreTools.Data.Models.SoftwareList
|
||||
|
||||
/// <remarks>(8|16|32|64) "8"</remarks>
|
||||
[XmlAttribute("width")]
|
||||
public string? Width { get; set; }
|
||||
public Width? Width { get; set; }
|
||||
|
||||
/// <remarks>(big|little) "little"</remarks>
|
||||
[XmlAttribute("endianness")]
|
||||
|
||||
@@ -543,7 +543,7 @@ namespace SabreTools.Metadata.DatFiles.Test
|
||||
Name = "name",
|
||||
[Data.Models.Metadata.DataArea.RomKey] = new Data.Models.Metadata.Rom[] { [] },
|
||||
Size = 12345,
|
||||
[Data.Models.Metadata.DataArea.WidthKey] = 64,
|
||||
Width = Data.Models.Metadata.Width.Long,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1236,7 +1236,7 @@ namespace SabreTools.Metadata.DatFiles.Test
|
||||
Assert.Equal(Data.Models.Metadata.Endianness.Big, dataArea.Endianness);
|
||||
Assert.Equal("name", dataArea.Name);
|
||||
Assert.Equal(12345, dataArea.Size);
|
||||
Assert.Equal(64, dataArea.ReadLong(Data.Models.Metadata.DataArea.WidthKey));
|
||||
Assert.Equal(Data.Models.Metadata.Width.Long, dataArea.Width);
|
||||
}
|
||||
|
||||
private static void ValidateDevice(Device? device)
|
||||
|
||||
@@ -761,7 +761,7 @@ namespace SabreTools.Metadata.DatFiles.Test
|
||||
Assert.Equal(Data.Models.Metadata.Endianness.Big, dataArea.Endianness);
|
||||
Assert.Equal("name", dataArea.Name);
|
||||
Assert.Equal(12345, dataArea.Size);
|
||||
Assert.Equal(64, dataArea.ReadLong(Data.Models.Metadata.DataArea.WidthKey));
|
||||
Assert.Equal(Data.Models.Metadata.Width.Long, dataArea.Width);
|
||||
|
||||
Data.Models.Metadata.Rom[]? roms = dataArea.ReadArray<Data.Models.Metadata.Rom>(Data.Models.Metadata.DataArea.RomKey);
|
||||
Assert.NotNull(roms);
|
||||
|
||||
@@ -360,7 +360,7 @@ namespace SabreTools.Metadata.DatFiles
|
||||
aggregateDataArea.Endianness = dataArea.Endianness;
|
||||
aggregateDataArea.Name = dataArea.Name;
|
||||
aggregateDataArea.Size = dataArea.Size;
|
||||
aggregateDataArea[Data.Models.Metadata.DataArea.WidthKey] = dataArea.ReadString(Data.Models.Metadata.DataArea.WidthKey);
|
||||
aggregateDataArea.Width = dataArea.Width;
|
||||
}
|
||||
|
||||
// Clear any empty fields
|
||||
@@ -786,7 +786,7 @@ namespace SabreTools.Metadata.DatFiles
|
||||
aggregateDataArea.Endianness = dataArea.Endianness;
|
||||
aggregateDataArea.Name = dataArea.Name;
|
||||
aggregateDataArea.Size = dataArea.Size;
|
||||
aggregateDataArea[Data.Models.Metadata.DataArea.WidthKey] = dataArea.ReadString(Data.Models.Metadata.DataArea.WidthKey);
|
||||
aggregateDataArea.Width = dataArea.Width;
|
||||
}
|
||||
|
||||
// Clear any empty fields
|
||||
|
||||
@@ -35,19 +35,19 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
set => (_internal as Data.Models.Metadata.DataArea)?.Size = value;
|
||||
}
|
||||
|
||||
public Data.Models.Metadata.Width? Width
|
||||
{
|
||||
get => (_internal as Data.Models.Metadata.DataArea)?.Width;
|
||||
set => (_internal as Data.Models.Metadata.DataArea)?.Width = value;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructors
|
||||
|
||||
public DataArea() : base() { }
|
||||
|
||||
public DataArea(Data.Models.Metadata.DataArea item) : base(item)
|
||||
{
|
||||
// Process flag values
|
||||
long? width = ReadLong(Data.Models.Metadata.DataArea.WidthKey);
|
||||
if (width is not null)
|
||||
Write<string?>(Data.Models.Metadata.DataArea.WidthKey, width.ToString());
|
||||
}
|
||||
public DataArea(Data.Models.Metadata.DataArea item) : base(item) { }
|
||||
|
||||
public DataArea(Data.Models.Metadata.DataArea item, Machine machine, Source source) : this(item)
|
||||
{
|
||||
|
||||
@@ -37,7 +37,7 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
return dataArea is not null
|
||||
&& (!string.IsNullOrEmpty(dataArea.Name)
|
||||
|| dataArea.Size is not null
|
||||
|| dataArea.ReadLong(Data.Models.Metadata.DataArea.WidthKey) is not null
|
||||
|| dataArea.Width is not null
|
||||
|| dataArea.Endianness is not null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -460,6 +460,9 @@ namespace SabreTools.Metadata.Filter
|
||||
case DataArea item when fieldName == "size":
|
||||
checkValue = item.Size?.ToString();
|
||||
return true;
|
||||
case DataArea item when fieldName == "width":
|
||||
checkValue = item.Width?.AsStringValue();
|
||||
return true;
|
||||
|
||||
case Device item when fieldName == "type":
|
||||
checkValue = item.DeviceType?.AsStringValue();
|
||||
|
||||
@@ -122,6 +122,8 @@ namespace SabreTools.Metadata
|
||||
return false;
|
||||
if (selfDataArea.Size != otherDataArea.Size)
|
||||
return false;
|
||||
if (selfDataArea.Width != otherDataArea.Width)
|
||||
return false;
|
||||
}
|
||||
else if (self is Device selfDevice && other is Device otherDevice)
|
||||
{
|
||||
|
||||
@@ -71,7 +71,7 @@ namespace SabreTools.Serialization.CrossModel.Test
|
||||
{
|
||||
Name = "name",
|
||||
Size = 12345,
|
||||
Width = "XXXXXX",
|
||||
Width = Data.Models.Metadata.Width.Long,
|
||||
Endianness = Data.Models.Metadata.Endianness.Big,
|
||||
Rom = [rom],
|
||||
};
|
||||
@@ -230,7 +230,7 @@ namespace SabreTools.Serialization.CrossModel.Test
|
||||
Assert.NotNull(dataarea);
|
||||
Assert.Equal("name", dataarea.Name);
|
||||
Assert.Equal(12345, dataarea.Size);
|
||||
Assert.Equal("XXXXXX", dataarea.Width);
|
||||
Assert.Equal(Data.Models.Metadata.Width.Long, dataarea.Width);
|
||||
Assert.Equal(Data.Models.Metadata.Endianness.Big, dataarea.Endianness);
|
||||
|
||||
Assert.NotNull(dataarea.Rom);
|
||||
|
||||
@@ -75,7 +75,7 @@ namespace SabreTools.Serialization.CrossModel
|
||||
{
|
||||
Name = item.Name,
|
||||
Size = item.Size,
|
||||
Width = item.ReadString(Data.Models.Metadata.DataArea.WidthKey),
|
||||
Width = item.Width,
|
||||
Endianness = item.Endianness,
|
||||
};
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@ namespace SabreTools.Serialization.CrossModel
|
||||
{
|
||||
Name = item.Name,
|
||||
Size = item.Size,
|
||||
[Data.Models.Metadata.DataArea.WidthKey] = item.Width,
|
||||
Width = item.Width,
|
||||
Endianness = item.Endianness,
|
||||
};
|
||||
|
||||
|
||||
@@ -144,7 +144,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
Name = "name",
|
||||
Size = 12345,
|
||||
Width = "XXXXXX",
|
||||
Width = Data.Models.Metadata.Width.Long,
|
||||
Endianness = Data.Models.Metadata.Endianness.Big,
|
||||
Rom = [rom],
|
||||
};
|
||||
@@ -303,7 +303,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
Assert.NotNull(dataarea);
|
||||
Assert.Equal("name", dataarea.Name);
|
||||
Assert.Equal(12345, dataarea.Size);
|
||||
Assert.Equal("XXXXXX", dataarea.Width);
|
||||
Assert.Equal(Data.Models.Metadata.Width.Long, dataarea.Width);
|
||||
Assert.Equal(Data.Models.Metadata.Endianness.Big, dataarea.Endianness);
|
||||
|
||||
Assert.NotNull(dataarea.Rom);
|
||||
|
||||
@@ -127,7 +127,7 @@ namespace SabreTools.Serialization.Readers
|
||||
|
||||
obj.Name = reader.GetAttribute("name");
|
||||
obj.Size = NumberHelper.ConvertToInt64(reader.GetAttribute("size"));
|
||||
obj.Width = reader.GetAttribute("width");
|
||||
obj.Width = reader.GetAttribute("width").AsWidth();
|
||||
obj.Endianness = reader.GetAttribute("endianness").AsEndianness();
|
||||
|
||||
List<Rom> roms = [];
|
||||
|
||||
@@ -105,7 +105,7 @@ namespace SabreTools.Serialization.Writers
|
||||
|
||||
writer.WriteRequiredAttributeString("name", obj.Name);
|
||||
writer.WriteRequiredAttributeString("size", obj.Size?.ToString());
|
||||
writer.WriteOptionalAttributeString("width", obj.Width);
|
||||
writer.WriteOptionalAttributeString("width", obj.Width?.AsStringValue());
|
||||
writer.WriteOptionalAttributeString("endianness", obj.Endianness?.AsStringValue());
|
||||
|
||||
if (obj.Rom is not null && obj.Rom.Length > 0)
|
||||
|
||||
Reference in New Issue
Block a user