@Override public BatchStream pause() { recordParser.pause(); return this; }
@Override public BatchStream resume() { recordParser.resume(); return this; }
@Override public BatchStream endHandler(Handler<Void> endHandler) { recordParser.endHandler(endHandler); return this; } }
@Test public void testStreamFetch() { FakeStream stream = new FakeStream(); JsonParser parser = JsonParser.newParser(stream); List<JsonEvent> events = new ArrayList<>(); parser.handler(events::add); parser.pause(); stream.handle("{}"); parser.fetch(1); assertEquals(1, events.size()); assertTrue(stream.isPaused()); }
@Test public void testObjectMapping() { JsonParser parser = JsonParser.newParser(); List<Object> values = new ArrayList<>(); parser.objectValueMode(); parser.handler(event -> values.add(event.mapTo(TheObject.class))); parser.handle(new JsonObject().put("f", "the-value").toBuffer()); assertEquals(Collections.singletonList(new TheObject("the-value")), values); }
private void doTestDelimitedMaxRecordSize(final Buffer input, Buffer delim, Integer[] chunkSizes, int maxRecordSize, Handler<Throwable> exHandler, final Buffer... expected) { final Buffer[] results = new Buffer[expected.length]; Handler<Buffer> out = new Handler<Buffer>() { int pos; public void handle(Buffer buff) { results[pos++] = buff; } }; RecordParser parser = RecordParser.newDelimited(delim, out); parser.maxRecordSize(maxRecordSize); parser.exceptionHandler(exHandler); feedChunks(input, parser, chunkSizes); checkResults(expected, results); } }
@Test public void testIllegalArguments() { assertNullPointerException(() -> RecordParser.newDelimited((Buffer) null, handler -> {})); assertNullPointerException(() -> RecordParser.newDelimited((String) null, handler -> {})); RecordParser parser = RecordParser.newDelimited("", handler -> {}); assertNullPointerException(() -> parser.setOutput(null)); assertNullPointerException(() -> parser.delimitedMode((Buffer) null)); assertNullPointerException(() -> parser.delimitedMode((String) null)); assertIllegalArgumentException(() -> parser.maxRecordSize(-1)); }
private void doTestDelimited(final Buffer input, Buffer delim, Integer[] chunkSizes, final Buffer... expected) { final Buffer[] results = new Buffer[expected.length]; Handler<Buffer> out = new Handler<Buffer>() { int pos; public void handle(Buffer buff) { results[pos++] = buff; } }; RecordParser parser = RecordParser.newDelimited(delim, out); feedChunks(input, parser, chunkSizes); checkResults(expected, results); }
private void feedChunks(Buffer input, RecordParser parser, Integer[] chunkSizes) { int pos = 0; int chunkPos = 0; while (pos < input.length()) { int chunkSize = chunkSizes[chunkPos++]; if (chunkPos == chunkSizes.length) chunkPos = 0; int end = pos + chunkSize; end = end <= input.length() ? end : input.length(); Buffer sub = input.getBuffer(pos, end); parser.handle(sub); pos += chunkSize; } }
@Override public BatchStream fetch(long l) { recordParser.fetch(l); return this; }
private void doTestFixed(final Buffer input, Integer[] chunkSizes, final Buffer... expected) { final Buffer[] results = new Buffer[expected.length]; class MyHandler implements Handler<Buffer> { int pos; RecordParser parser = RecordParser.newFixed(expected[0].length(), this); public void handle(Buffer buff) { results[pos++] = buff; if (pos < expected.length) { parser.fixedSizeMode(expected[pos].length()); } } } MyHandler out = new MyHandler(); feedChunks(input, out.parser, chunkSizes); checkResults(expected, results); }
@Override public ReadStream<Buffer> resume() { resumeCount++; return fetch(Long.MAX_VALUE); }
void handle(String s) { handle(Buffer.buffer(s)); }
@Test /* * test issue-209 */ public void testSpreadDelimiter() { doTestDelimited(Buffer.buffer("start-a-b-c-dddabc"), Buffer.buffer("abc"), new Integer[] { 18 }, Buffer.buffer("start-a-b-c-ddd")); doTestDelimited(Buffer.buffer("start-abc-dddabc"), Buffer.buffer("abc"), new Integer[] { 18 }, Buffer.buffer("start-"), Buffer.buffer("-ddd")); doTestDelimited(Buffer.buffer("start-ab-c-dddabc"), Buffer.buffer("abc"), new Integer[] { 18 }, Buffer.buffer("start-ab-c-ddd")); }
@Test public void testStreamPause() { FakeStream stream = new FakeStream(); JsonParser parser = JsonParser.newParser(stream); List<JsonEvent> events = new ArrayList<>(); parser.handler(events::add); parser.pause(); stream.handle("1234"); assertTrue(stream.isPaused()); assertEquals(0, events.size()); }
@Test public void testObjectMappingWithTypeReference() { JsonParser parser = JsonParser.newParser(); List<Object> values = new ArrayList<>(); parser.objectValueMode(); parser.handler(event -> values.add(event.mapTo(new TypeReference<TheObject>() {}))); parser.handle(new JsonObject().put("f", "the-value").toBuffer()); assertEquals(Collections.singletonList(new TheObject("the-value")), values); }
@Test public void testStreamResume() { FakeStream stream = new FakeStream(); JsonParser parser = JsonParser.newParser(stream); List<JsonEvent> events = new ArrayList<>(); parser.handler(events::add); parser.pause(); stream.handle("{}"); parser.resume(); assertEquals(2, events.size()); assertFalse(stream.isPaused()); }
@Test public void testStreamHandle() { FakeStream stream = new FakeStream(); JsonParser parser = JsonParser.newParser(stream); List<JsonEvent> events = new ArrayList<>(); parser.handler(events::add); stream.handle("{}"); assertFalse(stream.isPaused()); assertEquals(2, events.size()); }
@Test public void testStreamPauseInHandler() { FakeStream stream = new FakeStream(); JsonParser parser = JsonParser.newParser(stream); List<JsonEvent> events = new ArrayList<>(); parser.handler(event -> { assertTrue(events.isEmpty()); events.add(event); parser.pause(); }); stream.handle("{}"); assertEquals(1, events.size()); assertTrue(stream.isPaused()); }