diff --git a/cache/src/main/java/net/runelite/cache/io/OutputStream.java b/cache/src/main/java/net/runelite/cache/io/OutputStream.java index 6f10df2498..751905f4fb 100644 --- a/cache/src/main/java/net/runelite/cache/io/OutputStream.java +++ b/cache/src/main/java/net/runelite/cache/io/OutputStream.java @@ -26,6 +26,7 @@ package net.runelite.cache.io; import com.google.common.base.Preconditions; import java.io.IOException; +import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; public final class OutputStream extends java.io.OutputStream @@ -180,7 +181,15 @@ public final class OutputStream extends java.io.OutputStream public void writeString(String str) { - byte[] b = str.getBytes(); + byte[] b; + try + { + b = str.getBytes("ISO-8859-1"); + } + catch (UnsupportedEncodingException ex) + { + throw new RuntimeException(ex); + } writeBytes(b); writeByte(0); } diff --git a/cache/src/test/java/net/runelite/cache/definitions/savers/ScriptSaverTest.java b/cache/src/test/java/net/runelite/cache/definitions/savers/ScriptSaverTest.java index a4a5ca1b6a..447b392ae3 100644 --- a/cache/src/test/java/net/runelite/cache/definitions/savers/ScriptSaverTest.java +++ b/cache/src/test/java/net/runelite/cache/definitions/savers/ScriptSaverTest.java @@ -39,6 +39,7 @@ import org.junit.Test; public class ScriptSaverTest { private static final String SCRIPT_RESOURCE = "/net/runelite/cache/script/assembler/91.rs2asm"; + private static final String SCRIPT_RESOURCE_UNICODE = "/net/runelite/cache/script/assembler/Unicode.rs2asm"; @Test public void testSave() throws IOException @@ -51,4 +52,15 @@ public class ScriptSaverTest assertEquals(script, loadedScripot); } + @Test + public void testSaveUnicode() throws IOException + { + Instructions instructions = new Instructions(); + instructions.init(); + ScriptDefinition script = new Assembler(instructions).assemble(getClass().getResourceAsStream(SCRIPT_RESOURCE_UNICODE)); + byte[] saved = new ScriptSaver().save(script); + ScriptDefinition loadedScripot = new ScriptLoader().load(42, saved); + assertEquals(script, loadedScripot); + } + } diff --git a/cache/src/test/java/net/runelite/cache/io/OutputStreamTest.java b/cache/src/test/java/net/runelite/cache/io/OutputStreamTest.java index 29dd902168..42bbc238bb 100644 --- a/cache/src/test/java/net/runelite/cache/io/OutputStreamTest.java +++ b/cache/src/test/java/net/runelite/cache/io/OutputStreamTest.java @@ -24,7 +24,7 @@ */ package net.runelite.cache.io; -import org.junit.Assert; +import static org.junit.Assert.assertEquals; import org.junit.Test; public class OutputStreamTest @@ -38,9 +38,22 @@ public class OutputStreamTest os.writeBigSmart(65535); InputStream is = new InputStream(os.getArray()); - Assert.assertEquals(42, is.readBigSmart()); - Assert.assertEquals(70000, is.readBigSmart()); - Assert.assertEquals(65535, is.readBigSmart()); + assertEquals(42, is.readBigSmart()); + assertEquals(70000, is.readBigSmart()); + assertEquals(65535, is.readBigSmart()); + } + + @Test + public void testWriteString() + { + char[] c = new char[]{32, 160}; + String str = new String(c, 0, c.length); + + OutputStream os = new OutputStream(); + os.writeString(str); + + // 1 byte length + 32 + 160 + assertEquals(3, os.getOffset()); } } diff --git a/cache/src/test/java/net/runelite/cache/script/assembler/AssemblerTest.java b/cache/src/test/java/net/runelite/cache/script/assembler/AssemblerTest.java index 819937cfb7..0e5dccd4f1 100644 --- a/cache/src/test/java/net/runelite/cache/script/assembler/AssemblerTest.java +++ b/cache/src/test/java/net/runelite/cache/script/assembler/AssemblerTest.java @@ -52,7 +52,8 @@ public class AssemblerTest return new String[] { "91.rs2asm", - "681.rs2asm" + "681.rs2asm", + "Unicode.rs2asm" }; } diff --git a/cache/src/test/resources/net/runelite/cache/script/assembler/Unicode.rs2asm b/cache/src/test/resources/net/runelite/cache/script/assembler/Unicode.rs2asm new file mode 100644 index 0000000000..7a10d7ccec --- /dev/null +++ b/cache/src/test/resources/net/runelite/cache/script/assembler/Unicode.rs2asm @@ -0,0 +1,6 @@ +.int_stack_count 0 +.string_stack_count 0 +.int_var_count 0 +.string_var_count 0 + load_string ": " + return