From 04e9a7f23329a4cb5866dbc55a318d11f1cd9f02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sylwester=20Zieli=C5=84ski?= Date: Thu, 2 Oct 2025 16:39:25 +0200 Subject: [PATCH] Fix HTS tests --- .../profile/parser/hts/HTSDataParser.kt | 2 ++ .../profile/parser/hts/HTSDataParserTest.kt | 22 ++++++++++++++----- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/profile-parsers/src/main/java/no/nordicsemi/android/toolbox/profile/parser/hts/HTSDataParser.kt b/profile-parsers/src/main/java/no/nordicsemi/android/toolbox/profile/parser/hts/HTSDataParser.kt index 354675b6..01a0aaae 100644 --- a/profile-parsers/src/main/java/no/nordicsemi/android/toolbox/profile/parser/hts/HTSDataParser.kt +++ b/profile-parsers/src/main/java/no/nordicsemi/android/toolbox/profile/parser/hts/HTSDataParser.kt @@ -47,6 +47,8 @@ object HTSDataParser { var offset = 0 val flag: Int = byte.getInt(offset, IntFormat.UINT8, byteOrder) + if (flag > 7) return null + val unit: TemperatureUnitData = TemperatureUnitData.create(flag and 0x01) ?: return null val timestampPresent = flag and 0x02 != 0 diff --git a/profile-parsers/src/test/java/no/nordicsemi/android/toolbox/profile/parser/hts/HTSDataParserTest.kt b/profile-parsers/src/test/java/no/nordicsemi/android/toolbox/profile/parser/hts/HTSDataParserTest.kt index 2d53e626..da0883dc 100644 --- a/profile-parsers/src/test/java/no/nordicsemi/android/toolbox/profile/parser/hts/HTSDataParserTest.kt +++ b/profile-parsers/src/test/java/no/nordicsemi/android/toolbox/profile/parser/hts/HTSDataParserTest.kt @@ -23,14 +23,14 @@ class HTSDataParserTest { 0x0A.toByte(), // Hour: 10 0x1E.toByte(), // Minute: 30 0x2D.toByte(), // Second: 45 - 0x00.toByte(), // Type 0: CELSIUS - 0xFE.toByte() // Reserved + 0x01.toByte(), // Type 1: Armpit ) val result = HTSDataParser.parse(rawData) assertNotNull(result) result?.let { + assertEquals(HTSMeasurementType.ARMPIT, HTSMeasurementType.fromValue(it.type!!)) assertEquals(36.97f, it.temperature, 0.01f) assertEquals(TemperatureUnitData.CELSIUS, it.unit) assertNotNull(it.timestamp) @@ -60,7 +60,7 @@ class HTSDataParserTest { } @Test - fun `test parse with invalid float`() { + fun `test parse with infinity float`() { val byteArray = byteArrayOf( 0x00.toByte(), // Flags: Unit (Celsius), No Timestamp, No Temperature Type 0xFF.toByte(), 0xFF.toByte(), 0xFF.toByte(), 0x7F.toByte() // Temperature: +Infinity @@ -68,7 +68,19 @@ class HTSDataParserTest { val result = HTSDataParser.parse(byteArray) - assertNull(result) // Invalid temperature should result in null + assertEquals(Float.POSITIVE_INFINITY, result!!.temperature, 0.01f) + } + + @Test + fun `test parse with NaN float`() { + val byteArray = byteArrayOf( + 0x00.toByte(), // Flags: Unit (Celsius), No Timestamp, No Temperature Type + 0xFF.toByte(), 0xFF.toByte(), 0x7F.toByte(), 0x00.toByte() // Temperature: NaN + ) + + val result = HTSDataParser.parse(byteArray) + + assertEquals(Float.NaN, result!!.temperature, 0.01f) } @Test @@ -85,7 +97,7 @@ class HTSDataParserTest { fun `test parse with invalid flag`() { val byteArray = byteArrayOf( 0x08.toByte(), // Invalid Flag - 0xC4.toByte(), 0x09.toByte(), 0x80.toByte(), 0x3F.toByte() // Temperature: 25.0 + 0xC4.toByte(), 0x09.toByte(), 0x00.toByte(), 0xFE.toByte() // Temperature: 25.0 ) val result = HTSDataParser.parse(byteArray)