ModernUO/Projects/UOContent.Tests/Tests/PropertyList/AosArmorAttributesPropertiesTests.cs
2026-07-02 21:49:33 -07:00

71 lines
2.2 KiB
C#

using System;
using System.Buffers.Binary;
using System.Collections.Generic;
using System.Text;
using Server;
using Server.Items;
using Xunit;
namespace UOContent.Tests;
[Collection("Sequential UOContent Tests")]
public class AosArmorAttributesPropertiesTests
{
private static Dictionary<int, string> Decode(ObjectPropertyList opl)
{
opl.Terminate();
var buffer = opl.Buffer;
var map = new Dictionary<int, string>();
var pos = 15;
while (true)
{
var cliloc = BinaryPrimitives.ReadInt32BigEndian(buffer.AsSpan(pos));
pos += 4;
if (cliloc == 0)
{
break;
}
var byteLen = BinaryPrimitives.ReadUInt16BigEndian(buffer.AsSpan(pos));
pos += 2;
map[cliloc] = Encoding.Unicode.GetString(buffer, pos, byteLen);
pos += byteLen;
}
return map;
}
[Fact]
public void EmitsMageArmorAndSelfRepair_DoesNotReadLowerStatReqOrDurabilityFromContainer()
{
var attrs = new AosArmorAttributes(null)
{
MageArmor = 1,
SelfRepair = 4,
LowerStatReq = 50, // container value must NOT be auto-emitted (it's passed in by the consumer)
DurabilityBonus = 10 // never emitted by this method
};
var opl = new ObjectPropertyList(null);
attrs.GetProperties(opl); // no lowerStatReq arg
var map = Decode(opl);
Assert.Equal("", map[1060437]); // MageArmor (no-arg)
Assert.Equal("4", map[1060450]); // SelfRepair
Assert.False(map.ContainsKey(1060435)); // LowerStatReq NOT read from container
Assert.False(map.ContainsKey(1060410)); // DurabilityBonus excluded
}
[Fact]
public void EmitsLowerStatReqWhenPassed()
{
var attrs = new AosArmorAttributes(null) { MageArmor = 1, LowerStatReq = 50 };
var opl = new ObjectPropertyList(null);
attrs.GetProperties(opl); // computed value passed by the consumer, not the raw 50
var map = Decode(opl);
Assert.Equal("77", map[1060435]); // emitted from the param, not the container's 50
Assert.Equal("", map[1060437]); // MageArmor still emitted
}
}