From 0753fcc228daf94c9b7b300e383b460bb50a404d Mon Sep 17 00:00:00 2001 From: EuiSeong Date: Fri, 8 May 2026 16:30:10 +0900 Subject: [PATCH] Fix : MapAdapter to serialize Long keys as integer instead of string --- .../com/marcospassos/phpserializer/Writer.java | 15 +++++++++++++++ .../phpserializer/adapter/MapAdapter.java | 5 ++++- .../phpserializer/adapter/MapAdapterTest.java | 15 +++++++++++---- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/marcospassos/phpserializer/Writer.java b/src/main/java/com/marcospassos/phpserializer/Writer.java index 872e04f..45a54a4 100755 --- a/src/main/java/com/marcospassos/phpserializer/Writer.java +++ b/src/main/java/com/marcospassos/phpserializer/Writer.java @@ -3,6 +3,7 @@ import java.lang.reflect.Modifier; import java.nio.charset.Charset; + import com.marcospassos.phpserializer.state.FinishedState; import com.marcospassos.phpserializer.state.WritingValueState; @@ -356,6 +357,20 @@ public void writeKey(int index) buffer.append(';'); } + /** + * Writes the key of an array entry to the buffer. + * + * @param index The key of the array entry. + */ + public void writeKey(long index) + { + setState(state.key()); + + buffer.append("i:"); + buffer.append(index); + buffer.append(';'); + } + /** * Writes the key of an array entry to the buffer. * diff --git a/src/main/java/com/marcospassos/phpserializer/adapter/MapAdapter.java b/src/main/java/com/marcospassos/phpserializer/adapter/MapAdapter.java index 90fa259..ab2b9d3 100755 --- a/src/main/java/com/marcospassos/phpserializer/adapter/MapAdapter.java +++ b/src/main/java/com/marcospassos/phpserializer/adapter/MapAdapter.java @@ -1,6 +1,7 @@ package com.marcospassos.phpserializer.adapter; import java.util.Map; + import com.marcospassos.phpserializer.Context; import com.marcospassos.phpserializer.TypeAdapter; import com.marcospassos.phpserializer.Writer; @@ -27,7 +28,9 @@ public void write(Map map, Writer writer, Context context) Object key = entry.getKey(); if (key instanceof Integer) { - writer.writeKey((Integer) key); + writer.writeKey((int) key); + } else if (key instanceof Long) { + writer.writeKey((long) key); } else { writer.writeKey(key.toString()); } diff --git a/src/test/java/com/marcospassos/phpserializer/adapter/MapAdapterTest.java b/src/test/java/com/marcospassos/phpserializer/adapter/MapAdapterTest.java index a62178e..94738c3 100755 --- a/src/test/java/com/marcospassos/phpserializer/adapter/MapAdapterTest.java +++ b/src/test/java/com/marcospassos/phpserializer/adapter/MapAdapterTest.java @@ -2,14 +2,15 @@ import java.util.HashMap; import java.util.Map; -import com.marcospassos.phpserializer.Context; -import com.marcospassos.phpserializer.Writer; + import org.junit.Test; import org.mockito.InOrder; - import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.mock; +import com.marcospassos.phpserializer.Context; +import com.marcospassos.phpserializer.Writer; + /** * @author Marcos Passos * @since 1.0 @@ -26,6 +27,7 @@ public void write() throws Exception map.put(1, "a"); map.put("2", "b"); map.put(3, "c"); + map.put(4L, "d"); // The verify check is split by entries once HashMap is an unordered map @@ -33,7 +35,7 @@ public void write() throws Exception InOrder order = inOrder(writer, context); - order.verify(writer).writeArrayStart(3); + order.verify(writer).writeArrayStart(4); InOrder first = inOrder(writer, context); @@ -50,6 +52,11 @@ public void write() throws Exception third.verify(writer).writeKey(3); third.verify(context).write("c", writer); + InOrder fourth = inOrder(writer, context); + + fourth.verify(writer).writeKey(4L); + fourth.verify(context).write("d", writer); + order.verify(writer).writeArrayEnd(); order.verifyNoMoreInteractions();