acdream/tests/AcDream.Core.Tests/Items/ItemUseabilityTests.cs
Erik f71f947475 fix(items): port retail useability and autowear rejection
Use the exact low USEABLE_NO-bit predicate so reset/zero-valued direct-use items such as Blackmoor's Favor reach the ordinary Use request. Port AutoWear's clothing-priority blocker lookup and exact named system notice through the shared activation owner.

Co-authored-by: Codex <codex@openai.com>
2026-07-23 08:33:31 +02:00

59 lines
2 KiB
C#

using AcDream.Core.Items;
namespace AcDream.Core.Tests.Items;
public sealed class ItemUseabilityTests
{
[Fact]
public void TargetedUse_hasHighTargetBits()
{
const uint healthKit = 0x000A0008u; // source contained, target self or contained
Assert.True(ItemUseability.IsTargeted(healthKit));
Assert.True(ItemUseability.AllowsSelfTarget(healthKit));
Assert.Equal(ItemUseability.Contained, ItemUseability.SourceFlags(healthKit));
Assert.Equal(ItemUseability.Self | ItemUseability.Contained, ItemUseability.TargetFlags(healthKit));
}
[Fact]
public void DirectContainedUse_isNotTargeted()
{
Assert.False(ItemUseability.IsTargeted(ItemUseability.Contained));
Assert.True(ItemUseability.IsDirectUseable(ItemUseability.Contained));
}
[Fact]
public void UseableNo_isNotDirectUseable()
{
Assert.False(ItemUseability.IsDirectUseable(ItemUseability.No));
}
[Theory]
[InlineData(ItemUseability.Undef, true)]
[InlineData(ItemUseability.No, false)]
[InlineData(ItemUseability.Contained, true)]
[InlineData(ItemUseability.NeverWalk, true)]
[InlineData(ItemUseability.No | ItemUseability.Contained, false)]
public void IsUseable_matchesRetailLowNoBit(uint useability, bool expected)
{
Assert.Equal(expected, ItemUseability.IsUseable(useability));
}
[Fact]
public void Undef_isAZeroValuedDirectUse()
{
Assert.True(ItemUseability.IsDirectUseable(ItemUseability.Undef));
}
[Fact]
public void LeastLimitedSourceUse_matchesRetailPriorityAndIgnoresObjSelf()
{
Assert.Equal(ItemUseability.Remote,
ItemUseability.LeastLimitedSourceUse(
ItemUseability.Remote | ItemUseability.Contained | ItemUseability.Wielded));
Assert.Equal(ItemUseability.Wielded,
ItemUseability.LeastLimitedSourceUse(ItemUseability.Wielded | ItemUseability.Self));
Assert.Equal(ItemUseability.Undef,
ItemUseability.LeastLimitedSourceUse(ItemUseability.ObjSelf));
}
}