From bcca42880313fc2da208db875025854eb3617414 Mon Sep 17 00:00:00 2001 From: Jasper Potts <1466205+jasperpotts@users.noreply.github.com> Date: Thu, 13 Jul 2023 16:51:52 -0700 Subject: [PATCH] 70 bad encoding new line char str (#71) Signed-off-by: jasperpotts Co-authored-by: jasperpotts --- .../hedera/pbj/runtime/ProtoWriterTools.java | 2 +- .../com/hedera/pbj/runtime/Utf8ToolsTest.java | 48 +++++++++++++++++++ .../ExtendedUtf8MessageWithStringTest.java | 1 + 3 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 pbj-core/pbj-runtime/src/test/java/com/hedera/pbj/runtime/Utf8ToolsTest.java diff --git a/pbj-core/pbj-runtime/src/main/java/com/hedera/pbj/runtime/ProtoWriterTools.java b/pbj-core/pbj-runtime/src/main/java/com/hedera/pbj/runtime/ProtoWriterTools.java index cf11a036..0f3c6d2e 100644 --- a/pbj-core/pbj-runtime/src/main/java/com/hedera/pbj/runtime/ProtoWriterTools.java +++ b/pbj-core/pbj-runtime/src/main/java/com/hedera/pbj/runtime/ProtoWriterTools.java @@ -1035,7 +1035,7 @@ public static int sizeOfString(FieldDefinition field, String value) { */ private static int sizeOfStringNoTag(FieldDefinition field, String value) { // When not a oneOf don't write default value - if (!field.oneOf() && (value == null || value.isBlank())) { + if (!field.oneOf() && (value == null || value.isEmpty())) { return 0; } try { diff --git a/pbj-core/pbj-runtime/src/test/java/com/hedera/pbj/runtime/Utf8ToolsTest.java b/pbj-core/pbj-runtime/src/test/java/com/hedera/pbj/runtime/Utf8ToolsTest.java new file mode 100644 index 00000000..25c9d4ff --- /dev/null +++ b/pbj-core/pbj-runtime/src/test/java/com/hedera/pbj/runtime/Utf8ToolsTest.java @@ -0,0 +1,48 @@ +package com.hedera.pbj.runtime; + +import com.hedera.pbj.runtime.io.buffer.BufferedData; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.HexFormat; +import java.util.stream.Stream; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class Utf8ToolsTest { + private static Stream provideStringsAndLengths() { + return Stream.of( + Arguments.of("", 0), + Arguments.of(" ", 1), + Arguments.of("a", 1), + Arguments.of("\n", 1), + Arguments.of("not blank", 9) + ); + } + @ParameterizedTest + @MethodSource("provideStringsAndLengths") + void encodedLength(String testStr, int expectedLength) { + assertEquals(expectedLength, assertDoesNotThrow(() -> Utf8Tools.encodedLength(testStr))); + assertEquals(testStr.getBytes(StandardCharsets.UTF_8).length, assertDoesNotThrow(() -> Utf8Tools.encodedLength(testStr))); + } + + @ParameterizedTest + @MethodSource("provideStringsAndLengths") + void encodeUtf8(String testStr, int expectedLength) { + BufferedData bufferedData = BufferedData.allocate(1024); + try { + Utf8Tools.encodeUtf8(testStr, bufferedData); + } catch (IOException e) { + throw new RuntimeException(e); + } + bufferedData.flip(); + byte[] bytes = new byte[(int)bufferedData.length()]; + bufferedData.getBytes(0, bytes); + assertEquals(HexFormat.of().formatHex(testStr.getBytes(StandardCharsets.UTF_8)), HexFormat.of().formatHex(bytes)); + assertEquals(expectedLength, bytes.length); + } +} diff --git a/pbj-integration-tests/src/test/java/com/hedera/pbj/intergration/test/ExtendedUtf8MessageWithStringTest.java b/pbj-integration-tests/src/test/java/com/hedera/pbj/intergration/test/ExtendedUtf8MessageWithStringTest.java index 72dda116..2f417889 100644 --- a/pbj-integration-tests/src/test/java/com/hedera/pbj/intergration/test/ExtendedUtf8MessageWithStringTest.java +++ b/pbj-integration-tests/src/test/java/com/hedera/pbj/intergration/test/ExtendedUtf8MessageWithStringTest.java @@ -217,6 +217,7 @@ public static Stream> createModelTestArgume "", "Dude", "©«", + "\n", "I need some HBAR to run work on Hedera!", "I need some ℏ to run work on Hedera!", SAMPLE_TEXT_BLOCK,