diff --git a/example/src/main/java/Main.java b/example/src/main/java/Main.java index 728d195..1d1fd87 100644 --- a/example/src/main/java/Main.java +++ b/example/src/main/java/Main.java @@ -46,6 +46,7 @@ public class Main extends Application { ImGui.sameLine(); ImGui.text(String.valueOf(count)); ImGui.inputText("string", str, ImGuiInputTextFlags.CallbackResize); + ImGui.text("Result: " + str.get()); ImGui.sliderFloat("float", flt, 0, 1); ImGui.separator(); ImGui.text("Extra"); diff --git a/imgui-binding/src/main/java/imgui/type/ImString.java b/imgui-binding/src/main/java/imgui/type/ImString.java index 65640e7..e4c800e 100644 --- a/imgui-binding/src/main/java/imgui/type/ImString.java +++ b/imgui-binding/src/main/java/imgui/type/ImString.java @@ -81,8 +81,16 @@ public final class ImString implements Cloneable { return data; } + public void set(final Object object) { + set(String.valueOf(object)); + } + public void set(final ImString value) { - set(value.get()); + set(value.get(), true); + } + + public void set(final ImString value, final boolean resize) { + set(value.get(), resize); } public void set(final String value) { @@ -94,17 +102,17 @@ public final class ImString implements Cloneable { } public void set(final String value, final boolean resize, final int resizeValue) { - final byte[] valueBuff = (value == null ? "null" : value).getBytes(); + final byte[] valueBuff = (value == null ? "null" : value).getBytes(StandardCharsets.UTF_8); final int currentLen = data == null ? 0 : data.length; byte[] newBuff = null; - // If provided value require a bigger buffer and we can resize it + // If provided value requires a bigger buffer and we can resize it if (resize && (currentLen - CARET_LEN) < valueBuff.length) { newBuff = new byte[valueBuff.length + resizeValue + CARET_LEN]; inputData.size = valueBuff.length; } - // If there were no resize and we still need a new buffer + // If there was no resize, so we still need a new buffer if (newBuff == null) { newBuff = new byte[currentLen]; inputData.size = Math.max(0, Math.min(valueBuff.length, currentLen - CARET_LEN)); diff --git a/imgui-binding/src/test/java/imgui/ImStringTest.java b/imgui-binding/src/test/java/imgui/ImStringTest.java index 78ee229..318f5ef 100644 --- a/imgui-binding/src/test/java/imgui/ImStringTest.java +++ b/imgui-binding/src/test/java/imgui/ImStringTest.java @@ -32,28 +32,60 @@ class ImStringTest { } @Test - public void testSet() { + public void testSetWhenEmpty() { final ImString str = new ImString(3); assertEquals("", str.get()); assertEquals(0, str.getLength()); assertEquals(3 + 1, str.getBufferSize()); + } + @Test + public void testSetWhenNotResized() { + final ImString str = new ImString(3); str.set("test"); assertEquals("tes", str.get()); assertEquals(3, str.getLength()); assertEquals(3 + 1, str.getBufferSize()); + } + @Test + public void testSetWhenResizedWithZeroResizeValue() { + final ImString str = new ImString(3); str.set("test", true, 0); assertEquals("test", str.get()); assertEquals(4, str.getLength()); assertEquals(4 + 1, str.getBufferSize()); + } + @Test + public void testSetWhenResized() { + final ImString str = new ImString(3); str.set("0123456789", true); assertEquals("0123456789", str.get()); assertEquals(10, str.getLength()); assertEquals(10 + str.inputData.resizeFactor + 1, str.getBufferSize()); + } - str.set(null); + @Test + public void testSetWhenNullObject() { + final ImString str = new ImString(); + final Object object = null; + str.set(object); assertEquals("null", str.get()); } + + @Test + public void testSetWhenImString() { + final ImString str = new ImString(); + final ImString string = new ImString("test"); + str.set(string); + assertEquals("test", str.get()); + } + + @Test + public void testSetWhenNumber() { + final ImString str = new ImString(); + str.set(123); + assertEquals("123", str.get()); + } }