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); }
private void delimited(Buffer delim) { int lines = 50; Buffer[] expected = new Buffer[lines]; //We create lines of length zero to <lines> and shuffle them List<Buffer> lineList = generateLines(lines, true, delim.getByte(0)); expected = lineList.toArray(expected); int totLength = lines * (lines - 1) / 2; // The sum of 0...(lines - 1) Buffer inp = Buffer.buffer(totLength + lines * delim.length()); for (int i = 0; i < lines; i++) { inp.appendBuffer(expected[i]); inp.appendBuffer(delim); } //We then try every combination of chunk size up to twice the input string length for (int i = 1; i < inp.length() * 2; i++) { doTestDelimited(inp, delim, new Integer[]{i}, expected); } //Then we try a sequence of random chunk sizes List<Integer> chunkSizes = generateChunkSizes(lines); //Repeat a few times for (int i = 0; i < 10; i++) { Collections.shuffle(chunkSizes); doTestDelimited(inp, delim, chunkSizes.toArray(new Integer[]{}), expected); } }
@Test /* Test parsing with fixed size records */ public void testFixed() { int lines = 50; Buffer[] expected = new Buffer[lines]; //We create lines of length zero to <lines> and shuffle them List<Buffer> lineList = generateLines(lines, false, (byte) 0); expected = lineList.toArray(expected); int totLength = lines * (lines - 1) / 2; // The sum of 0...(lines - 1) Buffer inp = Buffer.buffer(totLength); for (int i = 0; i < lines; i++) { inp.appendBuffer(expected[i]); } //We then try every combination of chunk size up to twice the input string length for (int i = 1; i < inp.length() * 2; i++) { doTestFixed(inp, new Integer[]{i}, expected); } //Then we try a sequence of random chunk sizes List<Integer> chunkSizes = generateChunkSizes(lines); //Repeat a few times for (int i = 0; i < 10; i++) { Collections.shuffle(chunkSizes); doTestFixed(inp, chunkSizes.toArray(new Integer[]{}), expected); } }
@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 testDelimitedMaxRecordSize() { doTestDelimitedMaxRecordSize(Buffer.buffer("ABCD\nEFGH\n"), Buffer.buffer("\n"), new Integer[] { 2 }, 4, null, Buffer.buffer("ABCD"), Buffer.buffer("EFGH")); doTestDelimitedMaxRecordSize(Buffer.buffer("A\nBC10\nDEFGHIJKLM\n"), Buffer.buffer("\n"), new Integer[] { 2 }, 10, null, Buffer.buffer("A"), Buffer.buffer("BC10"), Buffer.buffer("DEFGHIJKLM")); doTestDelimitedMaxRecordSize(Buffer.buffer("AB\nC\n\nDEFG\n\n"), Buffer.buffer("\n\n"), new Integer[] { 2 }, 4, null, Buffer.buffer("AB\nC"), Buffer.buffer("DEFG")); doTestDelimitedMaxRecordSize(Buffer.buffer("AB--C---D-"), Buffer.buffer("-"), new Integer[] { 3 }, 2, null, Buffer.buffer("AB"), Buffer.buffer(""), Buffer.buffer("C"), Buffer.buffer(""), Buffer.buffer(""), Buffer.buffer("D")); try { doTestDelimitedMaxRecordSize(Buffer.buffer("ABCD--"), Buffer.buffer("--"), new Integer[] { 2 }, 3, null, Buffer.buffer()); fail("should throw exception"); } catch (IllegalStateException ex) { /*OK*/ } AtomicBoolean handled = new AtomicBoolean(); Handler<Throwable> exHandler = throwable -> handled.set(true); doTestDelimitedMaxRecordSize(Buffer.buffer("ABCD--"), Buffer.buffer("--"), new Integer[] { 2 }, 3, exHandler, Buffer.buffer("ABCD")); assertTrue(handled.get()); }
types.add(expected[7].length()); feedChunks(input, out.parser, new Integer[]{50, 10, 3});
@Test /* Test parsing with fixed size records */ public void testFixed() { int lines = 50; Buffer[] expected = new Buffer[lines]; //We create lines of length zero to <lines> and shuffle them List<Buffer> lineList = generateLines(lines, false, (byte) 0); expected = lineList.toArray(expected); int totLength = lines * (lines - 1) / 2; // The sum of 0...(lines - 1) Buffer inp = Buffer.buffer(totLength); for (int i = 0; i < lines; i++) { inp.appendBuffer(expected[i]); } //We then try every combination of chunk size up to twice the input string length for (int i = 1; i < inp.length() * 2; i++) { doTestFixed(inp, new Integer[]{i}, expected); } //Then we try a sequence of random chunk sizes List<Integer> chunkSizes = generateChunkSizes(lines); //Repeat a few times for (int i = 0; i < 10; i++) { Collections.shuffle(chunkSizes); doTestFixed(inp, chunkSizes.toArray(new Integer[]{}), expected); } }
@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 testDelimitedMaxRecordSize() { doTestDelimitedMaxRecordSize(Buffer.buffer("ABCD\nEFGH\n"), Buffer.buffer("\n"), new Integer[] { 2 }, 4, null, Buffer.buffer("ABCD"), Buffer.buffer("EFGH")); doTestDelimitedMaxRecordSize(Buffer.buffer("A\nBC10\nDEFGHIJKLM\n"), Buffer.buffer("\n"), new Integer[] { 2 }, 10, null, Buffer.buffer("A"), Buffer.buffer("BC10"), Buffer.buffer("DEFGHIJKLM")); doTestDelimitedMaxRecordSize(Buffer.buffer("AB\nC\n\nDEFG\n\n"), Buffer.buffer("\n\n"), new Integer[] { 2 }, 4, null, Buffer.buffer("AB\nC"), Buffer.buffer("DEFG")); doTestDelimitedMaxRecordSize(Buffer.buffer("AB--C---D-"), Buffer.buffer("-"), new Integer[] { 3 }, 2, null, Buffer.buffer("AB"), Buffer.buffer(""), Buffer.buffer("C"), Buffer.buffer(""), Buffer.buffer(""), Buffer.buffer("D")); try { doTestDelimitedMaxRecordSize(Buffer.buffer("ABCD--"), Buffer.buffer("--"), new Integer[] { 2 }, 3, null, Buffer.buffer()); fail("should throw exception"); } catch (IllegalStateException ex) { /*OK*/ } AtomicBoolean handled = new AtomicBoolean(); Handler<Throwable> exHandler = throwable -> handled.set(true); doTestDelimitedMaxRecordSize(Buffer.buffer("ABCD--"), Buffer.buffer("--"), new Integer[] { 2 }, 3, exHandler, Buffer.buffer("ABCD")); assertTrue(handled.get()); }
types.add(expected[7].length()); feedChunks(input, out.parser, new Integer[]{50, 10, 3});
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 delimited(Buffer delim) { int lines = 50; Buffer[] expected = new Buffer[lines]; //We create lines of length zero to <lines> and shuffle them List<Buffer> lineList = generateLines(lines, true, delim.getByte(0)); expected = lineList.toArray(expected); int totLength = lines * (lines - 1) / 2; // The sum of 0...(lines - 1) Buffer inp = Buffer.buffer(totLength + lines * delim.length()); for (int i = 0; i < lines; i++) { inp.appendBuffer(expected[i]); inp.appendBuffer(delim); } //We then try every combination of chunk size up to twice the input string length for (int i = 1; i < inp.length() * 2; i++) { doTestDelimited(inp, delim, new Integer[]{i}, expected); } //Then we try a sequence of random chunk sizes List<Integer> chunkSizes = generateChunkSizes(lines); //Repeat a few times for (int i = 0; i < 10; i++) { Collections.shuffle(chunkSizes); doTestDelimited(inp, delim, chunkSizes.toArray(new Integer[]{}), expected); } }
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); } }
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); }
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 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); } }