88 lines
4.2 KiB
C#
88 lines
4.2 KiB
C#
using FluentAssertions;
|
|
using Xunit;
|
|
using ZB.MOM.WW.LmxProxy.Host.Domain;
|
|
|
|
namespace ZB.MOM.WW.LmxProxy.Host.Tests.Domain
|
|
{
|
|
public class QualityCodeMapperTests
|
|
{
|
|
[Theory]
|
|
[InlineData(Quality.Good, 0x00000000u, "Good")]
|
|
[InlineData(Quality.Good_LocalOverride, 0x00D80000u, "GoodLocalOverride")]
|
|
[InlineData(Quality.Bad, 0x80000000u, "Bad")]
|
|
[InlineData(Quality.Bad_ConfigError, 0x80040000u, "BadConfigurationError")]
|
|
[InlineData(Quality.Bad_NotConnected, 0x808A0000u, "BadNotConnected")]
|
|
[InlineData(Quality.Bad_DeviceFailure, 0x806B0000u, "BadDeviceFailure")]
|
|
[InlineData(Quality.Bad_SensorFailure, 0x806D0000u, "BadSensorFailure")]
|
|
[InlineData(Quality.Bad_CommFailure, 0x80050000u, "BadCommunicationFailure")]
|
|
[InlineData(Quality.Bad_OutOfService, 0x808F0000u, "BadOutOfService")]
|
|
[InlineData(Quality.Bad_WaitingForInitialData, 0x80320000u, "BadWaitingForInitialData")]
|
|
[InlineData(Quality.Uncertain_LastUsable, 0x40900000u, "UncertainLastUsableValue")]
|
|
[InlineData(Quality.Uncertain_SensorNotAcc, 0x42390000u, "UncertainSensorNotAccurate")]
|
|
[InlineData(Quality.Uncertain_EuExceeded, 0x40540000u, "UncertainEngineeringUnitsExceeded")]
|
|
[InlineData(Quality.Uncertain_SubNormal, 0x40580000u, "UncertainSubNormal")]
|
|
public void ToQualityCode_MapsCorrectly(Quality quality, uint expectedStatusCode, string expectedName)
|
|
{
|
|
var qc = QualityCodeMapper.ToQualityCode(quality);
|
|
qc.StatusCode.Should().Be(expectedStatusCode);
|
|
qc.SymbolicName.Should().Be(expectedName);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData(0x00000000u, Quality.Good)]
|
|
[InlineData(0x80000000u, Quality.Bad)]
|
|
[InlineData(0x80040000u, Quality.Bad_ConfigError)]
|
|
[InlineData(0x806D0000u, Quality.Bad_SensorFailure)]
|
|
[InlineData(0x40900000u, Quality.Uncertain_LastUsable)]
|
|
public void FromStatusCode_MapsCorrectly(uint statusCode, Quality expectedQuality)
|
|
{
|
|
QualityCodeMapper.FromStatusCode(statusCode).Should().Be(expectedQuality);
|
|
}
|
|
|
|
[Fact]
|
|
public void FromStatusCode_UnknownGoodCode_FallsBackToGood()
|
|
{
|
|
QualityCodeMapper.FromStatusCode(0x00FF0000).Should().Be(Quality.Good);
|
|
}
|
|
|
|
[Fact]
|
|
public void FromStatusCode_UnknownBadCode_FallsBackToBad()
|
|
{
|
|
QualityCodeMapper.FromStatusCode(0x80FF0000).Should().Be(Quality.Bad);
|
|
}
|
|
|
|
[Fact]
|
|
public void FromStatusCode_UnknownUncertainCode_FallsBackToUncertain()
|
|
{
|
|
QualityCodeMapper.FromStatusCode(0x40FF0000).Should().Be(Quality.Uncertain);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData(0x00000000u, "Good")]
|
|
[InlineData(0x80000000u, "Bad")]
|
|
[InlineData(0x806D0000u, "BadSensorFailure")]
|
|
[InlineData(0x40900000u, "UncertainLastUsableValue")]
|
|
[InlineData(0x80FF0000u, "Bad")] // unknown bad code falls back
|
|
public void GetSymbolicName_ReturnsCorrectName(uint statusCode, string expectedName)
|
|
{
|
|
QualityCodeMapper.GetSymbolicName(statusCode).Should().Be(expectedName);
|
|
}
|
|
|
|
[Fact]
|
|
public void FactoryMethods_ReturnCorrectCodes()
|
|
{
|
|
QualityCodeMapper.Good().StatusCode.Should().Be(0x00000000u);
|
|
QualityCodeMapper.Bad().StatusCode.Should().Be(0x80000000u);
|
|
QualityCodeMapper.BadConfigurationError().StatusCode.Should().Be(0x80040000u);
|
|
QualityCodeMapper.BadCommunicationFailure().StatusCode.Should().Be(0x80050000u);
|
|
QualityCodeMapper.BadNotConnected().StatusCode.Should().Be(0x808A0000u);
|
|
QualityCodeMapper.BadDeviceFailure().StatusCode.Should().Be(0x806B0000u);
|
|
QualityCodeMapper.BadSensorFailure().StatusCode.Should().Be(0x806D0000u);
|
|
QualityCodeMapper.BadOutOfService().StatusCode.Should().Be(0x808F0000u);
|
|
QualityCodeMapper.BadWaitingForInitialData().StatusCode.Should().Be(0x80320000u);
|
|
QualityCodeMapper.GoodLocalOverride().StatusCode.Should().Be(0x00D80000u);
|
|
QualityCodeMapper.UncertainLastUsableValue().StatusCode.Should().Be(0x40900000u);
|
|
}
|
|
}
|
|
}
|