### Question:
NMEAParser extends NMEATalkerIds implements ParserInfo, ChecksumProvider { @Rule("decimal") protected void rpm( float rpm, @ParserContext("data") NMEAObserver data) { data.setRpm(rpm); } NMEAParser(); @RecoverMethod void recover(
            @ParserContext("data") NMEAObserver data,
            @ParserContext("aisBridge") AISBridge aisBridge,
            @ParserContext(ParserConstants.ExpectedDescription) String expected,
            @ParserContext(ParserConstants.INPUTREADER) InputReader reader,
            @ParserContext(ParserConstants.THROWABLE) Throwable thr
            ); void parse(I input, NMEAObserver data, AISObserver aisData); void parse(I input, boolean liveClock, Supplier origin, NMEAObserver data, AISObserver aisData); void parse(I input, GPSClock gpsClock, Supplier origin, NMEAObserver data, AISObserver aisData); void parse(I input, GPSClock gpsClock, Supplier origin, NMEAObserver data, AISObserver aisData, ExecutorService executor); static NMEAParser newInstance(); @Override int lookaheadLength(); @Override Checksum createChecksum();  }### Answer:
@Test public void rpm() { try { String[] nmeas = new String[] { "$GPRPM,S,1,3500.6,5.6,A*64\r\n" }; for (String nmea : nmeas) { System.err.println(nmea); SimpleStorage ss = new SimpleStorage(); NMEAObserver tc = ss.getStorage(NMEAObserver.class); parser.parse(nmea, false, null, tc, null); assertNull(ss.getRollbackReason()); assertEquals(MessageType.RPM, ss.getProperty("messageType")); NMEAContentHelper nch = new NMEAContentHelper(nmea); assertEquals(TalkerId.GP, ss.getProperty("talkerId")); assertEquals(nch.getChar(1), ss.getProperty("rpmSource")); assertEquals(nch.getInt(2), ss.getProperty("rpmSourceNumber")); assertEquals(nch.getFloat(3), ss.getFloat("rpm"), Epsilon); assertEquals(nch.getFloat(4), ss.getFloat("propellerPitch"), Epsilon); assertEquals(nch.getChar(5), ss.getProperty("status")); } } catch (Exception ex) { ex.printStackTrace(); fail(ex.getMessage()); } }