Skip to content

Commit 638630c

Browse files
committed
Disallow some fields from being null
1 parent 6c3afd2 commit 638630c

File tree

6 files changed

+88
-237
lines changed

6 files changed

+88
-237
lines changed

SabreTools.RedumpLib.Test/BuilderTests.cs

Lines changed: 1 addition & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -26,102 +26,6 @@ public void CreateFromFileTest(string filename, bool expectNull)
2626
Assert.Equal(expectNull, si == null);
2727
}
2828

29-
[Fact]
30-
public void EnsureAllSections_Null_Filled()
31-
{
32-
SubmissionInfo? si = null;
33-
var actual = Builder.EnsureAllSections(si);
34-
35-
Assert.NotNull(actual);
36-
Assert.NotNull(actual.CommonDiscInfo);
37-
Assert.NotNull(actual.CommonDiscInfo.CommentsSpecialFields);
38-
Assert.NotNull(actual.CommonDiscInfo.ContentsSpecialFields);
39-
Assert.NotNull(actual.VersionAndEditions);
40-
Assert.NotNull(actual.EDC);
41-
Assert.NotNull(actual.ParentCloneRelationship);
42-
Assert.NotNull(actual.Extras);
43-
Assert.NotNull(actual.CopyProtection);
44-
Assert.NotNull(actual.DumpersAndStatus);
45-
Assert.NotNull(actual.TracksAndWriteOffsets);
46-
Assert.NotNull(actual.SizeAndChecksums);
47-
Assert.NotNull(actual.DumpingInfo);
48-
Assert.NotNull(actual.Artifacts);
49-
}
50-
51-
[Fact]
52-
public void EnsureAllSections_Empty_Filled()
53-
{
54-
SubmissionInfo? si = new SubmissionInfo
55-
{
56-
CommonDiscInfo = null,
57-
VersionAndEditions = null,
58-
EDC = null,
59-
ParentCloneRelationship = null,
60-
Extras = null,
61-
CopyProtection = null,
62-
DumpersAndStatus = null,
63-
TracksAndWriteOffsets = null,
64-
SizeAndChecksums = null,
65-
DumpingInfo = null,
66-
Artifacts = null,
67-
};
68-
var actual = Builder.EnsureAllSections(si);
69-
70-
Assert.NotNull(actual);
71-
Assert.NotNull(actual.CommonDiscInfo);
72-
Assert.NotNull(actual.CommonDiscInfo.CommentsSpecialFields);
73-
Assert.NotNull(actual.CommonDiscInfo.ContentsSpecialFields);
74-
Assert.NotNull(actual.VersionAndEditions);
75-
Assert.NotNull(actual.EDC);
76-
Assert.NotNull(actual.ParentCloneRelationship);
77-
Assert.NotNull(actual.Extras);
78-
Assert.NotNull(actual.CopyProtection);
79-
Assert.NotNull(actual.DumpersAndStatus);
80-
Assert.NotNull(actual.TracksAndWriteOffsets);
81-
Assert.NotNull(actual.SizeAndChecksums);
82-
Assert.NotNull(actual.DumpingInfo);
83-
Assert.NotNull(actual.Artifacts);
84-
}
85-
86-
[Fact]
87-
public void EnsureAllSections_Filled_Filled()
88-
{
89-
SubmissionInfo? si = new SubmissionInfo
90-
{
91-
CommonDiscInfo = new CommonDiscInfoSection
92-
{
93-
CommentsSpecialFields = [],
94-
ContentsSpecialFields = [],
95-
},
96-
VersionAndEditions = new VersionAndEditionsSection(),
97-
EDC = new EDCSection(),
98-
ParentCloneRelationship = new ParentCloneRelationshipSection(),
99-
Extras = new ExtrasSection(),
100-
CopyProtection = new CopyProtectionSection(),
101-
DumpersAndStatus = new DumpersAndStatusSection(),
102-
TracksAndWriteOffsets = new TracksAndWriteOffsetsSection(),
103-
SizeAndChecksums = new SizeAndChecksumsSection(),
104-
DumpingInfo = new DumpingInfoSection(),
105-
Artifacts = [],
106-
};
107-
var actual = Builder.EnsureAllSections(si);
108-
109-
Assert.NotNull(actual);
110-
Assert.NotNull(actual.CommonDiscInfo);
111-
Assert.NotNull(actual.CommonDiscInfo.CommentsSpecialFields);
112-
Assert.NotNull(actual.CommonDiscInfo.ContentsSpecialFields);
113-
Assert.NotNull(actual.VersionAndEditions);
114-
Assert.NotNull(actual.EDC);
115-
Assert.NotNull(actual.ParentCloneRelationship);
116-
Assert.NotNull(actual.Extras);
117-
Assert.NotNull(actual.CopyProtection);
118-
Assert.NotNull(actual.DumpersAndStatus);
119-
Assert.NotNull(actual.TracksAndWriteOffsets);
120-
Assert.NotNull(actual.SizeAndChecksums);
121-
Assert.NotNull(actual.DumpingInfo);
122-
Assert.NotNull(actual.Artifacts);
123-
}
124-
12529
[Fact]
12630
public void InjectSubmissionInformation_BothNull_Null()
12731
{
@@ -188,4 +92,4 @@ public void ReplaceHtmlWithSiteCodes_OutdatedCode_Replaced()
18892
Assert.Equal(expected, actual);
18993
}
19094
}
191-
}
95+
}

SabreTools.RedumpLib.Test/ValidatorTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public void NormalizeDiscType_InvalidSizeChecksums_Untouched()
2828
SubmissionInfo si = new SubmissionInfo
2929
{
3030
CommonDiscInfo = new CommonDiscInfoSection { Media = DiscType.CD },
31-
SizeAndChecksums = null,
31+
SizeAndChecksums = new(),
3232
};
3333

3434
Validator.NormalizeDiscType(si);
@@ -301,4 +301,4 @@ public void NormalizeDiscType_UMDSL_Fixed(DiscType type)
301301
Assert.Equal(expected, si.CommonDiscInfo.Media);
302302
}
303303
}
304-
}
304+
}

SabreTools.RedumpLib/Builder.cs

Lines changed: 44 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -253,8 +253,6 @@ public static class Builder
253253
/// <param name="includeAllData">True to include all pullable information, false to do bare minimum</param>
254254
public async static Task<bool> FillFromId(RedumpClient rc, SubmissionInfo info, int id, bool includeAllData)
255255
{
256-
// Ensure that required sections exist
257-
info = EnsureAllSections(info);
258256
var discData = await rc.DownloadSingleSiteID(id);
259257
if (string.IsNullOrEmpty(discData))
260258
return false;
@@ -605,35 +603,6 @@ public async static Task<bool> FillFromId(RedumpClient rc, SubmissionInfo info,
605603
return true;
606604
}
607605

608-
/// <summary>
609-
/// Ensure all required sections in a submission info exist
610-
/// </summary>
611-
/// <param name="info">SubmissionInfo object to verify</param>
612-
public static SubmissionInfo EnsureAllSections(SubmissionInfo? info)
613-
{
614-
// If there's no info, create one
615-
info ??= new SubmissionInfo();
616-
617-
// Ensure all sections
618-
info.CommonDiscInfo ??= new CommonDiscInfoSection();
619-
info.VersionAndEditions ??= new VersionAndEditionsSection();
620-
info.EDC ??= new EDCSection();
621-
info.ParentCloneRelationship ??= new ParentCloneRelationshipSection();
622-
info.Extras ??= new ExtrasSection();
623-
info.CopyProtection ??= new CopyProtectionSection();
624-
info.DumpersAndStatus ??= new DumpersAndStatusSection();
625-
info.TracksAndWriteOffsets ??= new TracksAndWriteOffsetsSection();
626-
info.SizeAndChecksums ??= new SizeAndChecksumsSection();
627-
info.DumpingInfo ??= new DumpingInfoSection();
628-
info.Artifacts ??= [];
629-
630-
// Ensure special dictionaries
631-
info.CommonDiscInfo.CommentsSpecialFields ??= [];
632-
info.CommonDiscInfo.ContentsSpecialFields ??= [];
633-
634-
return info;
635-
}
636-
637606
/// <summary>
638607
/// Inject information from a seed SubmissionInfo into the existing one
639608
/// </summary>
@@ -645,62 +614,52 @@ public static SubmissionInfo EnsureAllSections(SubmissionInfo? info)
645614
if (seed == null)
646615
return info;
647616

648-
// Ensure that required sections exist
649-
info = EnsureAllSections(info);
650-
651617
// Otherwise, inject information as necessary
652-
if (info.CommonDiscInfo != null && seed.CommonDiscInfo != null)
653-
{
654-
// Info that only overwrites if supplied
655-
if (!string.IsNullOrEmpty(seed.CommonDiscInfo.Title)) info.CommonDiscInfo.Title = seed.CommonDiscInfo.Title;
656-
if (!string.IsNullOrEmpty(seed.CommonDiscInfo.ForeignTitleNonLatin)) info.CommonDiscInfo.ForeignTitleNonLatin = seed.CommonDiscInfo.ForeignTitleNonLatin;
657-
if (!string.IsNullOrEmpty(seed.CommonDiscInfo.DiscNumberLetter)) info.CommonDiscInfo.DiscNumberLetter = seed.CommonDiscInfo.DiscNumberLetter;
658-
if (!string.IsNullOrEmpty(seed.CommonDiscInfo.DiscTitle)) info.CommonDiscInfo.DiscTitle = seed.CommonDiscInfo.DiscTitle;
659-
if (seed.CommonDiscInfo.Category != null) info.CommonDiscInfo.Category = seed.CommonDiscInfo.Category;
660-
if (seed.CommonDiscInfo.Region != null) info.CommonDiscInfo.Region = seed.CommonDiscInfo.Region;
661-
if (seed.CommonDiscInfo.Languages != null) info.CommonDiscInfo.Languages = seed.CommonDiscInfo.Languages;
662-
if (seed.CommonDiscInfo.LanguageSelection != null) info.CommonDiscInfo.LanguageSelection = seed.CommonDiscInfo.LanguageSelection;
663-
if (!string.IsNullOrEmpty(seed.CommonDiscInfo.Serial)) info.CommonDiscInfo.Serial = seed.CommonDiscInfo.Serial;
664-
if (!string.IsNullOrEmpty(seed.CommonDiscInfo.Barcode)) info.CommonDiscInfo.Barcode = seed.CommonDiscInfo.Barcode;
665-
if (!string.IsNullOrEmpty(seed.CommonDiscInfo.Comments)) info.CommonDiscInfo.Comments = seed.CommonDiscInfo.Comments;
666-
if (seed.CommonDiscInfo.CommentsSpecialFields != null) info.CommonDiscInfo.CommentsSpecialFields = seed.CommonDiscInfo.CommentsSpecialFields;
667-
if (!string.IsNullOrEmpty(seed.CommonDiscInfo.Contents)) info.CommonDiscInfo.Contents = seed.CommonDiscInfo.Contents;
668-
if (seed.CommonDiscInfo.ContentsSpecialFields != null) info.CommonDiscInfo.ContentsSpecialFields = seed.CommonDiscInfo.ContentsSpecialFields;
669-
670-
// Info that always overwrites
671-
info.CommonDiscInfo.Layer0MasteringRing = seed.CommonDiscInfo.Layer0MasteringRing;
672-
info.CommonDiscInfo.Layer0MasteringSID = seed.CommonDiscInfo.Layer0MasteringSID;
673-
info.CommonDiscInfo.Layer0ToolstampMasteringCode = seed.CommonDiscInfo.Layer0ToolstampMasteringCode;
674-
info.CommonDiscInfo.Layer0MouldSID = seed.CommonDiscInfo.Layer0MouldSID;
675-
info.CommonDiscInfo.Layer0AdditionalMould = seed.CommonDiscInfo.Layer0AdditionalMould;
676-
677-
info.CommonDiscInfo.Layer1MasteringRing = seed.CommonDiscInfo.Layer1MasteringRing;
678-
info.CommonDiscInfo.Layer1MasteringSID = seed.CommonDiscInfo.Layer1MasteringSID;
679-
info.CommonDiscInfo.Layer1ToolstampMasteringCode = seed.CommonDiscInfo.Layer1ToolstampMasteringCode;
680-
info.CommonDiscInfo.Layer1MouldSID = seed.CommonDiscInfo.Layer1MouldSID;
681-
info.CommonDiscInfo.Layer1AdditionalMould = seed.CommonDiscInfo.Layer1AdditionalMould;
682-
683-
info.CommonDiscInfo.Layer2MasteringRing = seed.CommonDiscInfo.Layer2MasteringRing;
684-
info.CommonDiscInfo.Layer2MasteringSID = seed.CommonDiscInfo.Layer2MasteringSID;
685-
info.CommonDiscInfo.Layer2ToolstampMasteringCode = seed.CommonDiscInfo.Layer2ToolstampMasteringCode;
686-
687-
info.CommonDiscInfo.Layer3MasteringRing = seed.CommonDiscInfo.Layer3MasteringRing;
688-
info.CommonDiscInfo.Layer3MasteringSID = seed.CommonDiscInfo.Layer3MasteringSID;
689-
info.CommonDiscInfo.Layer3ToolstampMasteringCode = seed.CommonDiscInfo.Layer3ToolstampMasteringCode;
690-
}
691-
692-
if (info.VersionAndEditions != null && seed.VersionAndEditions != null)
693-
{
694-
// Info that only overwrites if supplied
695-
if (!string.IsNullOrEmpty(seed.VersionAndEditions.Version)) info.VersionAndEditions.Version = seed.VersionAndEditions.Version;
696-
if (!string.IsNullOrEmpty(seed.VersionAndEditions.OtherEditions)) info.VersionAndEditions.OtherEditions = seed.VersionAndEditions.OtherEditions;
697-
}
618+
info ??= new SubmissionInfo();
698619

699-
if (info.CopyProtection != null && seed.CopyProtection != null)
700-
{
701-
// Info that only overwrites if supplied
702-
if (!string.IsNullOrEmpty(seed.CopyProtection.Protection)) info.CopyProtection.Protection = seed.CopyProtection.Protection;
703-
}
620+
// Info that only overwrites if supplied
621+
if (!string.IsNullOrEmpty(seed.CommonDiscInfo.Title)) info.CommonDiscInfo.Title = seed.CommonDiscInfo.Title;
622+
if (!string.IsNullOrEmpty(seed.CommonDiscInfo.ForeignTitleNonLatin)) info.CommonDiscInfo.ForeignTitleNonLatin = seed.CommonDiscInfo.ForeignTitleNonLatin;
623+
if (!string.IsNullOrEmpty(seed.CommonDiscInfo.DiscNumberLetter)) info.CommonDiscInfo.DiscNumberLetter = seed.CommonDiscInfo.DiscNumberLetter;
624+
if (!string.IsNullOrEmpty(seed.CommonDiscInfo.DiscTitle)) info.CommonDiscInfo.DiscTitle = seed.CommonDiscInfo.DiscTitle;
625+
if (seed.CommonDiscInfo.Category != null) info.CommonDiscInfo.Category = seed.CommonDiscInfo.Category;
626+
if (seed.CommonDiscInfo.Region != null) info.CommonDiscInfo.Region = seed.CommonDiscInfo.Region;
627+
if (seed.CommonDiscInfo.Languages != null) info.CommonDiscInfo.Languages = seed.CommonDiscInfo.Languages;
628+
if (seed.CommonDiscInfo.LanguageSelection != null) info.CommonDiscInfo.LanguageSelection = seed.CommonDiscInfo.LanguageSelection;
629+
if (!string.IsNullOrEmpty(seed.CommonDiscInfo.Serial)) info.CommonDiscInfo.Serial = seed.CommonDiscInfo.Serial;
630+
if (!string.IsNullOrEmpty(seed.CommonDiscInfo.Barcode)) info.CommonDiscInfo.Barcode = seed.CommonDiscInfo.Barcode;
631+
if (!string.IsNullOrEmpty(seed.CommonDiscInfo.Comments)) info.CommonDiscInfo.Comments = seed.CommonDiscInfo.Comments;
632+
if (seed.CommonDiscInfo.CommentsSpecialFields != null) info.CommonDiscInfo.CommentsSpecialFields = seed.CommonDiscInfo.CommentsSpecialFields;
633+
if (!string.IsNullOrEmpty(seed.CommonDiscInfo.Contents)) info.CommonDiscInfo.Contents = seed.CommonDiscInfo.Contents;
634+
if (seed.CommonDiscInfo.ContentsSpecialFields != null) info.CommonDiscInfo.ContentsSpecialFields = seed.CommonDiscInfo.ContentsSpecialFields;
635+
636+
// Info that always overwrites
637+
info.CommonDiscInfo.Layer0MasteringRing = seed.CommonDiscInfo.Layer0MasteringRing;
638+
info.CommonDiscInfo.Layer0MasteringSID = seed.CommonDiscInfo.Layer0MasteringSID;
639+
info.CommonDiscInfo.Layer0ToolstampMasteringCode = seed.CommonDiscInfo.Layer0ToolstampMasteringCode;
640+
info.CommonDiscInfo.Layer0MouldSID = seed.CommonDiscInfo.Layer0MouldSID;
641+
info.CommonDiscInfo.Layer0AdditionalMould = seed.CommonDiscInfo.Layer0AdditionalMould;
642+
643+
info.CommonDiscInfo.Layer1MasteringRing = seed.CommonDiscInfo.Layer1MasteringRing;
644+
info.CommonDiscInfo.Layer1MasteringSID = seed.CommonDiscInfo.Layer1MasteringSID;
645+
info.CommonDiscInfo.Layer1ToolstampMasteringCode = seed.CommonDiscInfo.Layer1ToolstampMasteringCode;
646+
info.CommonDiscInfo.Layer1MouldSID = seed.CommonDiscInfo.Layer1MouldSID;
647+
info.CommonDiscInfo.Layer1AdditionalMould = seed.CommonDiscInfo.Layer1AdditionalMould;
648+
649+
info.CommonDiscInfo.Layer2MasteringRing = seed.CommonDiscInfo.Layer2MasteringRing;
650+
info.CommonDiscInfo.Layer2MasteringSID = seed.CommonDiscInfo.Layer2MasteringSID;
651+
info.CommonDiscInfo.Layer2ToolstampMasteringCode = seed.CommonDiscInfo.Layer2ToolstampMasteringCode;
652+
653+
info.CommonDiscInfo.Layer3MasteringRing = seed.CommonDiscInfo.Layer3MasteringRing;
654+
info.CommonDiscInfo.Layer3MasteringSID = seed.CommonDiscInfo.Layer3MasteringSID;
655+
info.CommonDiscInfo.Layer3ToolstampMasteringCode = seed.CommonDiscInfo.Layer3ToolstampMasteringCode;
656+
657+
// Info that only overwrites if supplied
658+
if (!string.IsNullOrEmpty(seed.VersionAndEditions.Version)) info.VersionAndEditions.Version = seed.VersionAndEditions.Version;
659+
if (!string.IsNullOrEmpty(seed.VersionAndEditions.OtherEditions)) info.VersionAndEditions.OtherEditions = seed.VersionAndEditions.OtherEditions;
660+
661+
// Info that only overwrites if supplied
662+
if (!string.IsNullOrEmpty(seed.CopyProtection.Protection)) info.CopyProtection.Protection = seed.CopyProtection.Protection;
704663

705664
return info;
706665
}

0 commit comments

Comments
 (0)