Skip to content

Commit

Permalink
Add WithName method
Browse files Browse the repository at this point in the history
Check that number of names passed to WithNames or ctor matches expected number of names
  • Loading branch information
ethanmoffat committed Mar 17, 2022
1 parent 0b668f7 commit c5d0a19
Show file tree
Hide file tree
Showing 10 changed files with 112 additions and 93 deletions.
36 changes: 18 additions & 18 deletions EOLib.IO.Test/Pub/ECFFileTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,15 @@ public void HasCorrectFileType()
public void SerializeToByteArray_ReturnsExpectedBytes()
{
var expectedBytes = MakeECFFile(55565554,
new ECFRecord().WithID(1).WithNames(new List<string> { "TestFixture" }),
new ECFRecord().WithID(2).WithNames(new List<string> { "Test2" }),
new ECFRecord().WithID(3).WithNames(new List<string> { "Test3" }),
new ECFRecord().WithID(4).WithNames(new List<string> { "Test4" }),
new ECFRecord().WithID(5).WithNames(new List<string> { "Test5" }),
new ECFRecord().WithID(6).WithNames(new List<string> { "Test6" }),
new ECFRecord().WithID(7).WithNames(new List<string> { "Test7" }),
new ECFRecord().WithID(8).WithNames(new List<string> { "Test8" }),
new ECFRecord().WithID(9).WithNames(new List<string> { "eof" }));
new ECFRecord().WithID(1).WithName("TestFixture"),
new ECFRecord().WithID(2).WithName("Test2"),
new ECFRecord().WithID(3).WithName("Test3"),
new ECFRecord().WithID(4).WithName("Test4"),
new ECFRecord().WithID(5).WithName("Test5"),
new ECFRecord().WithID(6).WithName("Test6"),
new ECFRecord().WithID(7).WithName("Test7"),
new ECFRecord().WithID(8).WithName("Test8"),
new ECFRecord().WithID(9).WithName("eof"));

var serializer = CreateFileSerializer();
var file = serializer.DeserializeFromByteArray(expectedBytes, () => new ECFFile());
Expand All @@ -45,15 +45,15 @@ public void DeserializeFromByteArray_HasExpectedIDAndNames()
{
var records = new[]
{
new ECFRecord().WithID(1).WithNames(new List<string> { "TestFixture" }),
new ECFRecord().WithID(2).WithNames(new List<string> { "Test2" }),
new ECFRecord().WithID(3).WithNames(new List<string> { "Test3" }),
new ECFRecord().WithID(4).WithNames(new List<string> { "Test4" }),
new ECFRecord().WithID(5).WithNames(new List<string> { "Test5" }),
new ECFRecord().WithID(6).WithNames(new List<string> { "Test6" }),
new ECFRecord().WithID(7).WithNames(new List<string> { "Test7" }),
new ECFRecord().WithID(8).WithNames(new List<string> { "Test8" }),
new ECFRecord().WithID(9).WithNames(new List<string> { "eof" })
new ECFRecord().WithID(1).WithName("TestFixture"),
new ECFRecord().WithID(2).WithName("Test2"),
new ECFRecord().WithID(3).WithName("Test3"),
new ECFRecord().WithID(4).WithName("Test4"),
new ECFRecord().WithID(5).WithName("Test5"),
new ECFRecord().WithID(6).WithName("Test6"),
new ECFRecord().WithID(7).WithName("Test7"),
new ECFRecord().WithID(8).WithName("Test8"),
new ECFRecord().WithID(9).WithName("eof")
};
var bytes = MakeECFFile(55565554, records);

Expand Down
36 changes: 18 additions & 18 deletions EOLib.IO.Test/Pub/EIFFileTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,15 @@ public void HasCorrectFileType()
public void SerializeToByteArray_ReturnsExpectedBytes()
{
var expectedBytes = MakeEIFFile(55565554,
new EIFRecord().WithID(1).WithNames(new List<string> { "TestFixture" }),
new EIFRecord().WithID(2).WithNames(new List<string> { "Test2" }),
new EIFRecord().WithID(3).WithNames(new List<string> { "Test3" }),
new EIFRecord().WithID(4).WithNames(new List<string> { "Test4" }),
new EIFRecord().WithID(5).WithNames(new List<string> { "Test5" }),
new EIFRecord().WithID(6).WithNames(new List<string> { "Test6" }),
new EIFRecord().WithID(7).WithNames(new List<string> { "Test7" }),
new EIFRecord().WithID(8).WithNames(new List<string> { "Test8" }),
new EIFRecord().WithID(9).WithNames(new List<string> { "eof" }));
new EIFRecord().WithID(1).WithName("TestFixture"),
new EIFRecord().WithID(2).WithName("Test2"),
new EIFRecord().WithID(3).WithName("Test3"),
new EIFRecord().WithID(4).WithName("Test4"),
new EIFRecord().WithID(5).WithName("Test5"),
new EIFRecord().WithID(6).WithName("Test6"),
new EIFRecord().WithID(7).WithName("Test7"),
new EIFRecord().WithID(8).WithName("Test8"),
new EIFRecord().WithID(9).WithName("eof"));

var serializer = CreateFileSerializer();
var file = serializer.DeserializeFromByteArray(expectedBytes, () => new EIFFile());
Expand All @@ -45,15 +45,15 @@ public void DeserializeFromByteArray_HasExpectedIDAndNames()
{
var records = new[]
{
new EIFRecord().WithID(1).WithNames(new List<string> { "TestFixture" }),
new EIFRecord().WithID(2).WithNames(new List<string> { "Test2" }),
new EIFRecord().WithID(3).WithNames(new List<string> { "Test3" }),
new EIFRecord().WithID(4).WithNames(new List<string> { "Test4" }),
new EIFRecord().WithID(5).WithNames(new List<string> { "Test5" }),
new EIFRecord().WithID(6).WithNames(new List<string> { "Test6" }),
new EIFRecord().WithID(7).WithNames(new List<string> { "Test7" }),
new EIFRecord().WithID(8).WithNames(new List<string> { "Test8" }),
new EIFRecord().WithID(9).WithNames(new List<string> { "eof" })
new EIFRecord().WithID(1).WithName("TestFixture"),
new EIFRecord().WithID(2).WithName("Test2"),
new EIFRecord().WithID(3).WithName("Test3"),
new EIFRecord().WithID(4).WithName("Test4"),
new EIFRecord().WithID(5).WithName("Test5"),
new EIFRecord().WithID(6).WithName("Test6"),
new EIFRecord().WithID(7).WithName("Test7"),
new EIFRecord().WithID(8).WithName("Test8"),
new EIFRecord().WithID(9).WithName("eof")
};
var bytes = MakeEIFFile(55565554, records);

Expand Down
36 changes: 18 additions & 18 deletions EOLib.IO.Test/Pub/ENFFileTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,15 @@ public void HasCorrectFileType()
public void SerializeToByteArray_ReturnsExpectedBytes()
{
var expectedBytes = MakeENFFile(55565554,
new ENFRecord().WithID(1).WithNames(new List<string> { "TestFixture" }),
new ENFRecord().WithID(2).WithNames(new List<string> { "Test2" }),
new ENFRecord().WithID(3).WithNames(new List<string> { "Test3" }),
new ENFRecord().WithID(4).WithNames(new List<string> { "Test4" }),
new ENFRecord().WithID(5).WithNames(new List<string> { "Test5" }),
new ENFRecord().WithID(6).WithNames(new List<string> { "Test6" }),
new ENFRecord().WithID(7).WithNames(new List<string> { "Test7" }),
new ENFRecord().WithID(8).WithNames(new List<string> { "Test8" }),
new ENFRecord().WithID(9).WithNames(new List<string> { "eof" }));
new ENFRecord().WithID(1).WithName("TestFixture"),
new ENFRecord().WithID(2).WithName("Test2"),
new ENFRecord().WithID(3).WithName("Test3"),
new ENFRecord().WithID(4).WithName("Test4"),
new ENFRecord().WithID(5).WithName("Test5"),
new ENFRecord().WithID(6).WithName("Test6"),
new ENFRecord().WithID(7).WithName("Test7"),
new ENFRecord().WithID(8).WithName("Test8"),
new ENFRecord().WithID(9).WithName("eof"));

var serializer = CreateFileSerializer();
var file = serializer.DeserializeFromByteArray(expectedBytes, () => new ENFFile());
Expand All @@ -45,15 +45,15 @@ public void DeserializeFromByteArray_HasExpectedIDAndNames()
{
var records = new[]
{
new ENFRecord().WithID(1).WithNames(new List<string> { "TestFixture" }),
new ENFRecord().WithID(2).WithNames(new List<string> { "Test2" }),
new ENFRecord().WithID(3).WithNames(new List<string> { "Test3" }),
new ENFRecord().WithID(4).WithNames(new List<string> { "Test4" }),
new ENFRecord().WithID(5).WithNames(new List<string> { "Test5" }),
new ENFRecord().WithID(6).WithNames(new List<string> { "Test6" }),
new ENFRecord().WithID(7).WithNames(new List<string> { "Test7" }),
new ENFRecord().WithID(8).WithNames(new List<string> { "Test8" }),
new ENFRecord().WithID(9).WithNames(new List<string> { "eof" })
new ENFRecord().WithID(1).WithName("TestFixture"),
new ENFRecord().WithID(2).WithName("Test2"),
new ENFRecord().WithID(3).WithName("Test3"),
new ENFRecord().WithID(4).WithName("Test4"),
new ENFRecord().WithID(5).WithName("Test5"),
new ENFRecord().WithID(6).WithName("Test6"),
new ENFRecord().WithID(7).WithName("Test7"),
new ENFRecord().WithID(8).WithName("Test8"),
new ENFRecord().WithID(9).WithName("eof")
};
var bytes = MakeENFFile(55565554, records);

Expand Down
48 changes: 24 additions & 24 deletions EOLib.IO.Test/Services/Serializers/PubFileSerializerTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ public void EIFFile_DeserializeFromByteArray_WrongLength_Throws()

var records = new[]
{
new EIFRecord().WithID(1).WithNames(new List<string> { "Rec_1" }),
new EIFRecord().WithID(2).WithNames(new List<string> { "Rec_2" }),
new EIFRecord().WithID(3).WithNames(new List<string> { "Rec_3" }),
new EIFRecord().WithID(4).WithNames(new List<string> { "Rec_4" }),
new EIFRecord().WithID(1).WithName("Rec_1"),
new EIFRecord().WithID(2).WithName("Rec_2"),
new EIFRecord().WithID(3).WithName("Rec_3"),
new EIFRecord().WithID(4).WithName("Rec_4"),
};

var pubBytesLong = MakePubFileBytes("EIF", ExpectedChecksum, ExpectedLength + 1, records);
Expand All @@ -42,10 +42,10 @@ public void ENFFile_DeserializeFromByteArray_WrongLength_Throws()

var records = new[]
{
new ENFRecord().WithID(1).WithNames(new List<string> { "Rec_1" }),
new ENFRecord().WithID(2).WithNames(new List<string> { "Rec_2" }),
new ENFRecord().WithID(3).WithNames(new List<string> { "Rec_3" }),
new ENFRecord().WithID(4).WithNames(new List<string> { "Rec_4" }),
new ENFRecord().WithID(1).WithName("Rec_1"),
new ENFRecord().WithID(2).WithName("Rec_2"),
new ENFRecord().WithID(3).WithName("Rec_3"),
new ENFRecord().WithID(4).WithName("Rec_4"),
};

var pubBytesLong = MakePubFileBytes("ENF", ExpectedChecksum, ExpectedLength + 1, records);
Expand Down Expand Up @@ -84,10 +84,10 @@ public void ECFFile_DeserializeFromByteArray_WrongLength_Throws()

var records = new[]
{
new ECFRecord().WithID(1).WithNames(new List<string> { "Rec_1" }),
new ECFRecord().WithID(2).WithNames(new List<string> { "Rec_2" }),
new ECFRecord().WithID(3).WithNames(new List<string> { "Rec_3" }),
new ECFRecord().WithID(4).WithNames(new List<string> { "Rec_4" }),
new ECFRecord().WithID(1).WithName("Rec_1"),
new ECFRecord().WithID(2).WithName("Rec_2"),
new ECFRecord().WithID(3).WithName("Rec_3"),
new ECFRecord().WithID(4).WithName("Rec_4"),
};

var pubBytesLong = MakePubFileBytes("ECF", ExpectedChecksum, ExpectedLength + 1, records);
Expand All @@ -105,10 +105,10 @@ public void EIFFile_DeserializeFromByteArray_HasExpectedHeader()

var records = new[]
{
new EIFRecord().WithID(1).WithNames(new List<string> { "Rec_1" }),
new EIFRecord().WithID(2).WithNames(new List<string> { "Rec_2" }),
new EIFRecord().WithID(3).WithNames(new List<string> { "Rec_3" }),
new EIFRecord().WithID(4).WithNames(new List<string> { "Rec_4" }),
new EIFRecord().WithID(1).WithName("Rec_1"),
new EIFRecord().WithID(2).WithName("Rec_2"),
new EIFRecord().WithID(3).WithName("Rec_3"),
new EIFRecord().WithID(4).WithName("Rec_4"),
};

var pubBytes = MakePubFileBytes("EIF", ExpectedChecksum, ExpectedLength, records);
Expand All @@ -126,10 +126,10 @@ public void ENFFile_DeserializeFromByteArray_HasExpectedHeader()

var records = new[]
{
new ENFRecord().WithID(1).WithNames(new List<string> { "Rec_1" }),
new ENFRecord().WithID(2).WithNames(new List<string> { "Rec_2" }),
new ENFRecord().WithID(3).WithNames(new List<string> { "Rec_3" }),
new ENFRecord().WithID(4).WithNames(new List<string> { "Rec_4" }),
new ENFRecord().WithID(1).WithName("Rec_1"),
new ENFRecord().WithID(2).WithName("Rec_2"),
new ENFRecord().WithID(3).WithName("Rec_3"),
new ENFRecord().WithID(4).WithName("Rec_4"),
};

var pubBytes = MakePubFileBytes("ENF", ExpectedChecksum, ExpectedLength, records);
Expand Down Expand Up @@ -168,10 +168,10 @@ public void ECFFile_DeserializeFromByteArray_HasExpectedHeader()

var records = new[]
{
new ECFRecord().WithID(1).WithNames(new List<string> { "Rec_1" }),
new ECFRecord().WithID(2).WithNames(new List<string> { "Rec_2" }),
new ECFRecord().WithID(3).WithNames(new List<string> { "Rec_3" }),
new ECFRecord().WithID(4).WithNames(new List<string> { "Rec_4" }),
new ECFRecord().WithID(1).WithName("Rec_1"),
new ECFRecord().WithID(2).WithName("Rec_2"),
new ECFRecord().WithID(3).WithName("Rec_3"),
new ECFRecord().WithID(4).WithName("Rec_4"),
};

var pubBytes = MakePubFileBytes("ECF", ExpectedChecksum, ExpectedLength, records);
Expand Down
6 changes: 3 additions & 3 deletions EOLib.IO/Pub/ESFRecord.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,12 @@ public class ESFRecord : PubRecord
public short UnkShort49 => Get<short>(PubRecordProperty.SpellUnkShort49);

public ESFRecord()
: this(0, string.Empty)
: this(0, string.Empty, string.Empty)
{
}

public ESFRecord(int id, string name)
: base(id, name, PubRecordProperty.Spell)
public ESFRecord(int id, string name, string shout)
: base(id, new List<string> { name, shout }, PubRecordProperty.Spell)
{
}

Expand Down
2 changes: 2 additions & 0 deletions EOLib.IO/Pub/IPubRecord.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ public interface IPubRecord

IPubRecord WithID(int id);

IPubRecord WithName(string name);

IPubRecord WithNames(IReadOnlyList<string> name);

IPubRecord WithProperty(PubRecordProperty type, int value);
Expand Down
18 changes: 18 additions & 0 deletions EOLib.IO/Pub/PubRecord.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ public PubRecord(int id, List<string> names, PubRecordProperty flag)

public PubRecord(int id, List<string> names, Dictionary<PubRecordProperty, RecordData> propertyBag)
{
if (names.Count != NumberOfNames)
throw new ArgumentException($"Expected {NumberOfNames} names, but got {names.Count} instead", nameof(names));

ID = id;
_names = names;
_propertyBag = propertyBag;
Expand All @@ -58,8 +61,23 @@ public IPubRecord WithID(int id)
return copy;
}

public IPubRecord WithName(string name)
{
var copy = MakeCopy(_names, _propertyBag);

if (!copy._names.Any())
copy._names.Add(name);
else
copy._names[0] = name;

return copy;
}

public IPubRecord WithNames(IReadOnlyList<string> names)
{
if (names.Count != NumberOfNames)
throw new ArgumentException($"Expected {NumberOfNames} names, but got {names.Count} instead", nameof(names));

var copy = MakeCopy(_names, _propertyBag);
copy._names.Clear();
copy._names.AddRange(names);
Expand Down
12 changes: 6 additions & 6 deletions EOLib.Test/Net/FileTransfer/FileRequestServiceTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -172,17 +172,17 @@ private static byte[] CreateFilePacket(InitFileType type)
.AddString("EIF").AddInt(1) //RID
.AddShort(2) //Len
.AddByte(1) //filler byte
.AddBytes(rs.SerializeToByteArray(new EIFRecord().WithID(1).WithNames(new List<string> { "Test1" })))
.AddBytes(rs.SerializeToByteArray(new EIFRecord().WithID(2).WithNames(new List<string> { "eof" })));
.AddBytes(rs.SerializeToByteArray(new EIFRecord().WithID(1).WithName("Test1")))
.AddBytes(rs.SerializeToByteArray(new EIFRecord().WithID(2).WithName("eof")));
break;
case InitFileType.Npc:
packetBuilder = packetBuilder
.AddChar((byte) InitReply.NpcFile).AddChar(1) //spacer
.AddString("ENF").AddInt(1) //RID
.AddShort(2) //Len
.AddByte(1) //filler byte
.AddBytes(rs.SerializeToByteArray(new ENFRecord().WithID(1).WithNames(new List<string> { "Test1" })))
.AddBytes(rs.SerializeToByteArray(new ENFRecord().WithID(2).WithNames(new List<string> { "eof" })));
.AddBytes(rs.SerializeToByteArray(new ENFRecord().WithID(1).WithName("Test1")))
.AddBytes(rs.SerializeToByteArray(new ENFRecord().WithID(2).WithName("eof")));
break;
case InitFileType.Spell:
packetBuilder = packetBuilder
Expand All @@ -199,8 +199,8 @@ private static byte[] CreateFilePacket(InitFileType type)
.AddString("ECF").AddInt(1) //RID
.AddShort(2) //Len
.AddByte(1) //filler byte
.AddBytes(rs.SerializeToByteArray(new ECFRecord().WithID(1).WithNames(new List<string> { "Test1" })))
.AddBytes(rs.SerializeToByteArray(new ECFRecord().WithID(2).WithNames(new List<string> { "eof" })));
.AddBytes(rs.SerializeToByteArray(new ECFRecord().WithID(1).WithName("Test1")))
.AddBytes(rs.SerializeToByteArray(new ECFRecord().WithID(2).WithName("eof")));
break;
}

Expand Down
9 changes: 4 additions & 5 deletions EOLib/Net/FileTransfer/FileRequestService.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
using System;
using System.Linq;
using System.Threading.Tasks;
using AutomaticTypeMapper;
using AutomaticTypeMapper;
using EOLib.Domain.Protocol;
using EOLib.IO.Map;
using EOLib.IO.Pub;
using EOLib.IO.Services;
using EOLib.IO.Services.Serializers;
using EOLib.Net.Communication;
using System;
using System.Linq;
using System.Threading.Tasks;

namespace EOLib.Net.FileTransfer
{
Expand Down
2 changes: 1 addition & 1 deletion EndlessClient/HUD/Panels/Old/OldOnlineListPanel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public class ClientOnlineEntry : OnlineEntry
public ClientOnlineEntry(string name, string title, string guild, int @class, PaperdollIconType icon)
: base(name, title, guild, @class, icon)
{
var record = OldWorld.Instance.ECF[@class] ?? new ECFRecord().WithNames(new[] { string.Empty });
var record = OldWorld.Instance.ECF[@class] ?? new ECFRecord().WithName(string.Empty);
ClassString = record.ID == 0 ? "-" : record.Name;
}

Expand Down

0 comments on commit c5d0a19

Please sign in to comment.