public FormetaReader() { super(new FormetaRecordsReader(), new FormetaDecoder()); }
@Override protected void onSetReceiver() { emitter.setReceiver(getReceiver()); }
public TextParserState processChar(final char ch, final TextParserContext ctx) { final TextParserState newState; switch(ch) { case Formeta.ESCAPE_CHAR: ctx.setQuoted(false); newState = ESCAPE_SEQ; break; case Formeta.QUOT_CHAR: ctx.setQuoted(true); newState = QUOTED_TEXT; break; case Formeta.GROUP_START: case Formeta.GROUP_END: case Formeta.ITEM_SEPARATOR: case Formeta.NAME_VALUE_SEPARATOR: ctx.setQuoted(false); newState = DELIMITER_REACHED; break; default: if (Formeta.isWhitespace(ch)) { newState = LEADING_WHITESPACE; } else { ctx.setQuoted(false); ctx.appendChar(ch); newState = TEXT; } } return newState; } },
private void executeEvents() { encoder.startRecord("1"); encoder.literal("lit1", "value 1"); encoder.startEntity(" ent1"); encoder.literal("lit2", "value {x}"); encoder.literal("lit\\3", "value 2 "); encoder.endEntity(); encoder.literal("lit4", "value '3'"); encoder.endRecord(); }
@Test public void testShouldIgnoreIncompleteRecord() { encoder.setStyle(FormatterStyle.CONCISE); encoder.startRecord("incomplete"); encoder.literal("lit", "value"); encoder.startEntity("entity"); executeEvents(); verify(receiver).process(CONCISE_RECORD); verifyNoMoreInteractions(receiver); }
@Override public void endRecord() { formatter.endGroup(); getReceiver().process(formatter.toString()); }
@Test public void testShouldOutputConciseRecordRepresentation() { encoder.setStyle(FormatterStyle.CONCISE); executeEvents(); verify(receiver).process(CONCISE_RECORD); }
@Before public void setup() { MockitoAnnotations.initMocks(this); formetaRecordsReader = new FormetaRecordsReader(); formetaRecordsReader.setReceiver(receiver); }
@Before public void setup() { MockitoAnnotations.initMocks(this); decoder = new FormetaDecoder(); decoder.setReceiver(receiver); }
@Before public void setup() { MockitoAnnotations.initMocks(this); encoder = new FormetaEncoder(); encoder.setReceiver(receiver); }
public void appendChar(final char ch) { text.append(ch); if (quoted || !Formeta.isWhitespace(ch)) { lengthWithoutTrailingWs = text.length(); } }
private void emitRecord() { final String record = builder.toString(); getReceiver().process(record); builder.delete(0, builder.length()); }
@After public void cleanup() { encoder.closeStream(); }
@After public void cleanup() { formetaRecordsReader.closeStream(); }
@After public void cleanup() { decoder.closeStream(); }
@Test public void shouldProcessSingleRecord() { final StringReader reader = new StringReader(SINGLE_RECORD); formetaRecordsReader.process(reader); verify(receiver).process(SINGLE_RECORD); verifyNoMoreInteractions(receiver); }
@Test public void testShouldProcessRecords() { decoder.process(RECORD); final InOrder ordered = inOrder(receiver); ordered.verify(receiver).startRecord("1"); ordered.verify(receiver).literal("lit1", "value 1"); ordered.verify(receiver).startEntity(" ent1"); ordered.verify(receiver).literal("lit2", "value {x}"); ordered.verify(receiver).literal("lit\\3", "value 2 "); ordered.verify(receiver).endEntity(); ordered.verify(receiver).literal("lit4", "value '3'"); ordered.verify(receiver).endRecord(); }
@Test public void testShouldOutputMultilineRecordRepresentation() { encoder.setStyle(FormatterStyle.MULTILINE); executeEvents(); verify(receiver).process(MULTILINE_RECORD); }
public TextParserState processChar(final char ch, final TextParserContext ctx) { final TextParserState newState; switch(ch) { case Formeta.GROUP_START: case Formeta.GROUP_END: case Formeta.ITEM_SEPARATOR: case Formeta.NAME_VALUE_SEPARATOR: newState = DELIMITER_REACHED; break; default: if (Formeta.isWhitespace(ch)) { newState = TRAILING_WHITESPACE; } else { final String sep = "', '"; final String expected = "whitespace or one of '" + Formeta.GROUP_START + sep + Formeta.GROUP_END + sep + Formeta.ITEM_SEPARATOR + sep + Formeta.NAME_VALUE_SEPARATOR + "'"; throw new FormatException(getUnexpectedCharMsg(expected, ch)); } } return newState; } },
@Test public void testShouldOutputVerboseRecordRepresentation() { encoder.setStyle(FormatterStyle.VERBOSE); executeEvents(); verify(receiver).process(VERBOSE_RECORD); }