Lazily make OfflineList-specific header items properties

This commit is contained in:
Matt Nadareski
2026-04-04 18:24:58 -04:00
parent ca2a289a3f
commit ebf67d39cf
11 changed files with 135 additions and 237 deletions

View File

@@ -202,7 +202,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Author = "author",
BiosMode = Data.Models.Metadata.MergingFlag.Merged,
Build = "build",
[Data.Models.Metadata.Header.CanOpenKey] = canOpen,
CanOpen = canOpen,
Category = "category",
Comment = "comment",
Date = "date",
@@ -219,15 +219,15 @@ namespace SabreTools.Metadata.DatFiles.Test
HeaderSkipper = "header",
Homepage = "homepage",
Id = "id",
[Data.Models.Metadata.Header.ImagesKey] = images,
[Data.Models.Metadata.Header.ImFolderKey] = "imfolder",
[Data.Models.Metadata.Header.InfosKey] = infos,
Images = images,
ImFolder = "imfolder",
Infos = infos,
LockBiosMode = true,
LockRomMode = true,
LockSampleMode = true,
MameConfig = "mameconfig",
Name = "name",
[Data.Models.Metadata.Header.NewDatKey] = newDat,
NewDat = newDat,
Notes = "notes",
Plugin = "plugin",
RefName = "refname",
@@ -238,7 +238,7 @@ namespace SabreTools.Metadata.DatFiles.Test
[Data.Models.Metadata.Header.SchemaLocationKey] = "schemalocation",
ScreenshotsHeight = "screenshotsheight",
ScreenshotsWidth = "screenshotsWidth",
[Data.Models.Metadata.Header.SearchKey] = search,
Search = search,
System = "system",
Timestamp = "timestamp",
Type = "type",
@@ -1010,7 +1010,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal("author", datHeader.Author);
Assert.Equal(Data.Models.Metadata.MergingFlag.Merged, datHeader.BiosMode);
Assert.Equal("build", datHeader.Build);
Assert.Equal("ext", datHeader.ReadString(Data.Models.Metadata.Header.CanOpenKey));
Assert.NotNull(datHeader.CanOpen);
Assert.Equal("category", datHeader.Category);
Assert.Equal("comment", datHeader.Comment);
Assert.Equal("date", datHeader.Date);
@@ -1026,15 +1026,15 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal("header", datHeader.HeaderSkipper);
Assert.Equal("homepage", datHeader.Homepage);
Assert.Equal("id", datHeader.Id);
Assert.NotNull(datHeader.ReadString(Data.Models.Metadata.Header.ImagesKey));
Assert.Equal("imfolder", datHeader.ReadString(Data.Models.Metadata.Header.ImFolderKey));
Assert.NotNull(datHeader.ReadString(Data.Models.Metadata.Header.InfosKey));
Assert.NotNull(datHeader.Images);
Assert.Equal("imfolder", datHeader.ImFolder);
Assert.NotNull(datHeader.Infos);
Assert.True(datHeader.LockBiosMode);
Assert.True(datHeader.LockRomMode);
Assert.True(datHeader.LockSampleMode);
Assert.Equal("mameconfig", datHeader.MameConfig);
Assert.Equal("name", datHeader.Name);
Assert.NotNull(datHeader.ReadString(Data.Models.Metadata.Header.NewDatKey));
Assert.NotNull(datHeader.NewDat);
Assert.Equal("notes", datHeader.Notes);
Assert.Equal("plugin", datHeader.Plugin);
Assert.Equal("refname", datHeader.RefName);
@@ -1045,7 +1045,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal("schemalocation", datHeader.ReadString(Data.Models.Metadata.Header.SchemaLocationKey));
Assert.Equal("screenshotsheight", datHeader.ScreenshotsHeight);
Assert.Equal("screenshotsWidth", datHeader.ScreenshotsWidth);
Assert.NotNull(datHeader.ReadString(Data.Models.Metadata.Header.SearchKey));
Assert.NotNull(datHeader.Search);
Assert.Equal("system", datHeader.System);
Assert.Equal("timestamp", datHeader.Timestamp);
Assert.Equal("type", datHeader.Type);

View File

@@ -92,17 +92,14 @@ namespace SabreTools.Metadata.DatFiles.Test
private static DatHeader CreateHeader()
{
DatHeader item = new DatHeader(CreateMetadataHeader());
item.Write<string[]>(Data.Models.Metadata.Header.CanOpenKey, ["ext"]);
item.Write(Data.Models.Metadata.Header.ImagesKey,
new Data.Models.OfflineList.Images() { Height = "height" });
item.Write(Data.Models.Metadata.Header.InfosKey,
new Data.Models.OfflineList.Infos() { Comment = new Data.Models.OfflineList.Comment() });
item.Write(Data.Models.Metadata.Header.NewDatKey,
new Data.Models.OfflineList.NewDat() { DatUrl = new Data.Models.OfflineList.DatUrl() });
item.Write(Data.Models.Metadata.Header.SearchKey,
new Data.Models.OfflineList.Search() { To = [] });
DatHeader item = new DatHeader(CreateMetadataHeader())
{
CanOpen = new Data.Models.OfflineList.CanOpen { Extension = ["ext"] },
Images = new Data.Models.OfflineList.Images() { Height = "height" },
Infos = new Data.Models.OfflineList.Infos() { Comment = new Data.Models.OfflineList.Comment() },
NewDat = new Data.Models.OfflineList.NewDat() { DatUrl = new Data.Models.OfflineList.DatUrl() },
Search = new Data.Models.OfflineList.Search() { To = [] },
};
return item;
}
@@ -354,7 +351,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal("author", header.Author);
Assert.Equal(Data.Models.Metadata.MergingFlag.Merged, header.BiosMode);
Assert.Equal("build", header.Build);
Assert.NotNull(header.Read<Data.Models.OfflineList.CanOpen>(Data.Models.Metadata.Header.CanOpenKey));
Assert.NotNull(header.CanOpen);
Assert.Equal("category", header.Category);
Assert.Equal("comment", header.Comment);
Assert.Equal("date", header.Date);
@@ -370,15 +367,15 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal("header", header.HeaderSkipper);
Assert.Equal("homepage", header.Homepage);
Assert.Equal("id", header.Id);
Assert.NotNull(header.Read<Data.Models.OfflineList.Images>(Data.Models.Metadata.Header.ImagesKey));
Assert.Equal("imfolder", header.ReadString(Data.Models.Metadata.Header.ImFolderKey));
Assert.NotNull(header.Read<Data.Models.OfflineList.Infos>(Data.Models.Metadata.Header.InfosKey));
Assert.NotNull(header.Images);
Assert.Equal("imfolder", header.ImFolder);
Assert.NotNull(header.Infos);
Assert.True(header.LockBiosMode);
Assert.True(header.LockRomMode);
Assert.True(header.LockSampleMode);
Assert.Equal("mameconfig", header.MameConfig);
Assert.Equal("name", header.Name);
Assert.NotNull(header.Read<Data.Models.OfflineList.NewDat>(Data.Models.Metadata.Header.NewDatKey));
Assert.NotNull(header.NewDat);
Assert.Equal("notes", header.Notes);
Assert.Equal("plugin", header.Plugin);
Assert.Equal("refname", header.RefName);
@@ -389,7 +386,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal("schemalocation", header.ReadString(Data.Models.Metadata.Header.SchemaLocationKey));
Assert.Equal("screenshotsheight", header.ScreenshotsHeight);
Assert.Equal("screenshotsWidth", header.ScreenshotsWidth);
Assert.NotNull(header.Read<Data.Models.OfflineList.Search>(Data.Models.Metadata.Header.SearchKey));
Assert.NotNull(header.Search);
Assert.Equal("system", header.System);
Assert.Equal("timestamp", header.Timestamp);
Assert.Equal("type", header.Type);

View File

@@ -4,114 +4,6 @@ namespace SabreTools.Metadata.DatFiles.Test
{
public class DatHeaderTests
{
#region CanOpenSpecified
[Fact]
public void CanOpenSpecified_Missing()
{
DatHeader header = new DatHeader();
header.Write<string[]>(Data.Models.Metadata.Header.CanOpenKey, null);
Assert.False(header.CanOpenSpecified);
}
[Fact]
public void CanOpenSpecified_Empty()
{
DatHeader header = new DatHeader();
header.Write<string[]>(Data.Models.Metadata.Header.CanOpenKey, []);
Assert.False(header.CanOpenSpecified);
}
[Fact]
public void CanOpenSpecified_Exists()
{
DatHeader header = new DatHeader();
header.Write<string[]>(Data.Models.Metadata.Header.CanOpenKey, ["value"]);
Assert.True(header.CanOpenSpecified);
}
#endregion
#region ImagesSpecified
[Fact]
public void ImagesSpecified_Missing()
{
DatHeader header = new DatHeader();
header.Write<Data.Models.OfflineList.Images>(Data.Models.Metadata.Header.ImagesKey, null);
Assert.False(header.ImagesSpecified);
}
[Fact]
public void ImagesSpecified_Exists()
{
DatHeader header = new DatHeader();
header.Write<Data.Models.OfflineList.Images>(Data.Models.Metadata.Header.ImagesKey, new());
Assert.True(header.ImagesSpecified);
}
#endregion
#region InfosSpecified
[Fact]
public void InfosSpecified_Missing()
{
DatHeader header = new DatHeader();
header.Write<Data.Models.OfflineList.Infos>(Data.Models.Metadata.Header.InfosKey, null);
Assert.False(header.InfosSpecified);
}
[Fact]
public void InfosSpecified_Exists()
{
DatHeader header = new DatHeader();
header.Write<Data.Models.OfflineList.Infos>(Data.Models.Metadata.Header.InfosKey, new());
Assert.True(header.InfosSpecified);
}
#endregion
#region NewDatSpecified
[Fact]
public void NewDatSpecified_Missing()
{
DatHeader header = new DatHeader();
header.Write<Data.Models.OfflineList.NewDat>(Data.Models.Metadata.Header.NewDatKey, null);
Assert.False(header.NewDatSpecified);
}
[Fact]
public void NewDatSpecified_Exists()
{
DatHeader header = new DatHeader();
header.Write<Data.Models.OfflineList.NewDat>(Data.Models.Metadata.Header.NewDatKey, new());
Assert.True(header.NewDatSpecified);
}
#endregion
#region SearchSpecified
[Fact]
public void SearchSpecified_Missing()
{
DatHeader header = new DatHeader();
header.Write<Data.Models.OfflineList.Search>(Data.Models.Metadata.Header.SearchKey, null);
Assert.False(header.SearchSpecified);
}
[Fact]
public void SearchSpecified_Exists()
{
DatHeader header = new DatHeader();
header.Write<Data.Models.OfflineList.Search>(Data.Models.Metadata.Header.SearchKey, new());
Assert.True(header.SearchSpecified);
}
#endregion
#region Clone
[Fact]