From 302e690b44b044d4de9bb53f35a1b45afb7dfca6 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Mon, 12 May 2025 13:06:21 +0200 Subject: [PATCH] Add tests for LongExtension methods --- .../src/main/kotlin/openpgp/LongExtensions.kt | 2 +- .../org/pgpainless/key/util/KeyIdUtil.kt | 5 +-- .../test/java/openpgp/LongExtensionTest.java | 38 +++++++++++++++++++ 3 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 pgpainless-core/src/test/java/openpgp/LongExtensionTest.java diff --git a/pgpainless-core/src/main/kotlin/openpgp/LongExtensions.kt b/pgpainless-core/src/main/kotlin/openpgp/LongExtensions.kt index c6c318b3..c6f3039e 100644 --- a/pgpainless-core/src/main/kotlin/openpgp/LongExtensions.kt +++ b/pgpainless-core/src/main/kotlin/openpgp/LongExtensions.kt @@ -9,7 +9,7 @@ fun Long.openPgpKeyId(): String { return String.format("%016X", this).uppercase() } -/** Parse a Long form a 16 digit hex encoded OpenPgp key-ID. */ +/** Parse a Long from a 16 digit hex encoded OpenPgp key-ID. */ fun Long.Companion.fromOpenPgpKeyId(hexKeyId: String): Long { require("^[0-9A-Fa-f]{16}$".toRegex().matches(hexKeyId)) { "Provided long key-id does not match expected format. " + diff --git a/pgpainless-core/src/main/kotlin/org/pgpainless/key/util/KeyIdUtil.kt b/pgpainless-core/src/main/kotlin/org/pgpainless/key/util/KeyIdUtil.kt index 3f1b98b1..78ca75ff 100644 --- a/pgpainless-core/src/main/kotlin/org/pgpainless/key/util/KeyIdUtil.kt +++ b/pgpainless-core/src/main/kotlin/org/pgpainless/key/util/KeyIdUtil.kt @@ -17,10 +17,7 @@ class KeyIdUtil { * @param longKeyId 16-digit hexadecimal string * @return key-id converted to [Long]. */ - @JvmStatic - @Deprecated( - "Superseded by Long extension method.", ReplaceWith("Long.fromHexKeyId(longKeyId)")) - fun fromLongKeyId(longKeyId: String) = Long.fromOpenPgpKeyId(longKeyId) + @JvmStatic fun fromLongKeyId(longKeyId: String) = Long.fromOpenPgpKeyId(longKeyId) /** * Format a long key-ID as upper-case hex string. diff --git a/pgpainless-core/src/test/java/openpgp/LongExtensionTest.java b/pgpainless-core/src/test/java/openpgp/LongExtensionTest.java new file mode 100644 index 00000000..8f046968 --- /dev/null +++ b/pgpainless-core/src/test/java/openpgp/LongExtensionTest.java @@ -0,0 +1,38 @@ +// SPDX-FileCopyrightText: 2025 Paul Schaub +// +// SPDX-License-Identifier: Apache-2.0 + +package openpgp; + +import org.junit.jupiter.api.Test; +import org.pgpainless.key.util.KeyIdUtil; + +import java.util.Random; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +public class LongExtensionTest { + + private final Random random = new Random(); + + @Test + public void testFromOpenPGPKeyId() { + long id = random.nextLong(); + String hexId = LongExtensionsKt.openPgpKeyId(id); + assertEquals(16, hexId.length()); + // Calling companion object extension methods from java is tricky. + // KeyIdUtil delegates to Long.Companion extension method though. + long parsed = KeyIdUtil.fromLongKeyId(hexId); + assertEquals(id, parsed, "Long MUST still match after converting to hex and back."); + } + + @Test + public void testParsingMalformedHexIdFails() { + assertThrows(IllegalArgumentException.class, () -> + KeyIdUtil.fromLongKeyId("00"), + "Hex encoding is too short, expect 16 chars.");assertThrows(IllegalArgumentException.class, () -> + KeyIdUtil.fromLongKeyId("00010203040506XX"), + "Hex encoding contains non-hex chars."); + } +}