Skip to content

Commit

Permalink
fix generating random strings
Browse files Browse the repository at this point in the history
  • Loading branch information
piotrrzysko committed Apr 25, 2024
1 parent 3ecbf92 commit cd7a1e8
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 23 deletions.
4 changes: 2 additions & 2 deletions src/test/java/org/simdjson/StringParsingTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public class StringParsingTest {

@ParameterizedTest
@RandomStringSource
public void stringAtRoot(String jsonStr) {
public void stringAtRoot(String jsonStr, String expected) {
// given
SimdJsonParser parser = new SimdJsonParser();
byte[] json = toUtf8("\"" + jsonStr + "\"");
Expand All @@ -31,7 +31,7 @@ public void stringAtRoot(String jsonStr) {
JsonValue jsonValue = parser.parse(json, json.length);

// then
assertThat(jsonValue).isEqualTo(jsonStr);
assertThat(jsonValue).isEqualTo(expected);
}

@ParameterizedTest
Expand Down
33 changes: 16 additions & 17 deletions src/test/java/org/simdjson/StringSchemaBasedParsingTest.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package org.simdjson;

import org.apache.commons.text.StringEscapeUtils;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
Expand Down Expand Up @@ -48,10 +47,10 @@ public void emptyStringAtRoot() {

@ParameterizedTest
@RandomStringSource
public void stringAtRoot(String expected) {
public void stringAtRoot(String jsonStr, String expected) {
// given
SimdJsonParser parser = new SimdJsonParser();
byte[] json = toUtf8("\"" + expected + "\"");
byte[] json = toUtf8("\"" + jsonStr + "\"");

// when
String string = parser.parse(json, json.length, String.class);
Expand Down Expand Up @@ -139,10 +138,10 @@ public void emptyStringAtObjectField() {

@ParameterizedTest
@RandomStringSource
public void stringAtObjectField(String expected) {
public void stringAtObjectField(String jsonStr, String expected) {
// given
SimdJsonParser parser = new SimdJsonParser();
byte[] json = toUtf8("{\"field\": \"" + expected + "\"}");
byte[] json = toUtf8("{\"field\": \"" + jsonStr + "\"}");

// when
RecordWithStringField object = parser.parse(json, json.length, RecordWithStringField.class);
Expand Down Expand Up @@ -247,32 +246,32 @@ public void unicodeCharactersReservedForLowSurrogateAsString() {

@ParameterizedTest
@RandomStringSource(maxChars = 1)
public void characterAtRoot(String expected) {
public void characterAtRoot(String jsonStr, Character expected) {
// given
SimdJsonParser parser = new SimdJsonParser();
byte[] json = toUtf8("\"" + expected + "\"");
byte[] json = toUtf8("\"" + jsonStr + "\"");

// when
Character character = parser.parse(json, json.length, Character.class);

// then
assertThat(character)
.isEqualTo(StringEscapeUtils.unescapeJava(expected).charAt(0));
.isEqualTo(expected);
}

@ParameterizedTest
@RandomStringSource(maxChars = 1)
public void primitiveCharAtRoot(String expected) {
public void primitiveCharAtRoot(String jsonStr, char expected) {
// given
SimdJsonParser parser = new SimdJsonParser();
byte[] json = toUtf8("\"" + expected + "\"");
byte[] json = toUtf8("\"" + jsonStr + "\"");

// when
char character = parser.parse(json, json.length, char.class);

// then
assertThat(character)
.isEqualTo(StringEscapeUtils.unescapeJava(expected).charAt(0));
.isEqualTo(expected);
}

@Test
Expand Down Expand Up @@ -334,17 +333,17 @@ public void typeOtherThanPrimitiveCharacterAtRoot(String jsonStr) {

@ParameterizedTest
@RandomStringSource(maxChars = 1)
public void characterAtObjectField(String expected) {
public void characterAtObjectField(String jsonStr, Character expected) {
// given
SimdJsonParser parser = new SimdJsonParser();
byte[] json = toUtf8("{\"field\": \"" + expected + "\"}");
byte[] json = toUtf8("{\"field\": \"" + jsonStr + "\"}");

// when
RecordWithCharacterField object = parser.parse(json, json.length, RecordWithCharacterField.class);

// then
assertThat(object.field())
.isEqualTo(StringEscapeUtils.unescapeJava(expected).charAt(0));
.isEqualTo(expected);
}

@Test
Expand All @@ -362,17 +361,17 @@ public void nullAtObjectFieldWhenCharacterIsExpected() {

@ParameterizedTest
@RandomStringSource(maxChars = 1)
public void primitiveCharAtObjectField(String expected) {
public void primitiveCharAtObjectField(String jsonStr, char expected) {
// given
SimdJsonParser parser = new SimdJsonParser();
byte[] json = toUtf8("{\"field\": \"" + expected + "\"}");
byte[] json = toUtf8("{\"field\": \"" + jsonStr + "\"}");

// when
RecordWithPrimitiveCharacterField object = parser.parse(json, json.length, RecordWithPrimitiveCharacterField.class);

// then
assertThat(object.field())
.isEqualTo(StringEscapeUtils.unescapeJava(expected).charAt(0));
.isEqualTo(expected);
}

@Test
Expand Down
20 changes: 18 additions & 2 deletions src/test/java/org/simdjson/testutils/RandomStringProvider.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.simdjson.testutils;

import org.apache.commons.text.StringEscapeUtils;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.ArgumentsProvider;
Expand Down Expand Up @@ -35,8 +36,23 @@ public void accept(RandomStringSource randomStringSource) {

@Override
public Stream<? extends Arguments> provideArguments(ExtensionContext context) {
Class<?>[] parameterTypes = context.getRequiredTestMethod().getParameterTypes();
if (parameterTypes.length != 2) {
throw new IllegalArgumentException("Test method should have two arguments: an input string and an expected value.");
}
if (parameterTypes[0] != String.class) {
throw new IllegalArgumentException("The first argument must be a String.");
}
if (parameterTypes[1] != String.class && parameterTypes[1] != Character.class && parameterTypes[1] != char.class) {
throw new IllegalArgumentException("The second argument must be either a String, Character, or char.");
}
return IntStream.range(0, count)
.mapToObj(i -> StringTestData.randomString(minChars, maxChars))
.map(Arguments::of);
.mapToObj(i -> {
String jsonStr = StringTestData.randomString(minChars, maxChars);
if (parameterTypes[1] == String.class) {
return Arguments.of(jsonStr, StringEscapeUtils.unescapeJson(jsonStr));
}
return Arguments.of(jsonStr, StringEscapeUtils.unescapeJson(jsonStr).charAt(0));
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -56,10 +56,10 @@ public void accept(SchemaBasedRandomValueSource schemaBasedRandomValueSource) {

@Override
public Stream<? extends Arguments> provideArguments(ExtensionContext context) {
Class<?>[] parameterTypes = context.getRequiredTestMethod().getParameterTypes();
return Arrays.stream(schemas)
.map(schema -> {
GeneratedElement expected = generate(schema, schema);
Class<?>[] parameterTypes = context.getRequiredTestMethod().getParameterTypes();
Object[] args = new Object[parameterTypes.length];
for (int i = 0; i < args.length; i++) {
if (parameterTypes[i] == Class.class) {
Expand Down Expand Up @@ -194,7 +194,7 @@ private GeneratedElement generatePrimitive(Type elementType) {
}
if (elementType == String.class) {
String element = StringTestData.randomString(1, 50);
return new GeneratedElement(StringEscapeUtils.unescapeJava(element), "\"" + element + "\"");
return new GeneratedElement(StringEscapeUtils.unescapeJson(element), "\"" + element + "\"");
}
if (elementType == Character.class || elementType == char.class) {
String element = StringTestData.randomString(1, 1);
Expand Down

0 comments on commit cd7a1e8

Please sign in to comment.