I've improved the test cases for the various buffer operations. I did not find any empty buffers being emitted in the `testObservableBasedOpenerAndCloser` test case. 

I did find two empty buffers being emitted in the `testObservableBasedCloser` test case. But this was due to the chosen bufferCloser function. In this test case it basically emulates a periodic buffer emitter, which emits a buffer every 100 ms. Because the original input `Observable` is completed after 500 ms, it produces 5 complete buffers. This explains the three expected buffers and the two empty buffers. I've updated the test case to avoid this confusion. 

Any thoughts on this?