From 54e59adf01f5b36a991073054d5e37d857ade03d Mon Sep 17 00:00:00 2001 From: darken Date: Tue, 4 Jan 2022 21:06:33 +0100 Subject: [PATCH] Improve tests --- .../pods/core/apple/AirPodsFactoryTest.kt | 198 -------------- .../core/apple/BasicSingleApplePodsTest.kt | 30 +++ .../pods/core/apple/DualApplePodsTest.kt | 244 ++++++++++++++++++ .../pods/core/apple/SingleApplePodsTest.kt | 36 +++ 4 files changed, 310 insertions(+), 198 deletions(-) create mode 100644 app/src/test/java/eu/darken/capod/pods/core/apple/BasicSingleApplePodsTest.kt create mode 100644 app/src/test/java/eu/darken/capod/pods/core/apple/DualApplePodsTest.kt create mode 100644 app/src/test/java/eu/darken/capod/pods/core/apple/SingleApplePodsTest.kt diff --git a/app/src/test/java/eu/darken/capod/pods/core/apple/AirPodsFactoryTest.kt b/app/src/test/java/eu/darken/capod/pods/core/apple/AirPodsFactoryTest.kt index cb1e861d..78260aae 100644 --- a/app/src/test/java/eu/darken/capod/pods/core/apple/AirPodsFactoryTest.kt +++ b/app/src/test/java/eu/darken/capod/pods/core/apple/AirPodsFactoryTest.kt @@ -1,6 +1,5 @@ package eu.darken.capod.pods.core.apple -import eu.darken.capod.pods.core.DualPodDevice import eu.darken.capod.pods.core.PodDevice import eu.darken.capod.pods.core.apple.airpods.AirPodsGen1 import eu.darken.capod.pods.core.apple.airpods.AirPodsPro @@ -11,203 +10,6 @@ import org.junit.jupiter.api.Test class AirPodsFactoryTest : BaseAirPodsTest() { - @Test - fun `test AirPodDevice - active microphone`() = runBlockingTest { - create("07 19 01 0E 20 >2B< AA B5 31 00 00 E0 0C A7 8A 60 4B D3 7D F4 60 4F 2C 73 E9 A7 F4") { - // 00101011 - // --^----- - microPhonePod shouldBe DualPodDevice.Pod.LEFT - } - create("07 19 01 0E 20 >0B< AA B5 31 00 00 E0 0C A7 8A 60 4B D3 7D F4 60 4F 2C 73 E9 A7 F4") { - // 00001011 - // --^----- - microPhonePod shouldBe DualPodDevice.Pod.RIGHT - } - } - - @Test - fun `test AirPodDevice - left pod ear status`() = runBlockingTest { - // Left Pod primary - create("07 19 01 0E 20 >22< AA B5 31 00 00 E0 0C A7 8A 60 4B D3 7D F4 60 4F 2C 73 E9 A7 F4") { - // 00100010 - // 765432¹0 - isLeftPodInEar shouldBe true - } - create("07 19 01 0E 20 >20< AA B5 31 00 00 E0 0C A7 8A 60 4B D3 7D F4 60 4F 2C 73 E9 A7 F4") { - // 00100000 - // 765432¹0 - isLeftPodInEar shouldBe false - } - - // Right Pod is primary - create("07 19 01 0E 20 >09< AA B5 31 00 00 E0 0C A7 8A 60 4B D3 7D F4 60 4F 2C 73 E9 A7 F4") { - // 00001001 - // 7654³210 - isLeftPodInEar shouldBe true - } - create("07 19 01 0E 20 >20< AA B5 31 00 00 E0 0C A7 8A 60 4B D3 7D F4 60 4F 2C 73 E9 A7 F4") { - // 00000001 - // 7654³210 - isLeftPodInEar shouldBe false - } - } - - @Test - fun `test AirPodDevice - right pod ear status`() = runBlockingTest { - // Left Pod primary - create("07 19 01 0E 20 >29< AA B5 31 00 00 E0 0C A7 8A 60 4B D3 7D F4 60 4F 2C 73 E9 A7 F4") { - // 00101001 - // 7654³210 - isRightPodInEar shouldBe true - } - create("07 19 01 0E 20 >21< AA B5 31 00 00 E0 0C A7 8A 60 4B D3 7D F4 60 4F 2C 73 E9 A7 F4") { - // 00100001 - // 7654³210 - isRightPodInEar shouldBe false - } - - // Right Pod is primary - create("07 19 01 0E 20 >03< AA B5 31 00 00 E0 0C A7 8A 60 4B D3 7D F4 60 4F 2C 73 E9 A7 F4") { - // 00000011 - // 765432¹0 - isRightPodInEar shouldBe true - } - create("07 19 01 0E 20 >01< AA B5 31 00 00 E0 0C A7 8A 60 4B D3 7D F4 60 4F 2C 73 E9 A7 F4") { - // 00000001 - // 765432¹0 - isRightPodInEar shouldBe false - } - } - - @Test - fun `test AirPodDevice - battery status`() = runBlockingTest { - // Right Pod is primary - create("07 19 01 0E 20 0B >98< 94 52 00 05 09 73 3C 3D F9 2C 3E B3 DD 76 02 DD 4E 16 FD FB") { - // 88 10001000 - batteryLeftPodPercent shouldBe 0.9f - batteryRightPodPercent shouldBe 0.8f - } - // Left Pod primary - create("07 19 01 0E 20 2B >89< 94 52 00 05 09 73 3C 3D F9 2C 3E B3 DD 76 02 DD 4E 16 FD FB") { - // F8 11111000 - batteryLeftPodPercent shouldBe 0.9f - batteryRightPodPercent shouldBe 0.8f - } - } - - @Test - fun `test AirPodDevice - pod charging`() = runBlockingTest { - /** - * Right pod is charging - */ - // This is the left - create("07 19 01 0E 20 51 89 >94< 52 00 00 F4 89 82 6D 3E 27 7F 26 62 57 D0 E2 A6 49 E9 35") { - // 1001 0100 - isLeftPodCharging shouldBe false - isRightPodCharging shouldBe true - } - // This is the right - create("07 19 01 0E 20 31 98 >A4< 01 00 00 31 B9 A0 C4 80 CD D1 CF B9 3A 9A 6D 48 31 08 EB") { - // 1010 0100 - isLeftPodCharging shouldBe false - isRightPodCharging shouldBe true - } - - /** - * Left pod is charging - */ - // This is the left - create("07 19 01 0E 20 71 98 >94< 52 00 05 A5 37 31 B2 BD 42 68 0C 64 FD 00 99 4A E5 3E F4") { - // 1001 0100 - isLeftPodCharging shouldBe true - isRightPodCharging shouldBe false - } - // This is the right - create("07 19 01 0E 20 11 89 >A4< 04 00 04 BA 79 1B C0 65 69 C6 9F 19 6E 37 7D 6D 86 8D D9") { - // 1010 0100 - isLeftPodCharging shouldBe true - isRightPodCharging shouldBe false - } - - // Both charging - create("07 19 01 0E 20 55 88 >B4< 59 00 05 4B FC DF 68 28 A5 45 52 65 9C FE 51 86 3A B5 DB") { - // 1011 0100 - isLeftPodCharging shouldBe true - isRightPodCharging shouldBe true - } - // Both not charging - create("07 19 01 0E 20 00 F8 >8F< 03 00 05 4C 0F A0 C4 05 24 DD EB AF 92 99 FD 54 B1 06 48") { - // 1000 1111 - isLeftPodCharging shouldBe false - isRightPodCharging shouldBe false - } - } - - @Test - fun `test AirPodDevice - case charging`() = runBlockingTest { - create("07 19 01 0E 20 75 99 >B4< 31 00 05 77 C8 BA 0C 4E 1F BE AD 70 C5 40 71 D2 E9 17 A2") { - // 0011 0011 - isCaseCharging shouldBe false - } - create("07 19 01 0E 20 75 A9 >F4< 51 00 05 A0 37 92 35 49 79 CC DC 27 94 8E FB 72 12 94 52") { - // 0101 0011 - isCaseCharging shouldBe true - } - } - - @Test - fun `test AirPodDevice - case lid test`() = runBlockingTest { - // Lid open - create("07 19 01 0E 20 55 AA B4 >31< 00 00 A1 D0 BD 82 D3 52 86 CA FC 11 62 DC 42 C6 92 8E") { - // 31 0011 0001 - caseLidState shouldBe DualApplePods.LidState.OPEN - } - // Lid just closed - create("07 19 01 0E 20 55 AA B4 >39< 00 00 08 A6 DB 99 E0 5E 14 85 E5 C2 0B 68 D7 FF C3 A1") { - // 39 0011 1001 - caseLidState shouldBe DualApplePods.LidState.UNKNOWN - } - // Lid closed - create("07 19 01 0E 20 55 AA B4 38 00 00 F3 F7 08 3B 98 09 C0 DD E4 BD BD 84 55 56 8B 81") { - // 38 0011 1000 - caseLidState shouldBe DualApplePods.LidState.CLOSED - } - } - - @Test - fun `test AirPodDevice - connection state`() = runBlockingTest { - // Disconnected - create("07 19 01 0E 20 2B AA 8F 01 00 >00< 62 D4 BB F1 A7 F8 64 98 D2 C8 BD 7B 3A EF 2E 15") { - // 31 0011 0001 - connectionState shouldBe DualApplePods.ConnectionState.DISCONNECTED - } - // Connected idle - create("07 19 01 0E 20 2B AA 8F 01 00 >04< 1D 69 69 9C C2 51 F3 1F BF 6E 45 DA 90 4A A3 E3") { - // 39 0011 1001 - connectionState shouldBe DualApplePods.ConnectionState.IDLE - } - // Connected and playing music - create("07 19 01 0E 20 2B A9 8F 01 00 >05< 14 F7 CB 49 9F D3 B3 22 77 D2 22 F1 74 8C AC A6") { - // 38 0011 1000 - connectionState shouldBe DualApplePods.ConnectionState.MUSIC - } - // Connected and call active - create("07 19 01 0E 20 2B 99 8F 01 00 >06< 0F 4B 43 25 E0 4A 73 63 14 22 C2 3C 89 13 BD 97") { - // 38 0011 1000 - connectionState shouldBe DualApplePods.ConnectionState.CALL - } - // Connected and call active - create("07 19 01 0E 20 2B 99 8F 01 00 >07< E7 DF 76 44 85 B5 30 F4 95 14 02 DC A1 A4 8A 09") { - // 38 0011 1000 - connectionState shouldBe DualApplePods.ConnectionState.RINGING - } - // Switching? - create("07 19 01 0E 20 2B 99 8F 01 00 >09< 10 30 EE F3 41 B5 D8 9F A3 B0 B4 17 9F 85 97 5F") { - // 38 0011 1000 - connectionState shouldBe DualApplePods.ConnectionState.HANGING_UP - } - } - @Test fun `create AirPodsGen1`() = runBlockingTest { create("07 19 01 02 20 55 AA 56 31 00 00 6F E4 DF 10 AF 10 60 81 03 3B 76 D9 C7 11 22 88") { diff --git a/app/src/test/java/eu/darken/capod/pods/core/apple/BasicSingleApplePodsTest.kt b/app/src/test/java/eu/darken/capod/pods/core/apple/BasicSingleApplePodsTest.kt new file mode 100644 index 00000000..0cb2ae83 --- /dev/null +++ b/app/src/test/java/eu/darken/capod/pods/core/apple/BasicSingleApplePodsTest.kt @@ -0,0 +1,30 @@ +package eu.darken.capod.pods.core.apple + +import io.kotest.matchers.shouldBe +import kotlinx.coroutines.test.runBlockingTest +import org.junit.jupiter.api.Test + +class BasicSingleApplePodsTest : BaseAirPodsTest() { + + @Test + fun `test mapping`() = runBlockingTest { + create("07 19 01 05 20 00 F5 0F 01 01 00 6D CE C0 04 22 0A 85 31 2D 82 6B 42 80 01 20 1A") { + rawPrefix shouldBe 0x01.toUByte() + rawDeviceModel shouldBe 0x0520.toUShort() + rawStatus shouldBe 0x00.toUByte() + rawPodsBattery shouldBe 0xF5.toUByte() + rawCaseBattery shouldBe 0x0F.toUByte() + rawCaseLidState shouldBe 0x01.toUByte() + rawDeviceColor shouldBe 0x01.toUByte() + rawSuffix shouldBe 0x00.toUByte() + } + } + + @Test + fun `test battery headset percent`() = runBlockingTest { + create("07 19 01 05 20 00 F5 0F 01 01 00 6D CE C0 04 22 0A 85 31 2D 82 6B 42 80 01 20 1A") { + batteryHeadsetPercent shouldBe 0.5f + } + } + +} \ No newline at end of file diff --git a/app/src/test/java/eu/darken/capod/pods/core/apple/DualApplePodsTest.kt b/app/src/test/java/eu/darken/capod/pods/core/apple/DualApplePodsTest.kt new file mode 100644 index 00000000..461a0084 --- /dev/null +++ b/app/src/test/java/eu/darken/capod/pods/core/apple/DualApplePodsTest.kt @@ -0,0 +1,244 @@ +package eu.darken.capod.pods.core.apple + +import eu.darken.capod.pods.core.DualPodDevice +import io.kotest.matchers.shouldBe +import kotlinx.coroutines.test.runBlockingTest +import org.junit.jupiter.api.Test + +class DualApplePodsTest : BaseAirPodsTest() { + + @Test + fun `test bit mapping`() = runBlockingTest { + create("07 19 01 0E 20 54 AA B5 31 00 00 E0 0C A7 8A 60 4B D3 7D F4 60 4F 2C 73 E9 A7 F4") { + + rawPrefix shouldBe 0x01.toUByte() + rawDeviceModel shouldBe 0x0e20.toUShort() + rawStatus shouldBe 0x54.toUByte() + rawPodsBattery shouldBe 0xAA.toUByte() + rawCaseBattery shouldBe 0xB5.toUByte() + rawCaseLidState shouldBe 0x31.toUByte() + rawDeviceColor shouldBe 0x00.toUByte() + rawSuffix shouldBe 0x00.toUByte() + } + } + + @Test + fun `test AirPodDevice - active microphone`() = runBlockingTest { + create("07 19 01 0E 20 >2B< AA B5 31 00 00 E0 0C A7 8A 60 4B D3 7D F4 60 4F 2C 73 E9 A7 F4") { + // 00101011 + // --^----- + microPhonePod shouldBe DualPodDevice.Pod.LEFT + } + create("07 19 01 0E 20 >0B< AA B5 31 00 00 E0 0C A7 8A 60 4B D3 7D F4 60 4F 2C 73 E9 A7 F4") { + // 00001011 + // --^----- + microPhonePod shouldBe DualPodDevice.Pod.RIGHT + } + } + + @Test + fun `test AirPodDevice - left pod ear status`() = runBlockingTest { + // Left Pod primary + create("07 19 01 0E 20 >22< AA B5 31 00 00 E0 0C A7 8A 60 4B D3 7D F4 60 4F 2C 73 E9 A7 F4") { + // 00100010 + // 765432¹0 + isLeftPodInEar shouldBe true + } + create("07 19 01 0E 20 >20< AA B5 31 00 00 E0 0C A7 8A 60 4B D3 7D F4 60 4F 2C 73 E9 A7 F4") { + // 00100000 + // 765432¹0 + isLeftPodInEar shouldBe false + } + + // Right Pod is primary + create("07 19 01 0E 20 >09< AA B5 31 00 00 E0 0C A7 8A 60 4B D3 7D F4 60 4F 2C 73 E9 A7 F4") { + // 00001001 + // 7654³210 + isLeftPodInEar shouldBe true + } + create("07 19 01 0E 20 >20< AA B5 31 00 00 E0 0C A7 8A 60 4B D3 7D F4 60 4F 2C 73 E9 A7 F4") { + // 00000001 + // 7654³210 + isLeftPodInEar shouldBe false + } + } + + @Test + fun `test AirPodDevice - right pod ear status`() = runBlockingTest { + // Left Pod primary + create("07 19 01 0E 20 >29< AA B5 31 00 00 E0 0C A7 8A 60 4B D3 7D F4 60 4F 2C 73 E9 A7 F4") { + // 00101001 + // 7654³210 + isRightPodInEar shouldBe true + } + create("07 19 01 0E 20 >21< AA B5 31 00 00 E0 0C A7 8A 60 4B D3 7D F4 60 4F 2C 73 E9 A7 F4") { + // 00100001 + // 7654³210 + isRightPodInEar shouldBe false + } + + // Right Pod is primary + create("07 19 01 0E 20 >03< AA B5 31 00 00 E0 0C A7 8A 60 4B D3 7D F4 60 4F 2C 73 E9 A7 F4") { + // 00000011 + // 765432¹0 + isRightPodInEar shouldBe true + } + create("07 19 01 0E 20 >01< AA B5 31 00 00 E0 0C A7 8A 60 4B D3 7D F4 60 4F 2C 73 E9 A7 F4") { + // 00000001 + // 765432¹0 + isRightPodInEar shouldBe false + } + } + + @Test + fun `test AirPodDevice - battery status`() = runBlockingTest { + // Right Pod is primary + create("07 19 01 0E 20 0B >98< 94 52 00 05 09 73 3C 3D F9 2C 3E B3 DD 76 02 DD 4E 16 FD FB") { + // 88 10001000 + batteryLeftPodPercent shouldBe 0.9f + batteryRightPodPercent shouldBe 0.8f + } + // Left Pod primary + create("07 19 01 0E 20 2B >89< 94 52 00 05 09 73 3C 3D F9 2C 3E B3 DD 76 02 DD 4E 16 FD FB") { + // F8 11111000 + batteryLeftPodPercent shouldBe 0.9f + batteryRightPodPercent shouldBe 0.8f + } + } + + @Test + fun `test AirPodDevice - pod charging`() = runBlockingTest { + /** + * Right pod is charging + */ + // This is the left + create("07 19 01 0E 20 51 89 >94< 52 00 00 F4 89 82 6D 3E 27 7F 26 62 57 D0 E2 A6 49 E9 35") { + // 1001 0100 + isLeftPodCharging shouldBe false + isRightPodCharging shouldBe true + } + // This is the right + create("07 19 01 0E 20 31 98 >A4< 01 00 00 31 B9 A0 C4 80 CD D1 CF B9 3A 9A 6D 48 31 08 EB") { + // 1010 0100 + isLeftPodCharging shouldBe false + isRightPodCharging shouldBe true + } + + /** + * Left pod is charging + */ + // This is the left + create("07 19 01 0E 20 71 98 >94< 52 00 05 A5 37 31 B2 BD 42 68 0C 64 FD 00 99 4A E5 3E F4") { + // 1001 0100 + isLeftPodCharging shouldBe true + isRightPodCharging shouldBe false + } + // This is the right + create("07 19 01 0E 20 11 89 >A4< 04 00 04 BA 79 1B C0 65 69 C6 9F 19 6E 37 7D 6D 86 8D D9") { + // 1010 0100 + isLeftPodCharging shouldBe true + isRightPodCharging shouldBe false + } + + // Both charging + create("07 19 01 0E 20 55 88 >B4< 59 00 05 4B FC DF 68 28 A5 45 52 65 9C FE 51 86 3A B5 DB") { + // 1011 0100 + isLeftPodCharging shouldBe true + isRightPodCharging shouldBe true + } + // Both not charging + create("07 19 01 0E 20 00 F8 >8F< 03 00 05 4C 0F A0 C4 05 24 DD EB AF 92 99 FD 54 B1 06 48") { + // 1000 1111 + isLeftPodCharging shouldBe false + isRightPodCharging shouldBe false + } + } + + @Test + fun `test AirPodDevice - case charging`() = runBlockingTest { + create("07 19 01 0E 20 75 99 >B4< 31 00 05 77 C8 BA 0C 4E 1F BE AD 70 C5 40 71 D2 E9 17 A2") { + // 0011 0011 + isCaseCharging shouldBe false + } + create("07 19 01 0E 20 75 A9 >F4< 51 00 05 A0 37 92 35 49 79 CC DC 27 94 8E FB 72 12 94 52") { + // 0101 0011 + isCaseCharging shouldBe true + } + } + + @Test + fun `test AirPodDevice - case lid test`() = runBlockingTest { + // Lid open + create("07 19 01 0E 20 55 AA B4 >31< 00 00 A1 D0 BD 82 D3 52 86 CA FC 11 62 DC 42 C6 92 8E") { + // 31 0011 0001 + caseLidState shouldBe DualApplePods.LidState.OPEN + } + // Lid open, left pod in case + create("07 19 01 0E 20 51 9A 93 >31< 00 00 95 D0 A5 D7 E3 F4 F1 38 38 99 61 3B 57 95 37 B7") { + // 31 0011 0001 + caseLidState shouldBe DualApplePods.LidState.OPEN + } + // Lid open, left pod in case + create("07 19 01 0E 20 71 A9 92 31 00 00 DB 48 7F 32 8C CE 80 6F D9 27 98 D6 76 45 9D 62") { + // 31 0011 0001 + caseLidState shouldBe DualApplePods.LidState.OPEN + } + + + // Lid just closed + create("07 19 01 0E 20 55 AA B4 >39< 00 00 08 A6 DB 99 E0 5E 14 85 E5 C2 0B 68 D7 FF C3 A1") { + // 39 0011 1001 + caseLidState shouldBe DualApplePods.LidState.UNKNOWN + } + // Lid closed + create("07 19 01 0E 20 55 AA B4 38 00 00 F3 F7 08 3B 98 09 C0 DD E4 BD BD 84 55 56 8B 81") { + // 38 0011 1000 + caseLidState shouldBe DualApplePods.LidState.CLOSED + } + // Lid closed, right pod in case + create("07 19 01 0E 20 51 9A 93 >38< 00 00 3A D8 85 76 B0 91 48 31 DA FF 6C 4A 2B C2 67 F4") { + // 38 0011 1000 + caseLidState shouldBe DualApplePods.LidState.CLOSED + } + // Lid closed, left pod in case + create("07 19 01 0E 20 71 A9 92 38 00 00 44 91 C4 8B 85 98 DD 55 4E 6A CA BC B5 CA 8D 37") { + // 38 0011 1000 + caseLidState shouldBe DualApplePods.LidState.CLOSED + } + } + + @Test + fun `test AirPodDevice - connection state`() = runBlockingTest { + // Disconnected + create("07 19 01 0E 20 2B AA 8F 01 00 >00< 62 D4 BB F1 A7 F8 64 98 D2 C8 BD 7B 3A EF 2E 15") { + // 31 0011 0001 + connectionState shouldBe DualApplePods.ConnectionState.DISCONNECTED + } + // Connected idle + create("07 19 01 0E 20 2B AA 8F 01 00 >04< 1D 69 69 9C C2 51 F3 1F BF 6E 45 DA 90 4A A3 E3") { + // 39 0011 1001 + connectionState shouldBe DualApplePods.ConnectionState.IDLE + } + // Connected and playing music + create("07 19 01 0E 20 2B A9 8F 01 00 >05< 14 F7 CB 49 9F D3 B3 22 77 D2 22 F1 74 8C AC A6") { + // 38 0011 1000 + connectionState shouldBe DualApplePods.ConnectionState.MUSIC + } + // Connected and call active + create("07 19 01 0E 20 2B 99 8F 01 00 >06< 0F 4B 43 25 E0 4A 73 63 14 22 C2 3C 89 13 BD 97") { + // 38 0011 1000 + connectionState shouldBe DualApplePods.ConnectionState.CALL + } + // Connected and call active + create("07 19 01 0E 20 2B 99 8F 01 00 >07< E7 DF 76 44 85 B5 30 F4 95 14 02 DC A1 A4 8A 09") { + // 38 0011 1000 + connectionState shouldBe DualApplePods.ConnectionState.RINGING + } + // Switching? + create("07 19 01 0E 20 2B 99 8F 01 00 >09< 10 30 EE F3 41 B5 D8 9F A3 B0 B4 17 9F 85 97 5F") { + // 38 0011 1000 + connectionState shouldBe DualApplePods.ConnectionState.HANGING_UP + } + } + +} \ No newline at end of file diff --git a/app/src/test/java/eu/darken/capod/pods/core/apple/SingleApplePodsTest.kt b/app/src/test/java/eu/darken/capod/pods/core/apple/SingleApplePodsTest.kt new file mode 100644 index 00000000..714a2199 --- /dev/null +++ b/app/src/test/java/eu/darken/capod/pods/core/apple/SingleApplePodsTest.kt @@ -0,0 +1,36 @@ +package eu.darken.capod.pods.core.apple + +import eu.darken.capod.pods.core.apple.airpods.AirPodsMax +import io.kotest.matchers.shouldBe +import kotlinx.coroutines.test.runBlockingTest +import org.junit.jupiter.api.Test + +class SingleApplePodsTest : BaseAirPodsTest() { + + @Test + fun `default bit mapping Max`() = runBlockingTest { + create("07 19 01 0A 20 62 04 80 01 0F 40 0D 70 50 16 F2 40 83 16 BF 10 16 34 9B 74 84 E8") { + rawPrefix shouldBe 0x01.toUByte() + rawDeviceModel shouldBe 0x0A20.toUShort() + rawStatus shouldBe 0x62.toUByte() + rawPodsBattery shouldBe 0x04.toUByte() + rawCaseBattery shouldBe 0x80.toUByte() + rawCaseLidState shouldBe 0x01.toUByte() + rawDeviceColor shouldBe 0x0F.toUByte() + rawSuffix shouldBe 0x40.toUByte() + } + } + + @Test + fun `test values based on AirPodMax`() = runBlockingTest { + create("07 19 01 0A 20 02 05 80 04 0F 44 A7 60 9B F8 3C FD B1 D8 1C 61 EA 82 60 A3 2C 4E") { + batteryHeadsetPercent shouldBe 0.5f + + isCaseCharging shouldBe false + isHeadsetBeingCharged shouldBe false + + isHeadsetBeingWorn shouldBe true + batteryCasePercent shouldBe 0.0f + } + } +} \ No newline at end of file