| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- using Xunit;
- using YZWater.Core.Services;
- namespace YZWater.Core.Tests.Services;
- /// <summary>
- /// S7AddressParser 单元测试
- /// </summary>
- public class S7AddressParserTests
- {
- [Theory]
- [InlineData("VD100", S7AddressParser.AreaType.Variable, 100, 4)]
- [InlineData("VD500", S7AddressParser.AreaType.Variable, 500, 4)]
- [InlineData("VW100", S7AddressParser.AreaType.Variable, 100, 2)]
- [InlineData("VB100", S7AddressParser.AreaType.Variable, 100, 1)]
- [InlineData("MD10", S7AddressParser.AreaType.Marker, 10, 4)]
- [InlineData("MW10", S7AddressParser.AreaType.Marker, 10, 2)]
- [InlineData("MB10", S7AddressParser.AreaType.Marker, 10, 1)]
- [InlineData("Q0.0", S7AddressParser.AreaType.Output, 0, 1)]
- [InlineData("I0.1", S7AddressParser.AreaType.Input, 0, 1)]
- public void Parse_ValidAddress_ShouldReturnCorrectResult(string address, S7AddressParser.AreaType expectedArea, int expectedOffset, int expectedLength)
- {
- var result = S7AddressParser.Parse(address);
- Assert.NotNull(result);
- Assert.Equal(expectedArea, result.Area);
- Assert.Equal(expectedOffset, result.ByteOffset);
- Assert.Equal(expectedLength, result.ByteLength);
- }
- [Theory]
- [InlineData("")]
- [InlineData(null)]
- [InlineData("INVALID")]
- [InlineData("X100")]
- public void Parse_InvalidAddress_ShouldReturnNull(string? address)
- {
- var result = S7AddressParser.Parse(address!);
- Assert.Null(result);
- }
- [Fact]
- public void GroupConsecutiveAddresses_ConsecutiveVD_ShouldGroupTogether()
- {
- var addresses = new List<(string Key, string Address)>
- {
- ("Pump1.Current", "VD50"),
- ("Pump2.Current", "VD54"),
- ("Pump3.Current", "VD58"),
- };
- var groups = S7AddressParser.GroupConsecutiveAddresses(addresses);
- Assert.Single(groups);
- Assert.Equal(3, groups[0].Items.Count);
- Assert.Equal(50, groups[0].StartByte);
- Assert.Equal(12, groups[0].TotalBytes); // 50, 54, 58 = 3 * 4 bytes
- }
- [Fact]
- public void GroupConsecutiveAddresses_NonConsecutive_ShouldSeparateGroups()
- {
- var addresses = new List<(string Key, string Address)>
- {
- ("Tank.Level", "VD100"),
- ("Pressure.Value", "VD6600"),
- };
- var groups = S7AddressParser.GroupConsecutiveAddresses(addresses);
- Assert.Equal(2, groups.Count);
- }
- [Fact]
- public void GroupConsecutiveAddresses_DifferentAreas_ShouldSeparateGroups()
- {
- var addresses = new List<(string Key, string Address)>
- {
- ("Pump.Run", "Q0.1"),
- ("Pump.Fault", "I0.1"),
- };
- var groups = S7AddressParser.GroupConsecutiveAddresses(addresses);
- Assert.Equal(2, groups.Count);
- }
- [Theory]
- [InlineData(S7AddressParser.AreaType.Variable, 4, "VD")]
- [InlineData(S7AddressParser.AreaType.Variable, 2, "VW")]
- [InlineData(S7AddressParser.AreaType.Variable, 1, "V")]
- [InlineData(S7AddressParser.AreaType.Marker, 4, "MD")]
- [InlineData(S7AddressParser.AreaType.Input, 1, "I")]
- [InlineData(S7AddressParser.AreaType.Output, 1, "Q")]
- public void GetAddressPrefix_ShouldReturnCorrectPrefix(S7AddressParser.AreaType area, int byteLength, string expected)
- {
- var result = S7AddressParser.GetAddressPrefix(area, byteLength);
- Assert.Equal(expected, result);
- }
- }
|