@Test
public void testDecodeLastNonEmptyBuffer() {

    EmbeddedChannel channel = new EmbeddedChannel(new ByteToMessageDecoder() {
        private boolean decodeLast;
        @Override
        protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
            int readable = in.readableBytes();
            assertTrue(readable > 0);
            if (!decodeLast && readable == 1) {
                return;
            }
            out.add(in.readBytes(decodeLast ? readable : readable - 1));
        }
        @Override
        protected void decodeLast(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
            assertFalse(decodeLast);
            decodeLast = true;
            super.decodeLast(ctx, in, out);
        }
    });
    byte[] bytes = new byte[1024];
    PlatformDependent.threadLocalRandom().nextBytes(bytes);
    assertTrue(channel.writeInbound(Unpooled.wrappedBuffer(bytes)));
    assertBuffer(Unpooled.wrappedBuffer(bytes, 0, bytes.length - 1), (ByteBuf) channel.readInbound());
    assertNull(channel.readInbound());
    assertTrue(channel.finish());
    assertBuffer(Unpooled.wrappedBuffer(bytes, bytes.length - 1, 1), (ByteBuf) channel.readInbound());
    assertNull(channel.readInbound());
}