Alright let me try to explain this.

There are two parameters to this specific buffer operation:
* `Observable<BufferOpening>`
* `Func1<BufferOpening, Observable<BufferClosing>>`

The `Observable<BufferOpening>` produces a `BufferOpening` object at times 50 and 200. The `Func1<BufferOpening, Observable<BufferClosing>>` when called produces an `Observable<BufferClosing>` which produces a `BufferClosing` object after a delay of 100. 

So in essence this test should see two non-connected buffers being created:
* **Buffer 1**: from 50 to 150
* **Buffer 2**: from 200 to 300

If we apply this operator with these parameters to the `source` `Observable<String>`, then Buffer 1 should contain: `"two", "three"` and Buffer 2 should contain: `"five"`.

I'm not entirely sure why they (Rx .NET) opted for a `Func1` over a single `Observable`, but this is the only thing that made sense to me. Suppose for instance the following:

You create a buffer `t=50` and you create another buffer at `t=100`. At `t=150` you want to close the buffer created at `t=100`, and at `t=200` you want to close the buffer created at `t=50`. The only way to do this is with multiple `Observable<BufferClosing>`s (one for each buffer, dictating when to close it).

I hope this makes some sense...