fix(serialize): prevent unnecessary popping from stack when reading legal number
ci/woodpecker/push/woodpecker Pipeline was successful
Details
ci/woodpecker/push/woodpecker Pipeline was successful
Details
This commit is contained in:
parent
38a54455d7
commit
d1343208a3
|
@ -206,7 +206,6 @@ public class EmulatedReader extends SerializeReader<MalformedDataException, Emul
|
||||||
if (!(popStack() instanceof DataElement.Primitive.Number result)) {
|
if (!(popStack() instanceof DataElement.Primitive.Number result)) {
|
||||||
throw new IllegalStateException("Expected a number");
|
throw new IllegalStateException("Expected a number");
|
||||||
}
|
}
|
||||||
popStack();
|
|
||||||
if (stackSize > 0) {
|
if (stackSize > 0) {
|
||||||
pathIndices[stackSize - 1]++;
|
pathIndices[stackSize - 1]++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,80 @@
|
||||||
|
package io.gitlab.jfronny.commons.serialize.test;
|
||||||
|
|
||||||
|
import io.gitlab.jfronny.commons.serialize.MalformedDataException;
|
||||||
|
import io.gitlab.jfronny.commons.serialize.Token;
|
||||||
|
import io.gitlab.jfronny.commons.serialize.emulated.DataElement;
|
||||||
|
import io.gitlab.jfronny.commons.serialize.emulated.EmulatedReader;
|
||||||
|
import io.gitlab.jfronny.commons.serialize.emulated.EmulatedWriter;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
public class EmulatedReaderTest {
|
||||||
|
@Test
|
||||||
|
public void testSimple() throws MalformedDataException {
|
||||||
|
DataElement.Object del = new DataElement.Object();
|
||||||
|
del.members().put("type", new DataElement.Primitive.String("boolean"));
|
||||||
|
del.members().put("default", new DataElement.Primitive.Boolean(true));
|
||||||
|
del.members().put("reloadType", new DataElement.Primitive.String("Simple"));
|
||||||
|
EmulatedReader er = new EmulatedReader(del);
|
||||||
|
assertEquals(Token.BEGIN_OBJECT, er.peek());
|
||||||
|
er.beginObject();
|
||||||
|
assertEquals(Token.NAME, er.peek());
|
||||||
|
assertEquals("type", er.nextName());
|
||||||
|
assertEquals(Token.STRING, er.peek());
|
||||||
|
assertEquals("boolean", er.nextString());
|
||||||
|
assertEquals(Token.NAME, er.peek());
|
||||||
|
assertEquals("default", er.nextName());
|
||||||
|
assertEquals(Token.BOOLEAN, er.peek());
|
||||||
|
assertTrue(er.nextBoolean());
|
||||||
|
assertEquals(Token.NAME, er.peek());
|
||||||
|
assertEquals("reloadType", er.nextName());
|
||||||
|
assertEquals(Token.STRING, er.peek());
|
||||||
|
assertEquals("Simple", er.nextString());
|
||||||
|
assertEquals(Token.END_OBJECT, er.peek());
|
||||||
|
er.endObject();
|
||||||
|
assertEquals(Token.END_DOCUMENT, er.peek());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSimpleWithoutPeek() throws MalformedDataException {
|
||||||
|
DataElement.Object del = new DataElement.Object();
|
||||||
|
del.members().put("type", new DataElement.Primitive.String("boolean"));
|
||||||
|
del.members().put("default", new DataElement.Primitive.Boolean(true));
|
||||||
|
del.members().put("reloadType", new DataElement.Primitive.String("Simple"));
|
||||||
|
EmulatedReader er = new EmulatedReader(del);
|
||||||
|
er.beginObject();
|
||||||
|
assertEquals("type", er.nextName());
|
||||||
|
assertEquals("boolean", er.nextString());
|
||||||
|
assertEquals("default", er.nextName());
|
||||||
|
assertTrue(er.nextBoolean());
|
||||||
|
assertEquals("reloadType", er.nextName());
|
||||||
|
assertEquals("Simple", er.nextString());
|
||||||
|
er.endObject();
|
||||||
|
assertEquals(Token.END_DOCUMENT, er.peek());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testTransfer() throws MalformedDataException {
|
||||||
|
DataElement.Object del = new DataElement.Object();
|
||||||
|
del.members().put("type", new DataElement.Primitive.String("boolean"));
|
||||||
|
del.members().put("default", new DataElement.Primitive.Boolean(true));
|
||||||
|
del.members().put("reloadType", new DataElement.Primitive.String("Simple"));
|
||||||
|
del.members().put("joe", new DataElement.Primitive.Number(12));
|
||||||
|
EmulatedReader er = new EmulatedReader(del);
|
||||||
|
EmulatedWriter ew = new EmulatedWriter();
|
||||||
|
er.beginObject();
|
||||||
|
ew.beginObject();
|
||||||
|
String type = null;
|
||||||
|
while (er.hasNext()) {
|
||||||
|
String key;
|
||||||
|
ew.name(key = er.nextName());
|
||||||
|
if (key.equals("type")) ew.value(type = er.nextString());
|
||||||
|
else er.copyTo(ew);
|
||||||
|
}
|
||||||
|
er.endObject();
|
||||||
|
ew.endObject();
|
||||||
|
assertEquals(del, ew.get());
|
||||||
|
assertEquals("boolean", type);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue