WeighingTests: Add Haugsdorf and Sitzendorf
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				Test / Run tests (push) Successful in 2m46s
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	Test / Run tests (push) Successful in 2m46s
				
			This commit is contained in:
		@@ -8,6 +8,7 @@ namespace Tests.WeighingTests {
 | 
				
			|||||||
        protected readonly TcpListener Server;
 | 
					        protected readonly TcpListener Server;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public int IdentNr { get; set; } = 0;
 | 
					        public int IdentNr { get; set; } = 0;
 | 
				
			||||||
 | 
					        public int Tare { get; set; } = 0;
 | 
				
			||||||
        public int Weight { get; set; } = 0;
 | 
					        public int Weight { get; set; } = 0;
 | 
				
			||||||
        public string? Error { get; set; } = null;
 | 
					        public string? Error { get; set; } = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -24,11 +25,11 @@ namespace Tests.WeighingTests {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public class CommandMockScale : MockScale {
 | 
					    public class CommandMockScale : MockScale {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private readonly Func<string, int, string?, int, (string, bool)> Handler;
 | 
					        private readonly Func<string, int, int, string?, int, (string, bool)> Handler;
 | 
				
			||||||
        private readonly Thread ServerThread;
 | 
					        private readonly Thread ServerThread;
 | 
				
			||||||
        private bool IsRunning = true;
 | 
					        private bool IsRunning = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public CommandMockScale(int port, Func<string, int, string?, int, (string, bool)> handler) :
 | 
					        public CommandMockScale(int port, Func<string, int, int, string?, int, (string, bool)> handler) :
 | 
				
			||||||
            base(port) {
 | 
					            base(port) {
 | 
				
			||||||
            Handler = handler;
 | 
					            Handler = handler;
 | 
				
			||||||
            ServerThread = new Thread(new ParameterizedThreadStart(Serve));
 | 
					            ServerThread = new Thread(new ParameterizedThreadStart(Serve));
 | 
				
			||||||
@@ -44,7 +45,7 @@ namespace Tests.WeighingTests {
 | 
				
			|||||||
                    using var stream = client.GetStream();
 | 
					                    using var stream = client.GetStream();
 | 
				
			||||||
                    while (true) {
 | 
					                    while (true) {
 | 
				
			||||||
                        int read = await stream.ReadAsync(buffer);
 | 
					                        int read = await stream.ReadAsync(buffer);
 | 
				
			||||||
                        var (res, inc) = Handler(Encoding.ASCII.GetString(buffer, 0, read), Weight, Error, IdentNr + 1);
 | 
					                        var (res, inc) = Handler(Encoding.ASCII.GetString(buffer, 0, read), Weight, Tare, Error, IdentNr + 1);
 | 
				
			||||||
                        if (inc) IdentNr++;
 | 
					                        if (inc) IdentNr++;
 | 
				
			||||||
                        await stream.WriteAsync(Encoding.ASCII.GetBytes(res));
 | 
					                        await stream.WriteAsync(Encoding.ASCII.GetBytes(res));
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
@@ -64,12 +65,12 @@ namespace Tests.WeighingTests {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public class EventMockScale : MockScale {
 | 
					    public class EventMockScale : MockScale {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private readonly Func<int, string?, int, (string, bool)> Handler;
 | 
					        private readonly Func<int, int, string?, int, (string, bool)> Handler;
 | 
				
			||||||
        private readonly Thread ServerThread;
 | 
					        private readonly Thread ServerThread;
 | 
				
			||||||
        private TcpClient? Client;
 | 
					        private TcpClient? Client;
 | 
				
			||||||
        private bool IsRunning = true;
 | 
					        private bool IsRunning = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public EventMockScale(int port, Func<int, string?, int, (string, bool)> handler) :
 | 
					        public EventMockScale(int port, Func<int, int, string?, int, (string, bool)> handler) :
 | 
				
			||||||
            base(port) {
 | 
					            base(port) {
 | 
				
			||||||
            Handler = handler;
 | 
					            Handler = handler;
 | 
				
			||||||
            ServerThread = new Thread(new ParameterizedThreadStart(Serve));
 | 
					            ServerThread = new Thread(new ParameterizedThreadStart(Serve));
 | 
				
			||||||
@@ -86,13 +87,14 @@ namespace Tests.WeighingTests {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public async Task Weigh(int weight) {
 | 
					        public async Task Weigh(int weight, int tare = 0) {
 | 
				
			||||||
            Weight = weight;
 | 
					            Weight = weight;
 | 
				
			||||||
 | 
					            Tare = tare;
 | 
				
			||||||
            await Weigh();
 | 
					            await Weigh();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public async Task Weigh() {
 | 
					        public async Task Weigh() {
 | 
				
			||||||
            var (res, inc) = Handler(Weight, Error, IdentNr + 1);
 | 
					            var (res, inc) = Handler(Weight, Tare, Error, IdentNr + 1);
 | 
				
			||||||
            if (inc) IdentNr++;
 | 
					            if (inc) IdentNr++;
 | 
				
			||||||
            await Client!.GetStream().WriteAsync(Encoding.ASCII.GetBytes(res));
 | 
					            await Client!.GetStream().WriteAsync(Encoding.ASCII.GetBytes(res));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
namespace Tests.WeighingTests {
 | 
					namespace Tests.WeighingTests {
 | 
				
			||||||
    public static class ScaleHandlers {
 | 
					    public static class ScaleHandlers {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public static (string, bool) Handle_IT3000A(string req, int weight, string? error, int identNr) {
 | 
					        public static (string, bool) Handle_IT3000A(string req, int weight, int tare, string? error, int identNr) {
 | 
				
			||||||
            var modes = error?.Split(';') ?? [];
 | 
					            var modes = error?.Split(';') ?? [];
 | 
				
			||||||
            var overloaded = modes.Contains("overloaded");
 | 
					            var overloaded = modes.Contains("overloaded");
 | 
				
			||||||
            var moving = modes.Contains("moving");
 | 
					            var moving = modes.Contains("moving");
 | 
				
			||||||
@@ -39,13 +39,52 @@
 | 
				
			|||||||
                return ("<13>\r\n", false);
 | 
					                return ("<13>\r\n", false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            string data = $"00{(moving ? 1 : 0)}0{new DateTime(2020, 10, 15, 12, 34, 0):dd.MM.yyHH:mm}{(incr ? identNr : 0),4}1" +
 | 
					            string data = $"00{(moving ? 1 : 0)}0{new DateTime(2020, 10, 15, 12, 34, 0):dd.MM.yyHH:mm}{(incr ? identNr : 0),4}1" +
 | 
				
			||||||
                $"{weight,8}{0,8}{weight,8}{(unit ? "lb" : "kg")}   {"1",3}";
 | 
					                $"{weight + tare,8}{tare,8}{weight,8}{(unit ? "lb" : "kg")}   {"1",3}";
 | 
				
			||||||
            ushort checksum = Elwig.Helpers.Utils.CalcCrc16Modbus(data);
 | 
					            ushort checksum = Elwig.Helpers.Utils.CalcCrc16Modbus(data);
 | 
				
			||||||
            if (crc) checksum += 10;
 | 
					            if (crc) checksum += 10;
 | 
				
			||||||
            return ($"<{data}{checksum,8}>\r\n", incr);
 | 
					            return ($"<{data}{checksum,8}>\r\n", incr);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public static (string, bool) Handle_L246(string req, int weight, string? error, int identNr) {
 | 
					        public static (string, bool) Handle_IT6000E(string req, int weight, int tare, string? error, int identNr, string terminalNr) {
 | 
				
			||||||
 | 
					            var modes = error?.Split(';') ?? [];
 | 
				
			||||||
 | 
					            var overloaded = modes.Contains("overloaded");
 | 
				
			||||||
 | 
					            var moving = modes.Contains("moving");
 | 
				
			||||||
 | 
					            var invalid = modes.Contains("invalid");
 | 
				
			||||||
 | 
					            var crc = modes.Contains("crc");
 | 
				
			||||||
 | 
					            var unit = modes.Contains("unit");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (invalid) {
 | 
				
			||||||
 | 
					                return ("abcd\r\n", false);
 | 
				
			||||||
 | 
					            } else if (!req.StartsWith('<') || !req.EndsWith('>')) {
 | 
				
			||||||
 | 
					                return ("<31>\r\n", false);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            req = req[1..^1];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            bool incr;
 | 
				
			||||||
 | 
					            if (req.Length > 3) {
 | 
				
			||||||
 | 
					                return ("<32>\r\n", false);
 | 
				
			||||||
 | 
					            } else if (req.StartsWith("RN")) {
 | 
				
			||||||
 | 
					                incr = true;
 | 
				
			||||||
 | 
					            } else if (req.StartsWith("RM")) {
 | 
				
			||||||
 | 
					                incr = false;
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                return ("<32>\r\n", false);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (overloaded)
 | 
				
			||||||
 | 
					                return ("<12>\r\n", false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (moving && incr)
 | 
				
			||||||
 | 
					                return ("<13>\r\n", false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            string data = $"00{(moving ? 1 : 0)}0{new DateTime(2020, 10, 8, 8, 47, 0):dd.MM.yyHH:mm}{(incr ? identNr : 0),4}1" +
 | 
				
			||||||
 | 
					                $"{weight + tare,8}{tare,8}{weight,8}{(unit ? "lb" : "kg")}   {terminalNr,3}";
 | 
				
			||||||
 | 
					            ushort checksum = Elwig.Helpers.Utils.CalcCrc16Modbus(data);
 | 
				
			||||||
 | 
					            if (crc) checksum += 10;
 | 
				
			||||||
 | 
					            return ($"<{data}{checksum,8}>\r\n", incr);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public static (string, bool) Handle_L246(string req, int weight, int tare, string? error, int identNr) {
 | 
				
			||||||
            var modes = error?.Split(';') ?? [];
 | 
					            var modes = error?.Split(';') ?? [];
 | 
				
			||||||
            var overloaded = modes.Contains("overloaded");
 | 
					            var overloaded = modes.Contains("overloaded");
 | 
				
			||||||
            var moving = modes.Contains("moving");
 | 
					            var moving = modes.Contains("moving");
 | 
				
			||||||
@@ -80,13 +119,51 @@
 | 
				
			|||||||
                return ("<13>\r\n", false);
 | 
					                return ("<13>\r\n", false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            string data = $"00{(moving ? 1 : 0)}0{new DateTime(2020, 10, 17, 14, 23, 0):dd.MM.yyHH:mm}{(incr ? identNr : 0),4}1" +
 | 
					            string data = $"00{(moving ? 1 : 0)}0{new DateTime(2020, 10, 17, 14, 23, 0):dd.MM.yyHH:mm}{(incr ? identNr : 0),4}1" +
 | 
				
			||||||
                $"{weight,8}{0,8}{weight,8}{(unit ? "lb" : "kg")}   {"001",3}";
 | 
					                $"{weight + tare,8}{tare,8}{weight,8}{(unit ? "lb" : "kg")}   {"001",3}";
 | 
				
			||||||
            ushort checksum = Elwig.Helpers.Utils.CalcCrc16Modbus(data);
 | 
					            ushort checksum = Elwig.Helpers.Utils.CalcCrc16Modbus(data);
 | 
				
			||||||
            if (crc) checksum += 10;
 | 
					            if (crc) checksum += 10;
 | 
				
			||||||
            return ($"<{data}{checksum,8}>\r\n", incr);
 | 
					            return ($"<{data}{checksum,8}>\r\n", incr);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public static (string, bool) Handle_L320(int weight, string? error, int identNr) {
 | 
					        public static (string, bool) HandleDMA02(string req, int weight, int tare, string? error, int identNr) {
 | 
				
			||||||
 | 
					            var modes = error?.Split(';') ?? [];
 | 
				
			||||||
 | 
					            var overloaded = modes.Contains("overloaded");
 | 
				
			||||||
 | 
					            var moving = modes.Contains("moving");
 | 
				
			||||||
 | 
					            var invalid = modes.Contains("invalid");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Thread.Sleep(100);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (invalid) {
 | 
				
			||||||
 | 
					                return ("abcd\x03", false);
 | 
				
			||||||
 | 
					            } else if (req != "\x05" && req != "?") {
 | 
				
			||||||
 | 
					                return ("\x0002ES\x03", false);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            bool incr;
 | 
				
			||||||
 | 
					            if (req == "?") {
 | 
				
			||||||
 | 
					                incr = false;
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                incr = true;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (overloaded) {
 | 
				
			||||||
 | 
					                return ("\x0002ES\x03", false);
 | 
				
			||||||
 | 
					            } else if (weight == 0) {
 | 
				
			||||||
 | 
					                incr = false;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (moving && incr)
 | 
				
			||||||
 | 
					                return ("\x0002EM\x03", false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            string data = $" {(moving ? "M" : "S")}{weight + tare,7}{tare,7}{weight,7} 1{(incr ? identNr : 0),6}{new DateTime(2020, 10, 15, 12, 34, 0):yyyyMMddHHmmss}";
 | 
				
			||||||
 | 
					            return ($"\x0002{data}\x03", incr);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public static (string, bool) HandleDMA03Baby(string req, int weight, int tare, string? error, int identNr) {
 | 
				
			||||||
 | 
					            return HandleDMA02(req, weight, tare, error, identNr);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public static (string, bool) Handle_L320(int weight, int tare, string? error, int identNr) {
 | 
				
			||||||
            var modes = error?.Split(';') ?? [];
 | 
					            var modes = error?.Split(';') ?? [];
 | 
				
			||||||
            var invalid = modes.Contains("invalid");
 | 
					            var invalid = modes.Contains("invalid");
 | 
				
			||||||
            var unit = modes.Contains("unit");
 | 
					            var unit = modes.Contains("unit");
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +0,0 @@
 | 
				
			|||||||
namespace Tests.WeighingTests {
 | 
					 | 
				
			||||||
    [TestFixture]
 | 
					 | 
				
			||||||
    public class ScaleTestHaugsdorf {
 | 
					 | 
				
			||||||
        // TODO
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										115
									
								
								Tests/WeighingTests/ScaleTestHaugsdorfDMA02.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								Tests/WeighingTests/ScaleTestHaugsdorfDMA02.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,115 @@
 | 
				
			|||||||
 | 
					using Elwig.Helpers.Weighing;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Tests.WeighingTests {
 | 
				
			||||||
 | 
					    [TestFixture]
 | 
				
			||||||
 | 
					    public class ScaleTestHaugsdorfDMA02 {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private MockScale Mock;
 | 
				
			||||||
 | 
					        private GassnerScale Scale;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [OneTimeSetUp]
 | 
				
			||||||
 | 
					        public void SetupScale() {
 | 
				
			||||||
 | 
					            Mock = new CommandMockScale(12345, ScaleHandlers.HandleDMA02);
 | 
				
			||||||
 | 
					            Scale = new("1", "DMA02", "tcp://127.0.0.1:12345");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [OneTimeTearDown]
 | 
				
			||||||
 | 
					        public void TeardownScale() {
 | 
				
			||||||
 | 
					            Mock.Dispose();
 | 
				
			||||||
 | 
					            Scale.Dispose();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [SetUp]
 | 
				
			||||||
 | 
					        public void ResetScale() {
 | 
				
			||||||
 | 
					            Mock.IdentNr = 0;
 | 
				
			||||||
 | 
					            Mock.Weight = 0;
 | 
				
			||||||
 | 
					            Mock.Tare = 0;
 | 
				
			||||||
 | 
					            Mock.Error = null;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Test]
 | 
				
			||||||
 | 
					        public async Task Test_01_CurrentWeight() {
 | 
				
			||||||
 | 
					            Mock.Weight = 1234;
 | 
				
			||||||
 | 
					            Mock.Tare = 0;
 | 
				
			||||||
 | 
					            Assert.That(await Scale!.GetCurrentWeight(), Is.EqualTo(new WeighingResult {
 | 
				
			||||||
 | 
					                GrossWeight = 1234,
 | 
				
			||||||
 | 
					                TareWeight = 0,
 | 
				
			||||||
 | 
					                NetWeight = 1234,
 | 
				
			||||||
 | 
					                Date = new DateOnly(2020, 10, 15),
 | 
				
			||||||
 | 
					                Time = new TimeOnly(12, 34),
 | 
				
			||||||
 | 
					            }));
 | 
				
			||||||
 | 
					            Mock.Weight = 1235;
 | 
				
			||||||
 | 
					            Mock.Tare = 46;
 | 
				
			||||||
 | 
					            Assert.That(await Scale!.GetCurrentWeight(), Is.EqualTo(new WeighingResult {
 | 
				
			||||||
 | 
					                GrossWeight = 1281,
 | 
				
			||||||
 | 
					                TareWeight = 46,
 | 
				
			||||||
 | 
					                NetWeight = 1235,
 | 
				
			||||||
 | 
					                Date = new DateOnly(2020, 10, 15),
 | 
				
			||||||
 | 
					                Time = new TimeOnly(12, 34),
 | 
				
			||||||
 | 
					            }));
 | 
				
			||||||
 | 
					            Mock.Weight = 1236;
 | 
				
			||||||
 | 
					            Mock.Tare = 92;
 | 
				
			||||||
 | 
					            Assert.That(await Scale!.GetCurrentWeight(), Is.EqualTo(new WeighingResult {
 | 
				
			||||||
 | 
					                GrossWeight = 1328,
 | 
				
			||||||
 | 
					                TareWeight = 92,
 | 
				
			||||||
 | 
					                NetWeight = 1236,
 | 
				
			||||||
 | 
					                Date = new DateOnly(2020, 10, 15),
 | 
				
			||||||
 | 
					                Time = new TimeOnly(12, 34),
 | 
				
			||||||
 | 
					            }));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Test]
 | 
				
			||||||
 | 
					        public async Task Test_02_Normal() {
 | 
				
			||||||
 | 
					            Mock.Weight = 1234;
 | 
				
			||||||
 | 
					            Mock.Tare = 92;
 | 
				
			||||||
 | 
					            Assert.That(await Scale!.Weigh(), Is.EqualTo(new WeighingResult {
 | 
				
			||||||
 | 
					                GrossWeight = 1326,
 | 
				
			||||||
 | 
					                TareWeight = 92,
 | 
				
			||||||
 | 
					                NetWeight = 1234,
 | 
				
			||||||
 | 
					                WeighingId = "1",
 | 
				
			||||||
 | 
					                FullWeighingId = "1",
 | 
				
			||||||
 | 
					                Date = new DateOnly(2020, 10, 15),
 | 
				
			||||||
 | 
					                Time = new TimeOnly(12, 34),
 | 
				
			||||||
 | 
					            }));
 | 
				
			||||||
 | 
					            Mock.Weight = 3333;
 | 
				
			||||||
 | 
					            Mock.Tare = 41;
 | 
				
			||||||
 | 
					            Assert.That(await Scale!.Weigh(), Is.EqualTo(new WeighingResult {
 | 
				
			||||||
 | 
					                GrossWeight = 3374,
 | 
				
			||||||
 | 
					                TareWeight = 41,
 | 
				
			||||||
 | 
					                NetWeight = 3333,
 | 
				
			||||||
 | 
					                WeighingId = "2",
 | 
				
			||||||
 | 
					                FullWeighingId = "2",
 | 
				
			||||||
 | 
					                Date = new DateOnly(2020, 10, 15),
 | 
				
			||||||
 | 
					                Time = new TimeOnly(12, 34),
 | 
				
			||||||
 | 
					            }));
 | 
				
			||||||
 | 
					            Mock.Weight = 4321;
 | 
				
			||||||
 | 
					            Mock.Tare = 0;
 | 
				
			||||||
 | 
					            Assert.That(await Scale!.Weigh(), Is.EqualTo(new WeighingResult {
 | 
				
			||||||
 | 
					                GrossWeight = 4321,
 | 
				
			||||||
 | 
					                TareWeight = 0,
 | 
				
			||||||
 | 
					                NetWeight = 4321,
 | 
				
			||||||
 | 
					                WeighingId = "3",
 | 
				
			||||||
 | 
					                FullWeighingId = "3",
 | 
				
			||||||
 | 
					                Date = new DateOnly(2020, 10, 15),
 | 
				
			||||||
 | 
					                Time = new TimeOnly(12, 34),
 | 
				
			||||||
 | 
					            }));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Test]
 | 
				
			||||||
 | 
					        public void Test_03_Moving() {
 | 
				
			||||||
 | 
					            Mock.Weight = 1_000;
 | 
				
			||||||
 | 
					            Mock.Tare = 41;
 | 
				
			||||||
 | 
					            Mock.Error = "moving";
 | 
				
			||||||
 | 
					            IOException ex = Assert.ThrowsAsync<IOException>(async () => await Scale!.Weigh());
 | 
				
			||||||
 | 
					            Assert.That(ex.Message, Contains.Substring("Waage in Bewegung"));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Test]
 | 
				
			||||||
 | 
					        public void Test_04_InvalidResponse() {
 | 
				
			||||||
 | 
					            Mock.Weight = 1_000;
 | 
				
			||||||
 | 
					            Mock.Tare = 41;
 | 
				
			||||||
 | 
					            Mock.Error = "invalid";
 | 
				
			||||||
 | 
					            Assert.ThrowsAsync<IOException>(async () => await Scale!.Weigh());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,6 +0,0 @@
 | 
				
			|||||||
namespace Tests.WeighingTests {
 | 
					 | 
				
			||||||
    [TestFixture]
 | 
					 | 
				
			||||||
    public class ScaleTestSitzendorf {
 | 
					 | 
				
			||||||
        // TODO
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										115
									
								
								Tests/WeighingTests/ScaleTestSitzendorfDMA03Baby.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								Tests/WeighingTests/ScaleTestSitzendorfDMA03Baby.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,115 @@
 | 
				
			|||||||
 | 
					using Elwig.Helpers.Weighing;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Tests.WeighingTests {
 | 
				
			||||||
 | 
					    [TestFixture]
 | 
				
			||||||
 | 
					    public class ScaleTestSitzendorfDMA03Baby {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private MockScale Mock;
 | 
				
			||||||
 | 
					        private GassnerScale Scale;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [OneTimeSetUp]
 | 
				
			||||||
 | 
					        public void SetupScale() {
 | 
				
			||||||
 | 
					            Mock = new CommandMockScale(12345, ScaleHandlers.HandleDMA03Baby);
 | 
				
			||||||
 | 
					            Scale = new("1", "DMA03-baby", "tcp://127.0.0.1:12345");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [OneTimeTearDown]
 | 
				
			||||||
 | 
					        public void TeardownScale() {
 | 
				
			||||||
 | 
					            Mock.Dispose();
 | 
				
			||||||
 | 
					            Scale.Dispose();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [SetUp]
 | 
				
			||||||
 | 
					        public void ResetScale() {
 | 
				
			||||||
 | 
					            Mock.IdentNr = 0;
 | 
				
			||||||
 | 
					            Mock.Weight = 0;
 | 
				
			||||||
 | 
					            Mock.Tare = 0;
 | 
				
			||||||
 | 
					            Mock.Error = null;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Test]
 | 
				
			||||||
 | 
					        public async Task Test_01_CurrentWeight() {
 | 
				
			||||||
 | 
					            Mock.Weight = 1234;
 | 
				
			||||||
 | 
					            Mock.Tare = 0;
 | 
				
			||||||
 | 
					            Assert.That(await Scale!.GetCurrentWeight(), Is.EqualTo(new WeighingResult {
 | 
				
			||||||
 | 
					                GrossWeight = 1234,
 | 
				
			||||||
 | 
					                TareWeight = 0,
 | 
				
			||||||
 | 
					                NetWeight = 1234,
 | 
				
			||||||
 | 
					                Date = new DateOnly(2020, 10, 15),
 | 
				
			||||||
 | 
					                Time = new TimeOnly(12, 34),
 | 
				
			||||||
 | 
					            }));
 | 
				
			||||||
 | 
					            Mock.Weight = 1235;
 | 
				
			||||||
 | 
					            Mock.Tare = 46;
 | 
				
			||||||
 | 
					            Assert.That(await Scale!.GetCurrentWeight(), Is.EqualTo(new WeighingResult {
 | 
				
			||||||
 | 
					                GrossWeight = 1281,
 | 
				
			||||||
 | 
					                TareWeight = 46,
 | 
				
			||||||
 | 
					                NetWeight = 1235,
 | 
				
			||||||
 | 
					                Date = new DateOnly(2020, 10, 15),
 | 
				
			||||||
 | 
					                Time = new TimeOnly(12, 34),
 | 
				
			||||||
 | 
					            }));
 | 
				
			||||||
 | 
					            Mock.Weight = 1236;
 | 
				
			||||||
 | 
					            Mock.Tare = 92;
 | 
				
			||||||
 | 
					            Assert.That(await Scale!.GetCurrentWeight(), Is.EqualTo(new WeighingResult {
 | 
				
			||||||
 | 
					                GrossWeight = 1328,
 | 
				
			||||||
 | 
					                TareWeight = 92,
 | 
				
			||||||
 | 
					                NetWeight = 1236,
 | 
				
			||||||
 | 
					                Date = new DateOnly(2020, 10, 15),
 | 
				
			||||||
 | 
					                Time = new TimeOnly(12, 34),
 | 
				
			||||||
 | 
					            }));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Test]
 | 
				
			||||||
 | 
					        public async Task Test_02_Normal() {
 | 
				
			||||||
 | 
					            Mock.Weight = 1234;
 | 
				
			||||||
 | 
					            Mock.Tare = 92;
 | 
				
			||||||
 | 
					            Assert.That(await Scale!.Weigh(), Is.EqualTo(new WeighingResult {
 | 
				
			||||||
 | 
					                GrossWeight = 1326,
 | 
				
			||||||
 | 
					                TareWeight = 92,
 | 
				
			||||||
 | 
					                NetWeight = 1234,
 | 
				
			||||||
 | 
					                WeighingId = "1",
 | 
				
			||||||
 | 
					                FullWeighingId = "1",
 | 
				
			||||||
 | 
					                Date = new DateOnly(2020, 10, 15),
 | 
				
			||||||
 | 
					                Time = new TimeOnly(12, 34),
 | 
				
			||||||
 | 
					            }));
 | 
				
			||||||
 | 
					            Mock.Weight = 3333;
 | 
				
			||||||
 | 
					            Mock.Tare = 41;
 | 
				
			||||||
 | 
					            Assert.That(await Scale!.Weigh(), Is.EqualTo(new WeighingResult {
 | 
				
			||||||
 | 
					                GrossWeight = 3374,
 | 
				
			||||||
 | 
					                TareWeight = 41,
 | 
				
			||||||
 | 
					                NetWeight = 3333,
 | 
				
			||||||
 | 
					                WeighingId = "2",
 | 
				
			||||||
 | 
					                FullWeighingId = "2",
 | 
				
			||||||
 | 
					                Date = new DateOnly(2020, 10, 15),
 | 
				
			||||||
 | 
					                Time = new TimeOnly(12, 34),
 | 
				
			||||||
 | 
					            }));
 | 
				
			||||||
 | 
					            Mock.Weight = 4321;
 | 
				
			||||||
 | 
					            Mock.Tare = 0;
 | 
				
			||||||
 | 
					            Assert.That(await Scale!.Weigh(), Is.EqualTo(new WeighingResult {
 | 
				
			||||||
 | 
					                GrossWeight = 4321,
 | 
				
			||||||
 | 
					                TareWeight = 0,
 | 
				
			||||||
 | 
					                NetWeight = 4321,
 | 
				
			||||||
 | 
					                WeighingId = "3",
 | 
				
			||||||
 | 
					                FullWeighingId = "3",
 | 
				
			||||||
 | 
					                Date = new DateOnly(2020, 10, 15),
 | 
				
			||||||
 | 
					                Time = new TimeOnly(12, 34),
 | 
				
			||||||
 | 
					            }));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Test]
 | 
				
			||||||
 | 
					        public void Test_03_Moving() {
 | 
				
			||||||
 | 
					            Mock.Weight = 1_000;
 | 
				
			||||||
 | 
					            Mock.Tare = 41;
 | 
				
			||||||
 | 
					            Mock.Error = "moving";
 | 
				
			||||||
 | 
					            IOException ex = Assert.ThrowsAsync<IOException>(async () => await Scale!.Weigh());
 | 
				
			||||||
 | 
					            Assert.That(ex.Message, Contains.Substring("Waage in Bewegung"));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Test]
 | 
				
			||||||
 | 
					        public void Test_04_InvalidResponse() {
 | 
				
			||||||
 | 
					            Mock.Weight = 1_000;
 | 
				
			||||||
 | 
					            Mock.Tare = 41;
 | 
				
			||||||
 | 
					            Mock.Error = "invalid";
 | 
				
			||||||
 | 
					            Assert.ThrowsAsync<IOException>(async () => await Scale!.Weigh());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -9,49 +9,10 @@ namespace Tests.WeighingTests {
 | 
				
			|||||||
        private SysTecITScale ScaleA;
 | 
					        private SysTecITScale ScaleA;
 | 
				
			||||||
        private SysTecITScale ScaleB;
 | 
					        private SysTecITScale ScaleB;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private static (string, bool) ScaleHandler(string req, int weight, string? error, int identNr, string terminalNr) {
 | 
					 | 
				
			||||||
            var modes = error?.Split(';') ?? [];
 | 
					 | 
				
			||||||
            var overloaded = modes.Contains("overloaded");
 | 
					 | 
				
			||||||
            var moving = modes.Contains("moving");
 | 
					 | 
				
			||||||
            var invalid = modes.Contains("invalid");
 | 
					 | 
				
			||||||
            var crc = modes.Contains("crc");
 | 
					 | 
				
			||||||
            var unit = modes.Contains("unit");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (invalid) {
 | 
					 | 
				
			||||||
                return ("abcd\r\n", false);
 | 
					 | 
				
			||||||
            } else if (!req.StartsWith('<') || !req.EndsWith('>')) {
 | 
					 | 
				
			||||||
                return ("<31>\r\n", false);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            req = req[1..^1];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            bool incr;
 | 
					 | 
				
			||||||
            if (req.Length > 3) {
 | 
					 | 
				
			||||||
                return ("<32>\r\n", false);
 | 
					 | 
				
			||||||
            } else if (req.StartsWith("RN")) {
 | 
					 | 
				
			||||||
                incr = true;
 | 
					 | 
				
			||||||
            } else if (req.StartsWith("RM")) {
 | 
					 | 
				
			||||||
                incr = false;
 | 
					 | 
				
			||||||
            } else {
 | 
					 | 
				
			||||||
                return ("<32>\r\n", false);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (overloaded)
 | 
					 | 
				
			||||||
                return ("<12>\r\n", false);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (moving && incr)
 | 
					 | 
				
			||||||
                return ("<13>\r\n", false);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            string data = $"00{(moving ? 1 : 0)}0{new DateTime(2020, 10, 8, 8, 47, 0):dd.MM.yyHH:mm}{(incr ? identNr : 0),4}1" +
 | 
					 | 
				
			||||||
                $"{weight,8}{0,8}{weight,8}{(unit ? "lb" : "kg")}   {terminalNr,3}";
 | 
					 | 
				
			||||||
            ushort checksum = Elwig.Helpers.Utils.CalcCrc16Modbus(data);
 | 
					 | 
				
			||||||
            if (crc) checksum += 10;
 | 
					 | 
				
			||||||
            return ($"<{data}{checksum,8}>\r\n", incr);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        [OneTimeSetUp]
 | 
					        [OneTimeSetUp]
 | 
				
			||||||
        public void SetupScale() {
 | 
					        public void SetupScale() {
 | 
				
			||||||
            MockA = new CommandMockScale(12345, (req, weight, error, identNr) => ScaleHandler(req, weight, error, identNr, "A"));
 | 
					            MockA = new CommandMockScale(12345, (req, weight, tare, error, identNr) => ScaleHandlers.Handle_IT6000E(req, weight, tare, error, identNr, "A"));
 | 
				
			||||||
            MockB = new CommandMockScale(12346, (req, weight, error, identNr) => ScaleHandler(req, weight, error, identNr, "B"));
 | 
					            MockB = new CommandMockScale(12346, (req, weight, tare, error, identNr) => ScaleHandlers.Handle_IT6000E(req, weight, tare, error, identNr, "B"));
 | 
				
			||||||
            ScaleA = new("A", "IT3000E", "tcp://127.0.0.1:12345");
 | 
					            ScaleA = new("A", "IT3000E", "tcp://127.0.0.1:12345");
 | 
				
			||||||
            ScaleB = new("B", "IT3000E", "tcp://127.0.0.1:12346");
 | 
					            ScaleB = new("B", "IT3000E", "tcp://127.0.0.1:12346");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user