Skip to content

Commit

Permalink
More Coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
patrick-dmxc committed Mar 17, 2024
1 parent 7949980 commit 21b1988
Show file tree
Hide file tree
Showing 5 changed files with 206 additions and 61 deletions.
7 changes: 3 additions & 4 deletions RDMSharp/RDM/Device/AbstractRDMDevice.cs
Original file line number Diff line number Diff line change
Expand Up @@ -554,7 +554,7 @@ private async Task processResponseMessage(RDMMessage rdmMessage)
slot = new Slot(description.SlotId);
slots.TryAdd(slot.SlotId, slot);
}
slot.Description = description.Description;
slot.UpdateSlotDescription(description);
this.OnPropertyChanged(nameof(this.Slots));
break;

Expand Down Expand Up @@ -583,8 +583,7 @@ private async Task processResponseMessage(RDMMessage rdmMessage)
slot1 = new Slot(info.SlotOffset);
slots.TryAdd(info.SlotOffset, slot1);
}
slot1.Type = info.SlotType;
slot1.Category = info.SlotLabelId;
slot1.UpdateSlotInfo(info);
}
this.OnPropertyChanged(nameof(this.Slots));
break;
Expand All @@ -611,7 +610,7 @@ private async Task processResponseMessage(RDMMessage rdmMessage)
slot1 = new Slot(info.SlotOffset);
slots.TryAdd(info.SlotOffset, slot1);
}
slot1.DefaultValue = info.DefaultSlotValue;
slot1.UpdateSlotDefaultValue(info);
}
this.OnPropertyChanged(nameof(this.Slots));
break;
Expand Down
84 changes: 50 additions & 34 deletions RDMSharp/RDM/Slot.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;

namespace RDMSharp
{
[Serializable]
public class Slot : INotifyPropertyChanged
public class Slot : INotifyPropertyChanged, IEquatable<Slot>
{
[field: NonSerialized]
public event PropertyChangedEventHandler PropertyChanged;

public readonly ushort SlotId;
Expand All @@ -16,7 +15,7 @@ public class Slot : INotifyPropertyChanged
public ERDM_SlotType Type
{
get { return type; }
set
private set
{
if (type == value)
return;
Expand All @@ -30,7 +29,7 @@ public ERDM_SlotType Type
public ERDM_SlotCategory Category
{
get { return category; }
set
private set
{
if (category == value)
return;
Expand All @@ -44,7 +43,7 @@ public ERDM_SlotCategory Category
public string Description
{
get { return description; }
set
private set
{
if (description == value)
return;
Expand All @@ -58,7 +57,7 @@ public string Description
public byte DefaultValue
{
get { return defaultValue; }
set
private set
{
if (defaultValue == value)
return;
Expand All @@ -68,15 +67,20 @@ public byte DefaultValue
}
}

public string DisplayName
{
get => $"({this.SlotId}) - {this.Category} {this.Type}";
}

public Slot(ushort slotId)
{
this.SlotId = slotId;
}
public Slot(ushort slotId, ERDM_SlotCategory category, ERDM_SlotType type, string description = null, byte defaultValue = 0) : this(slotId)
{
this.Category = category;
this.Type = type;
this.Description = description;
this.DefaultValue = defaultValue;
}
public Slot(ushort slotId, ERDM_SlotCategory category, string description = null, byte defaultValue = 0) : this(slotId, category, ERDM_SlotType.PRIMARY, description: description, defaultValue: defaultValue)
{
}

public void UpdateSlotInfo(RDMSlotInfo slotInfo)
{
Expand Down Expand Up @@ -111,33 +115,45 @@ public override string ToString()
sb.AppendLine($"DefaultValue: {this.DefaultValue}");
return sb.ToString();
}

public override bool Equals(object obj)
{
if (obj is Slot other)
{
if (this.SlotId != other.SlotId)
return false;
if (this.Type != other.Type)
return false;
if (this.Category != other.Category)
return false;
if (this.DefaultValue != other.DefaultValue)
return false;
if (!string.Equals(this.Description, other.Description))
return false;
}
return false;
return Equals(obj as Slot);
}
public override int GetHashCode()

public bool Equals(Slot other)
{
int hashCode = this.SlotId.GetHashCode();
hashCode += this.Category.GetHashCode() * 29;
hashCode += this.Type.GetHashCode() * 31;
hashCode += this.DefaultValue.GetHashCode() * 13;
if (!string.IsNullOrWhiteSpace(this.Description))
hashCode += this.Description.GetHashCode() * 17;
return other is not null &&
SlotId == other.SlotId &&
Type == other.Type &&
Category == other.Category &&
Description == other.Description &&
DefaultValue == other.DefaultValue;
}

public override int GetHashCode()
{
#if !NETSTANDARD
return HashCode.Combine(SlotId, Type, Category, Description, DefaultValue);
#else
int hashCode = 1916557166;
hashCode = hashCode * -1521134295 + SlotId.GetHashCode();
hashCode = hashCode * -1521134295 + Type.GetHashCode();
hashCode = hashCode * -1521134295 + Category.GetHashCode();
hashCode = hashCode * -1521134295 + Description.GetHashCode();
hashCode = hashCode * -1521134295 + DefaultValue.GetHashCode();
return hashCode;
#endif
}

public static bool operator ==(Slot left, Slot right)
{
return EqualityComparer<Slot>.Default.Equals(left, right);
}

public static bool operator !=(Slot left, Slot right)
{
return !(left == right);
}
}
}
}
44 changes: 22 additions & 22 deletions RDMSharpTests/Devices/Mock/MockGeneratedDevice1.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,30 +14,30 @@ internal sealed class MockGeneratedDevice1 : AbstractMockGeneratedDevice

private static GeneratedPersonality[] PERSONALITYS = [
new GeneratedPersonality(1, "5CH RGB",
new Slot(0){ Category = ERDM_SlotCategory.INTENSITY, Description = "Dimmer" },
new Slot(1){ Category = ERDM_SlotCategory.STROBE, Description = "Strobe" , DefaultValue= 33},
new Slot(2){ Category = ERDM_SlotCategory.COLOR_ADD_RED, Description = "Red" },
new Slot(3){ Category = ERDM_SlotCategory.COLOR_ADD_GREEN, Description = "Green" },
new Slot(4){ Category = ERDM_SlotCategory.COLOR_ADD_BLUE, Description = "Blue" }),
new Slot(0, ERDM_SlotCategory.INTENSITY, "Dimmer" ),
new Slot(1, ERDM_SlotCategory.STROBE, "Strobe" , 33),
new Slot(2, ERDM_SlotCategory.COLOR_ADD_RED, "Red" ),
new Slot(3, ERDM_SlotCategory.COLOR_ADD_GREEN, "Green" ),
new Slot(4, ERDM_SlotCategory.COLOR_ADD_BLUE, "Blue" )),
new GeneratedPersonality(2, "8CH RGBAWY",
new Slot(0){ Category = ERDM_SlotCategory.INTENSITY, Description = "Dimmer" },
new Slot(1){ Category = ERDM_SlotCategory.STROBE, Description = "Strobe" , DefaultValue= 33},
new Slot(2){ Category = ERDM_SlotCategory.COLOR_ADD_RED, Description = "Red" },
new Slot(3){ Category = ERDM_SlotCategory.COLOR_ADD_GREEN, Description = "Green" },
new Slot(4){ Category = ERDM_SlotCategory.COLOR_ADD_BLUE, Description = "Blue" },
new Slot(5){ Category = ERDM_SlotCategory.COLOR_CORRECTION, Description = "Amber" },
new Slot(6){ Category = ERDM_SlotCategory.COLOR_CORRECTION, Description = "White" },
new Slot(7){ Category = ERDM_SlotCategory.COLOR_CORRECTION, Description = "Yellow" }),
new Slot(0, ERDM_SlotCategory.INTENSITY, "Dimmer" ),
new Slot(1, ERDM_SlotCategory.STROBE, "Strobe" , 33),
new Slot(2, ERDM_SlotCategory.COLOR_ADD_RED, "Red" ),
new Slot(3, ERDM_SlotCategory.COLOR_ADD_GREEN, "Green" ),
new Slot(4, ERDM_SlotCategory.COLOR_ADD_BLUE, "Blue" ),
new Slot(5, ERDM_SlotCategory.COLOR_CORRECTION, "Amber" ),
new Slot(6, ERDM_SlotCategory.COLOR_CORRECTION, "White" ),
new Slot(7, ERDM_SlotCategory.COLOR_CORRECTION, "Yellow" )),
new GeneratedPersonality(3, "9CH RGB 16-Bit",
new Slot(0){ Category = ERDM_SlotCategory.INTENSITY, Description = "Dimmer" },
new Slot(1){ Category = ERDM_SlotCategory.INTENSITY, Description = "Dimmer Fine" , Type= ERDM_SlotType.SEC_FINE},
new Slot(2){ Category = ERDM_SlotCategory.STROBE, Description = "Strobe" , DefaultValue= 33},
new Slot(3){ Category = ERDM_SlotCategory.COLOR_ADD_RED, Description = "Red" },
new Slot(4){ Category = ERDM_SlotCategory.COLOR_ADD_RED, Description = "Red Fine" , Type= ERDM_SlotType.SEC_FINE},
new Slot(5){ Category = ERDM_SlotCategory.COLOR_ADD_GREEN, Description = "Green" },
new Slot(6){ Category = ERDM_SlotCategory.COLOR_ADD_GREEN, Description = "Green Fine" , Type= ERDM_SlotType.SEC_FINE},
new Slot(7){ Category = ERDM_SlotCategory.COLOR_ADD_BLUE, Description = "Blue" },
new Slot(8){ Category = ERDM_SlotCategory.COLOR_ADD_BLUE, Description = "Blue Fine" , Type= ERDM_SlotType.SEC_FINE})];
new Slot(0, ERDM_SlotCategory.INTENSITY, "Dimmer" ),
new Slot(1, ERDM_SlotCategory.INTENSITY,ERDM_SlotType.SEC_FINE, "Dimmer Fine"),
new Slot(2, ERDM_SlotCategory.STROBE, "Strobe" , 33),
new Slot(3, ERDM_SlotCategory.COLOR_ADD_RED, "Red" ),
new Slot(4, ERDM_SlotCategory.COLOR_ADD_RED, ERDM_SlotType.SEC_FINE,"Red Fine"),
new Slot(5, ERDM_SlotCategory.COLOR_ADD_GREEN, "Green" ),
new Slot(6, ERDM_SlotCategory.COLOR_ADD_GREEN, ERDM_SlotType.SEC_FINE,"Green Fine"),
new Slot(7, ERDM_SlotCategory.COLOR_ADD_BLUE, "Blue" ),
new Slot(8, ERDM_SlotCategory.COLOR_ADD_BLUE,ERDM_SlotType.SEC_FINE, "Blue Fine" ))];
public override GeneratedPersonality[] Personalities => PERSONALITYS;
public MockGeneratedDevice1(RDMUID uid) : base(uid, [ERDM_Parameter.IDENTIFY_DEVICE, ERDM_Parameter.BOOT_SOFTWARE_VERSION_LABEL], "Dummy Manufacturer 9FFF")
{
Expand Down
74 changes: 73 additions & 1 deletion RDMSharpTests/Devices/TestRDMSendReceive.cs
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,79 @@ void testAllValues()
Assert.Throws(typeof(NotSupportedException), () => { generated.TrySetParameter(ERDM_Parameter.LANGUAGE, 333); });
Assert.Throws(typeof(NotSupportedException), () => { generated.TrySetParameter(ERDM_Parameter.DEVICE_LABEL, "Test"); });
Assert.Throws(typeof(NotSupportedException), () => { generated.TrySetParameter(ERDM_Parameter.DISC_MUTE, null); });
Assert.Throws(typeof(NotSupportedException), () => { generated.TrySetParameter(ERDM_Parameter.DEVICE_LABEL, new RDMDeviceInfo()); });
Assert.Throws(typeof(NotSupportedException), () => { generated.TrySetParameter(ERDM_Parameter.DEVICE_LABEL, new RDMDeviceInfo()); });

var slotIntensity = remote.Slots[0];
var slotStrobe = remote.Slots[1];
var slotRed = remote.Slots[2];
var slotGreen = remote.Slots[3];
var slotBlue = remote.Slots[4];

Assert.That(slotIntensity, Is.EqualTo(generated.Personalities[0].Slots[0]));
Assert.That(slotStrobe, Is.EqualTo(generated.Personalities[0].Slots[1]));
Assert.That(slotRed, Is.EqualTo(generated.Personalities[0].Slots[2]));
Assert.That(slotGreen, Is.EqualTo(generated.Personalities[0].Slots[3]));
Assert.That(slotBlue, Is.EqualTo(generated.Personalities[0].Slots[4]));

Assert.That(slotIntensity, Is.Not.EqualTo(slotStrobe));
Assert.That(slotIntensity, Is.Not.EqualTo(slotRed));
Assert.That(slotIntensity, Is.Not.EqualTo(slotGreen));
Assert.That(slotIntensity, Is.Not.EqualTo(slotBlue));
Assert.That(slotIntensity.DefaultValue, Is.EqualTo(0));
Assert.That(slotIntensity.Category, Is.EqualTo(ERDM_SlotCategory.INTENSITY));
Assert.That(slotIntensity.Type, Is.EqualTo(ERDM_SlotType.PRIMARY));
Assert.That(slotIntensity.DefaultValue, Is.EqualTo(0));

Assert.That(slotStrobe, Is.Not.EqualTo(slotRed));
Assert.That(slotStrobe, Is.Not.EqualTo(slotGreen));
Assert.That(slotStrobe, Is.Not.EqualTo(slotBlue));
Assert.That(slotStrobe.Category, Is.EqualTo(ERDM_SlotCategory.STROBE));
Assert.That(slotStrobe.Type, Is.EqualTo(ERDM_SlotType.PRIMARY));
Assert.That(slotStrobe.DefaultValue, Is.EqualTo(33));

Assert.That(slotRed, Is.Not.EqualTo(slotGreen));
Assert.That(slotRed, Is.Not.EqualTo(slotBlue));
Assert.That(slotRed.Category, Is.EqualTo(ERDM_SlotCategory.COLOR_ADD_RED));
Assert.That(slotRed.Type, Is.EqualTo(ERDM_SlotType.PRIMARY));
Assert.That(slotRed.DefaultValue, Is.EqualTo(0));

Assert.That(slotGreen, Is.Not.EqualTo(slotBlue));
Assert.That(slotGreen.Category, Is.EqualTo(ERDM_SlotCategory.COLOR_ADD_GREEN));
Assert.That(slotGreen.Type, Is.EqualTo(ERDM_SlotType.PRIMARY));
Assert.That(slotGreen.DefaultValue, Is.EqualTo(0));

Assert.That(slotBlue.Category, Is.EqualTo(ERDM_SlotCategory.COLOR_ADD_BLUE));
Assert.That(slotBlue.Type, Is.EqualTo(ERDM_SlotType.PRIMARY));
Assert.That(slotBlue.DefaultValue, Is.EqualTo(0));

Assert.That(slotIntensity != slotStrobe, Is.True);
Assert.That(slotRed != slotBlue, Is.True);

Assert.That(slotIntensity == slotStrobe, Is.False);
Assert.That(slotRed == slotBlue, Is.False);

Assert.That(((object)slotRed).Equals(null), Is.False);
Assert.That(((object)slotRed).Equals(slotBlue), Is.False);
Assert.That(slotRed.Equals(slotBlue), Is.False);
Assert.That(slotRed.Equals(slotStrobe), Is.False);

Assert.That(string.IsNullOrWhiteSpace(slotRed.ToString()), Is.False);
HashSet<Slot> slots = new HashSet<Slot>();
Assert.That(slots.Add(slotIntensity), Is.True);
Assert.That(slots.Add(slotIntensity), Is.False);
Assert.That(slots.Contains(slotIntensity), Is.True);
Assert.That(slots.Add(slotStrobe), Is.True);
Assert.That(slots.Add(slotStrobe), Is.False);
Assert.That(slots.Contains(slotStrobe), Is.True);
Assert.That(slots.Add(slotRed), Is.True);
Assert.That(slots.Add(slotRed), Is.False);
Assert.That(slots.Contains(slotRed), Is.True);
Assert.That(slots.Add(slotGreen), Is.True);
Assert.That(slots.Add(slotGreen), Is.False);
Assert.That(slots.Contains(slotGreen), Is.True);
Assert.That(slots.Add(slotBlue), Is.True);
Assert.That(slots.Add(slotBlue), Is.False);
Assert.That(slots.Contains(slotBlue), Is.True);
}
}
}
58 changes: 58 additions & 0 deletions RDMSharpTests/TestManyObjects.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,64 @@ public void TestRDMDiscoveryStatus()
Assert.That(str2.Length, Is.AtLeast(10));
}
[Test]
public void TestSubDevice()
{
List<SubDevice> subdevices= new List<SubDevice>();
subdevices.Add(SubDevice.Root);
for (ushort i = 1; i <= 0x0200; i++)
subdevices.Add(new SubDevice(i));
subdevices.Add(SubDevice.Broadcast);

ushort index = 0;
SubDevice? prev = null;
HashSet<SubDevice> hashSet= new HashSet<SubDevice>();
foreach (SubDevice sd in subdevices)
{
if (!prev.HasValue)
{
prev = sd;
hashSet.Add(sd);
continue;
}

Assert.That(prev, Is.Not.EqualTo(sd));
Assert.That(prev, Is.Not.EqualTo(null));
Assert.That(prev.Equals(sd), Is.False);
Assert.That(prev.Equals((object)sd), Is.False);
Assert.That(prev.Equals(null), Is.False);
Assert.That(((object)prev).Equals((object)sd), Is.False);
Assert.That(((object)prev).Equals(null), Is.False);
if (!(prev.Value.IsRoot || prev.Value.IsBroadcast || sd.IsRoot || sd.IsBroadcast))
{
Assert.That(prev <= sd, Is.True);
Assert.That(sd >= prev, Is.True);
Assert.That(sd <= prev, Is.False);
Assert.That(prev >= sd, Is.False);
}
else
{
Assert.That(prev <= sd, Is.False);
Assert.That(sd >= prev, Is.False);
Assert.That(sd <= prev, Is.False);
Assert.That(prev >= sd, Is.False);
}
Assert.That(prev != sd, Is.True);
Assert.That(prev == sd, Is.False);
Assert.That(string.IsNullOrWhiteSpace(prev.ToString()), Is.False);
Assert.That(string.IsNullOrWhiteSpace(sd.ToString()), Is.False);

prev = sd;
Assert.That(hashSet.Add(sd), Is.True);
Assert.That(hashSet.Contains(prev.Value), Is.True);
}
for (ushort i = 0; i < 1000; i++)
{
Random rnd = new Random();
ushort id = (ushort)rnd.Next((ushort)0x0201,(ushort)(0xFFFF-1));
Assert.Throws(typeof(ArgumentOutOfRangeException), () => new SubDevice(id));
}
}
[Test]
public void TestIPv4Address()
{
var address = IPv4Address.LocalHost;
Expand Down

0 comments on commit 21b1988

Please sign in to comment.