Extract method from `Database.InitializeWork`, clean up, and add test
This commit is contained in:
parent
9ce3771e85
commit
4678d90646
|
@ -94,6 +94,54 @@ namespace BizHawk.Emulation.Common
|
||||||
|
|
||||||
private static bool initialized = false;
|
private static bool initialized = false;
|
||||||
|
|
||||||
|
public static CompactGameInfo ParseCGIRecord(string line)
|
||||||
|
{
|
||||||
|
const char FIELD_SEPARATOR = '\t';
|
||||||
|
var items = line.Split(FIELD_SEPARATOR);
|
||||||
|
var field = 0;
|
||||||
|
var hashDigest = FormatHash(items[field++]);
|
||||||
|
var dumpStatus = items[field++].Trim() switch
|
||||||
|
{
|
||||||
|
"B" => RomStatus.BadDump, // see /Assets/gamedb/gamedb.txt
|
||||||
|
"V" => RomStatus.BadDump, // see /Assets/gamedb/gamedb.txt
|
||||||
|
"T" => RomStatus.TranslatedRom,
|
||||||
|
"O" => RomStatus.Overdump,
|
||||||
|
"I" => RomStatus.Bios,
|
||||||
|
"D" => RomStatus.Homebrew,
|
||||||
|
"H" => RomStatus.Hack,
|
||||||
|
"U" => RomStatus.Unknown,
|
||||||
|
_ => RomStatus.GoodDump
|
||||||
|
};
|
||||||
|
var knownName = items[field++];
|
||||||
|
var sysID = items[field++];
|
||||||
|
string/*?*/ metadata = null;
|
||||||
|
string region = string.Empty;
|
||||||
|
string forcedCore = string.Empty;
|
||||||
|
if (field < items.Length)
|
||||||
|
{
|
||||||
|
_ = items[field++]; // rarely populated; possibly genre or just a remark
|
||||||
|
if (field < items.Length)
|
||||||
|
{
|
||||||
|
metadata = items[field++];
|
||||||
|
if (field < items.Length)
|
||||||
|
{
|
||||||
|
region = items[field++];
|
||||||
|
if (field < items.Length) forcedCore = items[field++];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new()
|
||||||
|
{
|
||||||
|
Hash = hashDigest,
|
||||||
|
Status = dumpStatus,
|
||||||
|
Name = knownName,
|
||||||
|
System = sysID,
|
||||||
|
MetaData = metadata,
|
||||||
|
Region = region,
|
||||||
|
ForcedCore = forcedCore,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private static void InitializeWork(string path, bool inUser, bool silent)
|
private static void InitializeWork(string path, bool inUser, bool silent)
|
||||||
{
|
{
|
||||||
if (!inUser) _expected.Remove(Path.GetFileName(path));
|
if (!inUser) _expected.Remove(Path.GetFileName(path));
|
||||||
|
@ -115,31 +163,7 @@ namespace BizHawk.Emulation.Common
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
var game = ParseCGIRecord(line);
|
||||||
var items = line.Split('\t');
|
|
||||||
|
|
||||||
var game = new CompactGameInfo
|
|
||||||
{
|
|
||||||
Hash = FormatHash(items[0]),
|
|
||||||
Status = items[1].Trim()
|
|
||||||
switch
|
|
||||||
{
|
|
||||||
"B" => RomStatus.BadDump, // see /Assets/gamedb/gamedb.txt
|
|
||||||
"V" => RomStatus.BadDump, // see /Assets/gamedb/gamedb.txt
|
|
||||||
"T" => RomStatus.TranslatedRom,
|
|
||||||
"O" => RomStatus.Overdump,
|
|
||||||
"I" => RomStatus.Bios,
|
|
||||||
"D" => RomStatus.Homebrew,
|
|
||||||
"H" => RomStatus.Hack,
|
|
||||||
"U" => RomStatus.Unknown,
|
|
||||||
_ => RomStatus.GoodDump
|
|
||||||
},
|
|
||||||
Name = items[2],
|
|
||||||
System = items[3],
|
|
||||||
MetaData = items.Length >= 6 ? items[5] : null,
|
|
||||||
Region = items.Length >= 7 ? items[6] : "",
|
|
||||||
ForcedCore = items.Length >= 8 ? items[7].ToLowerInvariant() : ""
|
|
||||||
};
|
|
||||||
if (game.Hash is SHA1Checksum.EmptyFile or MD5Checksum.EmptyFile)
|
if (game.Hash is SHA1Checksum.EmptyFile or MD5Checksum.EmptyFile)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"WARNING: gamedb {path} contains entry for empty rom as \"{game.Name}\"!");
|
Console.WriteLine($"WARNING: gamedb {path} contains entry for empty rom as \"{game.Name}\"!");
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
using BizHawk.Emulation.Common;
|
||||||
|
|
||||||
|
namespace BizHawk.Tests.Emulation.Common
|
||||||
|
{
|
||||||
|
[TestClass]
|
||||||
|
public sealed class GameDBTSVParserTests
|
||||||
|
{
|
||||||
|
[DataRow(
|
||||||
|
"sha1:f4885610503bff2c4ca816f4f28d1fe517b92f35\t\t2 Pak Special Yellow - Star Warrior,Frogger (1990) (HES) (PAL) [!]\tA26\t\tm=F6;PAL=true",
|
||||||
|
"F4885610503BFF2C4CA816F4F28D1FE517B92F35",
|
||||||
|
RomStatus.GoodDump,
|
||||||
|
"2 Pak Special Yellow - Star Warrior,Frogger (1990) (HES) (PAL) [!]",
|
||||||
|
"A26",
|
||||||
|
"m=F6;PAL=true",
|
||||||
|
""/*empty string*/,
|
||||||
|
""/*empty string*/)]
|
||||||
|
[DataRow(
|
||||||
|
"3064E664D34859649B67559F0ED0C2FFD6948031\tB\tActRaiser 2 (U) [b1]\tSNES",
|
||||||
|
"3064E664D34859649B67559F0ED0C2FFD6948031",
|
||||||
|
RomStatus.BadDump,
|
||||||
|
"ActRaiser 2 (U) [b1]",
|
||||||
|
"SNES",
|
||||||
|
null,
|
||||||
|
""/*empty string*/,
|
||||||
|
""/*empty string*/)]
|
||||||
|
[TestMethod]
|
||||||
|
public void Check(
|
||||||
|
string line,
|
||||||
|
string hashDigest,
|
||||||
|
RomStatus dumpStatus,
|
||||||
|
string knownName,
|
||||||
|
string sysID,
|
||||||
|
string? metadata,
|
||||||
|
string region,
|
||||||
|
string forcedCore)
|
||||||
|
{
|
||||||
|
var gi = Database.ParseCGIRecord(line);
|
||||||
|
Assert.AreEqual(expected: hashDigest, actual: gi.Hash, message: nameof(CompactGameInfo.Hash));
|
||||||
|
Assert.AreEqual(expected: dumpStatus, actual: gi.Status, message: nameof(CompactGameInfo.Status));
|
||||||
|
Assert.AreEqual(expected: knownName, actual: gi.Name, message: nameof(CompactGameInfo.Name));
|
||||||
|
Assert.AreEqual(expected: sysID, actual: gi.System, message: nameof(CompactGameInfo.System));
|
||||||
|
Assert.AreEqual(expected: metadata, actual: gi.MetaData, message: nameof(CompactGameInfo.MetaData));
|
||||||
|
Assert.AreEqual(expected: region, actual: gi.Region, message: nameof(CompactGameInfo.Region));
|
||||||
|
Assert.AreEqual(expected: forcedCore, actual: gi.ForcedCore, message: nameof(CompactGameInfo.ForcedCore));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue