Skip to content

Commit f59e5ce

Browse files
committed
[java] Adding more tests for json reader to increase coverage before applying a PR
1 parent ffb0c7a commit f59e5ce

File tree

1 file changed

+45
-5
lines changed

1 file changed

+45
-5
lines changed

java/client/test/org/openqa/selenium/json/JsonInputTest.java

+45-5
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@
3737

3838
import java.io.StringReader;
3939
import java.util.Map;
40+
import java.util.Random;
41+
import java.util.stream.Collectors;
42+
import java.util.stream.Stream;
4043

4144
@Category(UnitTests.class)
4245
public class JsonInputTest {
@@ -80,6 +83,15 @@ public void shouldBeAbleToReadAString() {
8083
assertThat(input.nextString()).isEqualTo("cheese");
8184
}
8285

86+
@Test
87+
public void shouldBeAbleToHandleAnUnterminatedString() {
88+
JsonInput input = newInput("\"cheese");
89+
assertThat(input.peek()).isEqualTo(STRING);
90+
assertThatExceptionOfType(JsonException.class)
91+
.isThrownBy(input::nextString)
92+
.withMessageStartingWith("Unterminated string");
93+
}
94+
8395
@Test
8496
public void shouldBeAbleToReadTheEmptyString() {
8597
JsonInput input = newInput("\"\"");
@@ -121,7 +133,7 @@ public void anArrayWithMultipleElementsReturnsTrueFromHasNextMoreThanOnce() {
121133
public void callingHasNextWhenNotInAnArrayOrMapIsAnError() {
122134
JsonInput input = newInput("\"cheese\"");
123135
assertThatExceptionOfType(JsonException.class)
124-
.isThrownBy(input::hasNext);
136+
.isThrownBy(input::hasNext);
125137
}
126138

127139
@Test
@@ -149,10 +161,12 @@ public void canReadAMapWithASingleEntry() {
149161

150162
@Test
151163
public void canReadAMapWithManyEntries() {
152-
JsonInput input = newInput("{" +
153-
"\"cheese\": \"stilton\"," +
154-
"\"vegetable\": \"peas\"," +
155-
"\"random\": 42}");
164+
JsonInput input = newInput(
165+
"{"
166+
+ "\"cheese\": \"stilton\","
167+
+ "\"vegetable\": \"peas\","
168+
+ "\"random\": 42"
169+
+ "}");
156170

157171
assertThat(input.peek()).isEqualTo(START_MAP);
158172
input.beginObject();
@@ -218,6 +232,32 @@ public void shouldCallFromJsonWithJsonInputParameter() {
218232
}
219233
}
220234

235+
@Test
236+
public void shouldBeAbleToReadDataLongerThanReadBuffer() {
237+
char[] chars = new char[]{'c', 'h', 'e', 's'};
238+
Random r = new Random();
239+
String raw = Stream.generate(() -> "" + chars[r.nextInt(4)])
240+
.limit(150).collect(Collectors.joining());
241+
JsonInput input = newInput("\"" + raw + "\"");
242+
assertThat(input.peek()).isEqualTo(STRING);
243+
assertThat(input.nextString()).isEqualTo(raw);
244+
}
245+
246+
@Test
247+
public void shouldBeAbleToReadNonWellFormedDataLongerThanReadBuffer() {
248+
char[] chars = new char[]{'c', 'h', 'e', 's'};
249+
Random r = new Random();
250+
String raw = Stream.generate(() -> "" + chars[r.nextInt(4)])
251+
.limit(150).collect(Collectors.joining());
252+
JsonInput input = newInput("\"" + raw);
253+
assertThat(input.peek()).isEqualTo(STRING);
254+
assertThatExceptionOfType(JsonException.class)
255+
.isThrownBy(input::nextString)
256+
.withMessageStartingWith(String.format(
257+
"Unterminated string: %s. Last 128 characters read: %s",
258+
raw, raw.substring(raw.length() - 128)));
259+
}
260+
221261
private JsonInput newInput(String raw) {
222262
StringReader reader = new StringReader(raw);
223263
return new JsonInput(reader, new JsonTypeCoercer(), BY_NAME);

0 commit comments

Comments
 (0)