@Test public void dispositionFieldShouldParseWhenMaximal() { String maximal = "Disposition: automatic-action/MDN-sent-automatically;processed/error,failed"; Disposition expected = Disposition.builder() .actionMode(DispositionActionMode.Automatic) .sendingMode(DispositionSendingMode.Automatic) .type(DispositionType.Processed) .addModifier(DispositionModifier.Error) .addModifier(DispositionModifier.Failed) .build(); Parser parser = Parboiled.createParser(MDNReportParser.Parser.class); ParsingResult<Object> result = new ReportingParseRunner<>(parser.dispositionField()).run(maximal); assertThat(result.matched).isTrue(); assertThat(result.resultValue).isInstanceOf(Disposition.class); assertThat((Disposition)result.resultValue).isEqualTo(expected); }
@Test public void errorFieldShouldParse() { String error = "Error: Message1"; Parser parser = Parboiled.createParser(MDNReportParser.Parser.class); ParsingResult<Object> result = new ReportingParseRunner<>(parser.errorField()).run(error); assertThat(result.matched).isTrue(); assertThat(result.resultValue).isInstanceOf(Error.class); assertThat((Error)result.resultValue).isEqualTo(new Error(Text.fromRawText("Message1"))); }
@Test public void extensionFieldShouldParse() { String extension = "X-OPENPAAS-IP: 177.177.177.77"; Parser parser = Parboiled.createParser(MDNReportParser.Parser.class); ParsingResult<Object> result = new ReportingParseRunner<>(parser.extentionField()).run(extension); assertThat(result.matched).isTrue(); assertThat(result.resultValue).isInstanceOf(ExtensionField.class); assertThat((ExtensionField)result.resultValue).isEqualTo(ExtensionField.builder().fieldName("X-OPENPAAS-IP").rawValue(" 177.177.177.77").build()); } }
Rule dispositionField() { return Sequence( push(Disposition.builder()), "Disposition", ":", ows(), dispositionMode(), ows(), ";", ows(), dispositionType(), Optional( Sequence( ows(), "/", ows(), dispositionModifier(), ACTION(addDispositionModifier()), ZeroOrMore( Sequence( ows(), ",", dispositionModifier(), ACTION(addDispositionModifier()))))), ows(), ACTION(buildDispositionField())); }
@Test public void dispositionFieldShouldParseWhenManualAutomaticWithDisplayedType() { String disposition = "Disposition: manual-action/MDN-sent-automatically;processed"; Disposition expected = Disposition.builder() .actionMode(DispositionActionMode.Manual) .sendingMode(DispositionSendingMode.Automatic) .type(DispositionType.Processed) .build(); Parser parser = Parboiled.createParser(MDNReportParser.Parser.class); ParsingResult<Object> result = new ReportingParseRunner<>(parser.dispositionField()).run(disposition); assertThat(result.matched).isTrue(); assertThat(result.resultValue).isInstanceOf(Disposition.class); assertThat((Disposition)result.resultValue).isEqualTo(expected); }
Rule lf() { return Ch((char)0x0A); }
Rule cr() { return Ch((char)0x0D); }
@Test public void dispositionFieldShouldParseWhenDispatchedType() { String disposition = "Disposition: automatic-action/MDN-sent-manually;dispatched"; Disposition expected = Disposition.builder() .actionMode(DispositionActionMode.Automatic) .sendingMode(DispositionSendingMode.Manual) .type(DispositionType.Dispatched) .build(); Parser parser = Parboiled.createParser(MDNReportParser.Parser.class); ParsingResult<Object> result = new ReportingParseRunner<>(parser.dispositionField()).run(disposition); assertThat(result.matched).isTrue(); assertThat(result.resultValue).isInstanceOf(Disposition.class); assertThat((Disposition)result.resultValue).isEqualTo(expected); }
@Test public void dispositionFieldShouldParseWhenDeletedType() { String disposition = "Disposition: automatic-action/MDN-sent-manually;deleted"; Disposition expected = Disposition.builder() .actionMode(DispositionActionMode.Automatic) .sendingMode(DispositionSendingMode.Manual) .type(DispositionType.Deleted) .build(); Parser parser = Parboiled.createParser(MDNReportParser.Parser.class); ParsingResult<Object> result = new ReportingParseRunner<>(parser.dispositionField()).run(disposition); assertThat(result.matched).isTrue(); assertThat(result.resultValue).isInstanceOf(Disposition.class); assertThat((Disposition)result.resultValue).isEqualTo(expected); }
@Test public void dispositionFieldShouldParseWhenMinimal() { String minimal = "Disposition: automatic-action/MDN-sent-automatically;processed"; Disposition expected = Disposition.builder() .actionMode(DispositionActionMode.Automatic) .sendingMode(DispositionSendingMode.Automatic) .type(DispositionType.Processed) .build(); Parser parser = Parboiled.createParser(MDNReportParser.Parser.class); ParsingResult<Object> result = new ReportingParseRunner<>(parser.dispositionField()).run(minimal); assertThat(result.matched).isTrue(); assertThat(result.resultValue).isInstanceOf(Disposition.class); assertThat((Disposition)result.resultValue).isEqualTo(expected); }
Rule htab() { return Ch((char)0x09); }
@Test public void dispositionFieldShouldParseWhenDisplayedType() { String disposition = "Disposition: automatic-action/MDN-sent-manually;displayed"; Disposition expected = Disposition.builder() .actionMode(DispositionActionMode.Automatic) .sendingMode(DispositionSendingMode.Manual) .type(DispositionType.Displayed) .build(); Parser parser = Parboiled.createParser(MDNReportParser.Parser.class); ParsingResult<Object> result = new ReportingParseRunner<>(parser.dispositionField()).run(disposition); assertThat(result.matched).isTrue(); assertThat(result.resultValue).isInstanceOf(Disposition.class); assertThat((Disposition)result.resultValue).isEqualTo(expected); }
@Test public void dispositionFieldShouldParseWhenAutomaticManualWithDisplayedType() { String disposition = "Disposition: automatic-action/MDN-sent-manually;processed"; Disposition expected = Disposition.builder() .actionMode(DispositionActionMode.Automatic) .sendingMode(DispositionSendingMode.Manual) .type(DispositionType.Processed) .build(); Parser parser = Parboiled.createParser(MDNReportParser.Parser.class); ParsingResult<Object> result = new ReportingParseRunner<>(parser.dispositionField()).run(disposition); assertThat(result.matched).isTrue(); assertThat(result.resultValue).isInstanceOf(Disposition.class); assertThat((Disposition)result.resultValue).isEqualTo(expected); }
Rule dquote() { return Ch((char)0x22); }
Rule finalRecipientField() { return Sequence( push(FinalRecipient.builder()), "Final-Recipient", ":", ows(), addressType(), ACTION(setFinalAddressType()), ows(), ";", ows(), genericAddress(), ACTION(setFinalGenericAddress()), ows(), ACTION(buildFinalRecipient())); }
Rule originalRecipientField() { return Sequence( push(OriginalRecipient.builder()), "Original-Recipient", ":", ows(), addressType(), ACTION(setOriginalAddressType()), ows(), ";", ows(), genericAddress(), ACTION(setOriginalGenericAddress()), ows(), ACTION(buildOriginalRecipient())); }
Rule sp() { return Ch((char)0x20); }
Rule extentionField() { return Sequence( push(ExtensionField.builder()), extensionFieldName(), ACTION(setExtensionFieldName()), ":", ZeroOrMore(Sequence(Optional(fws()), text())), ACTION(setExtensionText()), ACTION(buildExtension())); }
Rule dispositionType() { return FirstOf( Sequence("displayed", ACTION(setDispositionType(DispositionType.Displayed))), Sequence("deleted", ACTION(setDispositionType(DispositionType.Deleted))), Sequence("dispatched", ACTION(setDispositionType(DispositionType.Dispatched))), Sequence("processed", ACTION(setDispositionType(DispositionType.Processed)))); }
Rule sendingMode() { return FirstOf( Sequence("MDN-sent-manually", ACTION(setSendingMode(DispositionSendingMode.Manual))), Sequence("MDN-sent-automatically", ACTION(setSendingMode(DispositionSendingMode.Automatic)))); }