Files

452 lines
14 KiB
C#
Raw Permalink Normal View History

2025-09-26 10:20:48 -04:00
using SabreTools.Serialization.CrossModel;
using Xunit;
namespace SabreTools.Serialization.Test.CrossModel
{
public class OfflineListTests
{
[Fact]
public void RoundTripTest()
{
// Get the cross-model serializer
2025-09-26 10:20:48 -04:00
var serializer = new OfflineList();
// Build the data
2025-09-26 13:06:18 -04:00
Data.Models.OfflineList.Dat dat = Build();
// Serialize to generic model
2025-09-26 13:06:18 -04:00
Data.Models.Metadata.MetadataFile? metadata = serializer.Serialize(dat);
Assert.NotNull(metadata);
// Serialize back to original model
2025-09-26 13:06:18 -04:00
Data.Models.OfflineList.Dat? newDat = serializer.Deserialize(metadata);
// Validate the data
Assert.NotNull(newDat);
Assert.Equal("XXXXXX", newDat.NoNamespaceSchemaLocation);
Validate(newDat.Configuration);
Validate(newDat.Games);
Validate(newDat.GUI);
}
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
2025-09-26 13:06:18 -04:00
private static Data.Models.OfflineList.Dat Build()
{
2025-09-26 13:06:18 -04:00
var infos = new Data.Models.OfflineList.Infos
{
2025-09-26 13:06:18 -04:00
Title = new Data.Models.OfflineList.Title
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
2025-09-26 13:06:18 -04:00
Location = new Data.Models.OfflineList.Location
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
2025-09-26 13:06:18 -04:00
Publisher = new Data.Models.OfflineList.Publisher
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
2025-09-26 13:06:18 -04:00
SourceRom = new Data.Models.OfflineList.SourceRom
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
2025-09-26 13:06:18 -04:00
SaveType = new Data.Models.OfflineList.SaveType
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
2025-09-26 13:06:18 -04:00
RomSize = new Data.Models.OfflineList.RomSize
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
2025-09-26 13:06:18 -04:00
ReleaseNumber = new Data.Models.OfflineList.ReleaseNumber
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
2025-09-26 13:06:18 -04:00
ImageNumber = new Data.Models.OfflineList.ImageNumber
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
2025-09-26 13:06:18 -04:00
LanguageNumber = new Data.Models.OfflineList.LanguageNumber
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
2025-09-26 13:06:18 -04:00
Comment = new Data.Models.OfflineList.Comment
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
2025-09-26 13:06:18 -04:00
RomCRC = new Data.Models.OfflineList.RomCRC
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
2025-09-26 13:06:18 -04:00
Im1CRC = new Data.Models.OfflineList.Im1CRC
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
2025-09-26 13:06:18 -04:00
Im2CRC = new Data.Models.OfflineList.Im2CRC
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
2025-09-26 13:06:18 -04:00
Languages = new Data.Models.OfflineList.Languages
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
};
2025-09-26 13:06:18 -04:00
var canopen = new Data.Models.OfflineList.CanOpen
{
Extension = ["XXXXXX"],
};
2025-09-26 13:06:18 -04:00
var daturl = new Data.Models.OfflineList.DatUrl
{
FileName = "XXXXXX",
Content = "XXXXXX",
};
2025-09-26 13:06:18 -04:00
var newdat = new Data.Models.OfflineList.NewDat
{
DatVersionUrl = "XXXXXX",
DatUrl = daturl,
ImUrl = "XXXXXX",
};
2025-09-26 13:06:18 -04:00
var find = new Data.Models.OfflineList.Find
{
Operation = "XXXXXX",
Value = "XXXXXX",
Content = "XXXXXX",
};
2025-09-26 13:06:18 -04:00
var to = new Data.Models.OfflineList.To
{
Value = "XXXXXX",
Default = "XXXXXX",
Auto = "XXXXXX",
Find = [find],
};
2025-09-26 13:06:18 -04:00
var search = new Data.Models.OfflineList.Search
{
To = [to],
};
2025-09-26 13:06:18 -04:00
var configuration = new Data.Models.OfflineList.Configuration
{
DatName = "XXXXXX",
ImFolder = "XXXXXX",
DatVersion = "XXXXXX",
System = "XXXXXX",
ScreenshotsWidth = "XXXXXX",
ScreenshotsHeight = "XXXXXX",
Infos = infos,
CanOpen = canopen,
NewDat = newdat,
Search = search,
RomTitle = "XXXXXX",
};
2025-09-26 13:06:18 -04:00
var fileromcrc = new Data.Models.OfflineList.FileRomCRC
{
Extension = "XXXXXX",
Content = "XXXXXX",
};
2025-09-26 13:06:18 -04:00
var files = new Data.Models.OfflineList.Files
{
RomCRC = [fileromcrc],
};
2025-09-26 13:06:18 -04:00
var game = new Data.Models.OfflineList.Game
{
ImageNumber = "XXXXXX",
ReleaseNumber = "XXXXXX",
Title = "XXXXXX",
SaveType = "XXXXXX",
RomSize = "XXXXXX",
Publisher = "XXXXXX",
Location = "XXXXXX",
SourceRom = "XXXXXX",
Language = "XXXXXX",
Files = files,
Im1CRC = "XXXXXX",
Im2CRC = "XXXXXX",
Comment = "XXXXXX",
DuplicateID = "XXXXXX",
};
2025-09-26 13:06:18 -04:00
var games = new Data.Models.OfflineList.Games
{
Game = [game],
};
2025-09-26 13:06:18 -04:00
var image = new Data.Models.OfflineList.Image
{
X = "XXXXXX",
Y = "XXXXXX",
Width = "XXXXXX",
Height = "XXXXXX",
};
2025-09-26 13:06:18 -04:00
var images = new Data.Models.OfflineList.Images
{
Width = "XXXXXX",
Height = "XXXXXX",
Image = [image],
};
2025-09-26 13:06:18 -04:00
var gui = new Data.Models.OfflineList.GUI
{
Images = images,
};
2025-09-26 13:06:18 -04:00
return new Data.Models.OfflineList.Dat
{
NoNamespaceSchemaLocation = "XXXXXX",
Configuration = configuration,
Games = games,
GUI = gui,
};
}
/// <summary>
/// Validate a Configuration
/// </summary>
2025-09-26 13:06:18 -04:00
private static void Validate(Data.Models.OfflineList.Configuration? configuration)
{
Assert.NotNull(configuration);
Assert.Equal("XXXXXX", configuration.DatName);
Assert.Equal("XXXXXX", configuration.ImFolder);
Assert.Equal("XXXXXX", configuration.DatVersion);
Assert.Equal("XXXXXX", configuration.System);
Assert.Equal("XXXXXX", configuration.ScreenshotsWidth);
Assert.Equal("XXXXXX", configuration.ScreenshotsHeight);
Validate(configuration.Infos);
Validate(configuration.CanOpen);
Validate(configuration.NewDat);
Validate(configuration.Search);
Assert.Equal("XXXXXX", configuration.RomTitle);
}
/// <summary>
/// Validate a Infos
/// </summary>
2025-09-26 13:06:18 -04:00
private static void Validate(Data.Models.OfflineList.Infos? infos)
{
Assert.NotNull(infos);
Validate(infos.Title);
Validate(infos.Location);
Validate(infos.Publisher);
Validate(infos.SourceRom);
Validate(infos.SaveType);
Validate(infos.RomSize);
Validate(infos.ReleaseNumber);
Validate(infos.ImageNumber);
Validate(infos.LanguageNumber);
Validate(infos.Comment);
Validate(infos.RomCRC);
Validate(infos.Im1CRC);
Validate(infos.Im2CRC);
Validate(infos.Languages);
}
/// <summary>
/// Validate a InfoBase
/// </summary>
2025-09-26 13:06:18 -04:00
private static void Validate(Data.Models.OfflineList.InfoBase? info)
{
Assert.NotNull(info);
Assert.Equal("XXXXXX", info.Visible);
Assert.Equal("XXXXXX", info.InNamingOption);
Assert.Equal("XXXXXX", info.Default);
}
/// <summary>
/// Validate a CanOpen
/// </summary>
2025-09-26 13:06:18 -04:00
private static void Validate(Data.Models.OfflineList.CanOpen? canopen)
{
Assert.NotNull(canopen);
Assert.NotNull(canopen.Extension);
string extension = Assert.Single(canopen.Extension);
Assert.Equal("XXXXXX", extension);
}
/// <summary>
/// Validate a NewDat
/// </summary>
2025-09-26 13:06:18 -04:00
private static void Validate(Data.Models.OfflineList.NewDat? newdat)
{
Assert.NotNull(newdat);
Assert.Equal("XXXXXX", newdat.DatVersionUrl);
Validate(newdat.DatUrl);
Assert.Equal("XXXXXX", newdat.ImUrl);
}
/// <summary>
/// Validate a DatUrl
/// </summary>
2025-09-26 13:06:18 -04:00
private static void Validate(Data.Models.OfflineList.DatUrl? daturl)
{
Assert.NotNull(daturl);
Assert.Equal("XXXXXX", daturl.FileName);
Assert.Equal("XXXXXX", daturl.Content);
}
/// <summary>
/// Validate a Search
/// </summary>
2025-09-26 13:06:18 -04:00
private static void Validate(Data.Models.OfflineList.Search? search)
{
Assert.NotNull(search);
Assert.NotNull(search.To);
var to = Assert.Single(search.To);
Validate(to);
}
/// <summary>
/// Validate a To
/// </summary>
2025-09-26 13:06:18 -04:00
private static void Validate(Data.Models.OfflineList.To? to)
{
Assert.NotNull(to);
Assert.Equal("XXXXXX", to.Value);
Assert.Equal("XXXXXX", to.Default);
Assert.Equal("XXXXXX", to.Auto);
Assert.NotNull(to.Find);
var find = Assert.Single(to.Find);
Validate(find);
}
/// <summary>
/// Validate a Find
/// </summary>
2025-09-26 13:06:18 -04:00
private static void Validate(Data.Models.OfflineList.Find? find)
{
Assert.NotNull(find);
Assert.Equal("XXXXXX", find.Operation);
Assert.Equal("XXXXXX", find.Value);
Assert.Equal("XXXXXX", find.Content);
}
/// <summary>
/// Validate a Games
/// </summary>
2025-09-26 13:06:18 -04:00
private static void Validate(Data.Models.OfflineList.Games? games)
{
Assert.NotNull(games);
Assert.NotNull(games.Game);
var game = Assert.Single(games.Game);
Validate(game);
}
/// <summary>
/// Validate a Game
/// </summary>
2025-09-26 13:06:18 -04:00
private static void Validate(Data.Models.OfflineList.Game? game)
{
Assert.NotNull(game);
Assert.Equal("XXXXXX", game.ImageNumber);
Assert.Equal("XXXXXX", game.ReleaseNumber);
Assert.Equal("XXXXXX", game.Title);
Assert.Equal("XXXXXX", game.SaveType);
Assert.Equal("0", game.RomSize); // Converted due to filtering
Assert.Equal("XXXXXX", game.Publisher);
Assert.Equal("XXXXXX", game.Location);
Assert.Equal("XXXXXX", game.SourceRom);
Assert.Equal("XXXXXX", game.Language);
Validate(game.Files);
Assert.Equal("XXXXXX", game.Im1CRC);
Assert.Equal("XXXXXX", game.Im2CRC);
Assert.Equal("XXXXXX", game.Comment);
Assert.Equal("XXXXXX", game.DuplicateID);
}
/// <summary>
/// Validate a Files
/// </summary>
2025-09-26 13:06:18 -04:00
private static void Validate(Data.Models.OfflineList.Files? files)
{
Assert.NotNull(files);
Assert.NotNull(files.RomCRC);
var fileromcrc = Assert.Single(files.RomCRC);
Validate(fileromcrc);
}
/// <summary>
/// Validate a FileRomCRC
/// </summary>
2025-09-26 13:06:18 -04:00
private static void Validate(Data.Models.OfflineList.FileRomCRC? fileromcrc)
{
Assert.NotNull(fileromcrc);
Assert.Equal("XXXXXX", fileromcrc.Extension);
Assert.Equal("XXXXXX", fileromcrc.Content);
}
/// <summary>
/// Validate a GUI
/// </summary>
2025-09-26 13:06:18 -04:00
private static void Validate(Data.Models.OfflineList.GUI? gui)
{
Assert.NotNull(gui);
Validate(gui.Images);
}
/// <summary>
/// Validate a Images
/// </summary>
2025-09-26 13:06:18 -04:00
private static void Validate(Data.Models.OfflineList.Images? images)
{
Assert.NotNull(images);
Assert.Equal("XXXXXX", images.Width);
Assert.Equal("XXXXXX", images.Height);
Assert.NotNull(images.Image);
var image = Assert.Single(images.Image);
Validate(image);
}
/// <summary>
/// Validate a Image
/// </summary>
2025-09-26 13:06:18 -04:00
private static void Validate(Data.Models.OfflineList.Image? image)
{
Assert.NotNull(image);
Assert.Equal("XXXXXX", image.X);
Assert.Equal("XXXXXX", image.Y);
Assert.Equal("XXXXXX", image.Width);
Assert.Equal("XXXXXX", image.Height);
}
}
2025-11-14 09:06:59 -05:00
}