From 7b87d63531411ad77e14897136829b39fd8dc022 Mon Sep 17 00:00:00 2001 From: Michal Buzik Date: Mon, 22 Sep 2025 09:35:22 +0200 Subject: [PATCH] PoseidonReader - fix support Cli version 1.4 - Extend `TryGetDeviceId` to support JSON format and add corresponding tests --- TBF.sln.DotSettings.user | 21 +++++++++- TBF/Properties/AssemblyInfo.cs | 4 +- .../PoseidonCmdStartStop/PoseidonReader.cs | 16 +++++-- .../PoseidonCmdStartStop/CliRunnerTest.cs | 26 ++++++++++-- .../PoseidonReaderTest.cs | 42 +++++++++++++++++++ TBFTests/TBFTests.csproj | 1 + 6 files changed, 100 insertions(+), 10 deletions(-) create mode 100644 TBFTests/Rig/RegisterReaders/PoseidonCmdStartStop/PoseidonReaderTest.cs diff --git a/TBF.sln.DotSettings.user b/TBF.sln.DotSettings.user index 651fe81c0..4bb525659 100644 --- a/TBF.sln.DotSettings.user +++ b/TBF.sln.DotSettings.user @@ -1,4 +1,6 @@  + ForceIncluded + ForceIncluded True 77EB589F-C670-4489-AAD6-2A3C02061FD1 77EB589F-C670-4489-AAD6-2A3C02061FD1 @@ -9,12 +11,29 @@ <TestId>MSTest::77EB589F-C670-4489-AAD6-2A3C02061FD1::.NETFramework,Version=v4.7.2::TBFTests.Rig.Modbus.Meret.AdjustableScale.AdjustableMeterTest.GetCorrection</TestId> <TestId>MSTest::77EB589F-C670-4489-AAD6-2A3C02061FD1::.NETFramework,Version=v4.7.2::TBFTests.Rig.Network.Camera.KeyenceIV3G120.CameraTest.RtpListener</TestId> <TestId>MSTest::77EB589F-C670-4489-AAD6-2A3C02061FD1::.NETFramework,Version=v4.7.2::TBFTests.Rig.Network.Camera.KeyenceIV3G120.CameraTest.Initialize</TestId> + <TestId>MSTest::77EB589F-C670-4489-AAD6-2A3C02061FD1::.NETFramework,Version=v4.7.2::TBFTests.Rig.RegisterReaders.PoseidonCmdStartStop.CliRunnerTest.ExtractJson_Test</TestId> + <TestId>MSTest::77EB589F-C670-4489-AAD6-2A3C02061FD1::.NETFramework,Version=v4.7.2::TBFTests.Rig.RegisterReaders.PoseidonCmdStartStop.CliRunnerTest.ExtractJson_Test2</TestId> + <TestId>MSTest::77EB589F-C670-4489-AAD6-2A3C02061FD1::.NETFramework,Version=v4.7.2::TBFTests.Rig.RegisterReaders.PoseidonCmdStartStop.CliRunnerTest.TryJsonStringDeserialize_Test</TestId> + </TestAncestor> +</SessionState> + <SessionState ContinuousTestingMode="0" IsActive="True" Name="ExtractJson_Test2" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> + <TestAncestor> + <TestId>MSTest::77EB589F-C670-4489-AAD6-2A3C02061FD1::.NETFramework,Version=v4.7.2::TBFTests.Rig.RegisterReaders.PoseidonCmdStartStop.CliRunnerTest</TestId> + <TestId>MSTest::77EB589F-C670-4489-AAD6-2A3C02061FD1::.NETFramework,Version=v4.7.2::TBFTests.Rig.RegisterReaders.PoseidonCmdStartStop.PoseidonReaderTest.TryGetDeviceId_Test1</TestId> + <TestId>MSTest::77EB589F-C670-4489-AAD6-2A3C02061FD1::.NETFramework,Version=v4.7.2::TBFTests.Rig.RegisterReaders.PoseidonCmdStartStop.PoseidonReaderTest.TryGetDeviceId_Test2</TestId> + <TestId>MSTest::77EB589F-C670-4489-AAD6-2A3C02061FD1::.NETFramework,Version=v4.7.2::TBFTests.Rig.RegisterReaders.PoseidonCmdStartStop.PoseidonReaderTest.TryGetDeviceId_Test3</TestId> + </TestAncestor> +</SessionState> + <SessionState ContinuousTestingMode="0" Name="TryJsonStringDeserialize_Test" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> + <TestAncestor> + <TestId>MSTest::77EB589F-C670-4489-AAD6-2A3C02061FD1::.NETFramework,Version=v4.7.2::TBFTests.Rig.RegisterReaders.PoseidonCmdStartStop.CliRunnerTest.TryJsonStringDeserialize_Test</TestId> </TestAncestor> </SessionState> - <SessionState ContinuousTestingMode="0" IsActive="True" Name="Initialize" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> + <SessionState ContinuousTestingMode="0" Name="Initialize" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> <TestAncestor> <TestId>MSTest::77EB589F-C670-4489-AAD6-2A3C02061FD1::.NETFramework,Version=v4.7.2::TBFTests.Rig.Network.Camera.KeyenceIV3G120.CameraTest.Initialize</TestId> + <TestId>MSTest::77EB589F-C670-4489-AAD6-2A3C02061FD1::.NETFramework,Version=v4.7.2::TBFTests.Rig.RegisterReaders.PoseidonCmdStartStop.CliRunnerTest.ExtractJson_Test</TestId> </TestAncestor> </SessionState> False diff --git a/TBF/Properties/AssemblyInfo.cs b/TBF/Properties/AssemblyInfo.cs index 925eeb85a..b021f8894 100644 --- a/TBF/Properties/AssemblyInfo.cs +++ b/TBF/Properties/AssemblyInfo.cs @@ -29,5 +29,5 @@ using System.Runtime.InteropServices; // Build Number // Revision // -[assembly: AssemblyVersion("3.9.2146.5")] -[assembly: AssemblyFileVersion("3.9.2146.5")] +[assembly: AssemblyVersion("3.9.2147.0")] +[assembly: AssemblyFileVersion("3.9.2147.0")] diff --git a/TBF/Rig/RegisterReaders/PoseidonCmdStartStop/PoseidonReader.cs b/TBF/Rig/RegisterReaders/PoseidonCmdStartStop/PoseidonReader.cs index 168b7797f..05563574c 100644 --- a/TBF/Rig/RegisterReaders/PoseidonCmdStartStop/PoseidonReader.cs +++ b/TBF/Rig/RegisterReaders/PoseidonCmdStartStop/PoseidonReader.cs @@ -485,9 +485,14 @@ namespace TBF.Rig.RegisterReaders.PoseidonCmdStartStop } } - private static readonly Regex DeviceIdRegex = - new Regex(@"(?im)^\s*Device\s*Id\s*:\s*([^\r\n]+)\s*$", RegexOptions.Compiled); - private bool TryGetDeviceId(string result, out string s) + private static readonly Regex DeviceIdRegex = new Regex( + @"(?im)(?:" + + @"^\s*Device\s*Id\s*:\s*([^\r\n]+)\s*$" + // old format + @"|" + + @"""DeviceId""\s*:\s*""?([0-9]+)""?" + // JSON format + @")", + RegexOptions.Compiled); + public bool TryGetDeviceId(string result, out string s) { s = null; if (string.IsNullOrEmpty(result)) @@ -497,7 +502,10 @@ namespace TBF.Rig.RegisterReaders.PoseidonCmdStartStop if (!m.Success) return false; - s = m.Groups[1].Value.Trim(); + // one of the groups will be filled + s = !string.IsNullOrEmpty(m.Groups[1].Value) + ? m.Groups[1].Value.Trim() + : m.Groups[2].Value.Trim(); return true; } diff --git a/TBFTests/Rig/RegisterReaders/PoseidonCmdStartStop/CliRunnerTest.cs b/TBFTests/Rig/RegisterReaders/PoseidonCmdStartStop/CliRunnerTest.cs index b2f4f03a8..f0c3a6ff6 100644 --- a/TBFTests/Rig/RegisterReaders/PoseidonCmdStartStop/CliRunnerTest.cs +++ b/TBFTests/Rig/RegisterReaders/PoseidonCmdStartStop/CliRunnerTest.cs @@ -13,18 +13,38 @@ namespace TBFTests.Rig.RegisterReaders.PoseidonCmdStartStop [TestMethod] public void ExtractJson_Test() { - String allOutput = ""; + String allOutput = " {\n \"DeviceId\": \"1000000267\"\n}\n"; + CliRunner cliRunner = new CliRunner(false); + string json = cliRunner.ExtractJson(allOutput); + + Assert.IsTrue(!string.IsNullOrEmpty(json)); + } + + [TestMethod] + public void ExtractJson_Test2() + { + String allOutput = "{\n \"NfcTagDetected\": true,\n \"ProductType\": 74,\n \"ProductTypeVersion\": \"B1.0.13\",\n \"DeviceId\": \"1000000267\",\n \"Reading\": \"0003292.1\",\n \"Reading_Totalizer\": \"000329218\",\n \"Reading_Digits\": \"8\",\n \"Reading_Shift\": \"-1\",\n \"Reading_Resolution\": \"-2\",\n \"Reading_Units\": \"2\",\n \"Reading_FlowDirection\": \"3\",\n \"Reading_FlowRate\": \"0\",\n \"CalibrationFactor\": \"3197\",\n \"ReadingComplete\": true,\n \"MeterState\": \"0x02\",\n \"OpticalDataMode\": \"0x00\",\n \"SpreadSpectrumParameters\": \"Disabled: 0xTrue\",\n \"BuildInformation\": \"\"\n}\n"; CliRunner cliRunner = new CliRunner(false); string json = cliRunner.ExtractJson(allOutput); Assert.IsTrue(!string.IsNullOrEmpty(json)); - } [TestMethod] public void TryJsonStringDeserialize_Test() { - + String allOutput = "{\n \"NfcTagDetected\": true,\n \"ProductType\": 74,\n \"ProductTypeVersion\": \"B1.0.13\",\n \"DeviceId\": \"1000000267\",\n \"Reading\": \"0003292.1\",\n \"Reading_Totalizer\": \"000329218\",\n \"Reading_Digits\": \"8\",\n \"Reading_Shift\": \"-1\",\n \"Reading_Resolution\": \"-2\",\n \"Reading_Units\": \"2\",\n \"Reading_FlowDirection\": \"3\",\n \"Reading_FlowRate\": \"0\",\n \"CalibrationFactor\": \"3197\",\n \"ReadingComplete\": true,\n \"MeterState\": \"0x02\",\n \"OpticalDataMode\": \"0x00\",\n \"SpreadSpectrumParameters\": \"Disabled: 0xTrue\",\n \"BuildInformation\": \"\"\n}\n"; + CliRunner cliRunner = new CliRunner(false); + string json = cliRunner.ExtractJson(allOutput); + + var ok = cliRunner.TryJsonStringDeserialize(json, out var dto); + Assert.IsTrue(ok, "Deserialization failed"); + Assert.IsNotNull(dto); + Assert.AreEqual("1000000267", dto.DeviceId); + Assert.AreEqual("0003292.1", dto.Reading); + Assert.AreEqual("000329218", dto.Reading_Totalizer); + Assert.AreEqual(true, dto.NfcTagDetected); + Assert.AreEqual(74, dto.ProductType); } } } \ No newline at end of file diff --git a/TBFTests/Rig/RegisterReaders/PoseidonCmdStartStop/PoseidonReaderTest.cs b/TBFTests/Rig/RegisterReaders/PoseidonCmdStartStop/PoseidonReaderTest.cs new file mode 100644 index 000000000..b73540c8b --- /dev/null +++ b/TBFTests/Rig/RegisterReaders/PoseidonCmdStartStop/PoseidonReaderTest.cs @@ -0,0 +1,42 @@ +using JetBrains.Annotations; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using TBF.Rig.RegisterReaders.PoseidonCmdStartStop; + +namespace TBFTests.Rig.RegisterReaders.PoseidonCmdStartStop +{ + [TestClass] + [TestSubject(typeof(PoseidonReader))] + public class PoseidonReaderTest + { + + [TestMethod] + public void TryGetDeviceId_Test1() + { + string strIn = "{\n \"DeviceId\" : \"1000000267\"\n }"; + PoseidonReader reader = new PoseidonReader(); + bool tryGetDeviceId = reader.TryGetDeviceId(strIn, out string strOut); + Assert.IsTrue(tryGetDeviceId); + Assert.AreEqual("1000000267", strOut); + } + + [TestMethod] + public void TryGetDeviceId_Test2() + { + string strIn = " \"DeviceId\" : \"1000000267\""; + PoseidonReader reader = new PoseidonReader(); + bool tryGetDeviceId = reader.TryGetDeviceId(strIn, out string strOut); + Assert.IsTrue(tryGetDeviceId); + Assert.AreEqual("1000000267", strOut); + } + + [TestMethod] + public void TryGetDeviceId_Test3() + { + string strIn = "{\n \"NfcTagDetected\": true,\n \"ProductType\": 74,\n \"ProductTypeVersion\": \"B1.0.13\",\n \"DeviceId\": \"1000000267\",\n \"Reading\": \"0003292.1\",\n \"Reading_Totalizer\": \"000329218\",\n \"Reading_Digits\": \"8\",\n \"Reading_Shift\": \"-1\",\n \"Reading_Resolution\": \"-2\",\n \"Reading_Units\": \"2\",\n \"Reading_FlowDirection\": \"3\",\n \"Reading_FlowRate\": \"0\",\n \"CalibrationFactor\": \"3197\",\n \"ReadingComplete\": true,\n \"MeterState\": \"0x02\",\n \"OpticalDataMode\": \"0x00\",\n \"SpreadSpectrumParameters\": \"Disabled: 0xTrue\",\n \"BuildInformation\": \"\"\n}"; + PoseidonReader reader = new PoseidonReader(); + bool tryGetDeviceId = reader.TryGetDeviceId(strIn, out string strOut); + Assert.IsTrue(tryGetDeviceId); + Assert.AreEqual("1000000267", strOut); + } + } +} \ No newline at end of file diff --git a/TBFTests/TBFTests.csproj b/TBFTests/TBFTests.csproj index 3be8360ef..dbdceb858 100644 --- a/TBFTests/TBFTests.csproj +++ b/TBFTests/TBFTests.csproj @@ -100,6 +100,7 @@ +