@@ -0,0 +1,2424 @@
+package reactfx;%0A%0Aimport static org.junit.Assert.*;%0A%0Aimport java.util.ArrayList;%0Aimport java.util.Arrays;%0Aimport java.util.List;%0A%0Aimport org.junit.Test;%0A%0Apublic class InterceptableEventStreamTest %7B%0A%0A    @Test%0A    public void testInterceptionStacking() %7B%0A        EventSource%3CInteger%3E src = new EventSource%3C%3E();%0A        InterceptableEventStream%3CInteger%3E stream = src.interceptable();%0A        List%3CInteger%3E accum = new ArrayList%3C%3E();%0A        stream.subscribe(i -%3E accum.add(i));%0A%0A        src.push(1);%0A        src.push(2);%0A        assertEquals(Arrays.asList(1, 2), accum);%0A        stream.pauseWhile(() -%3E %7B%0A            src.push(3);%0A            src.push(4);%0A            stream.fuseWhile((Integer a, Integer b) -%3E %7B%0A                if(a + b == 0) %7B%0A                    return FusionResult.annihilated();%0A                %7D else if(a + b %3C= 20) %7B%0A                    return FusionResult.fused(a + b);%0A                %7D else %7B%0A                    return FusionResult.failed();%0A                %7D%0A            %7D, () -%3E %7B%0A                src.push(5);%0A                src.push(6);%0A                src.push(7);%0A                src.push(8);%0A                src.push(9);%0A                src.push(-7);%0A                stream.retainLatestWhile(() -%3E %7B%0A                    src.push(100);%0A                    src.push(200);%0A                    src.push(-10);%0A                %7D);%0A                src.push(4);%0A                stream.fuseWhile((Integer a, Integer b) -%3E a + b, () -%3E %7B%0A                    src.push(1);%0A                    src.push(2);%0A                    src.push(3);%0A                    stream.muteWhile(() -%3E %7B%0A                        src.push(4);%0A                        src.push(5);%0A                        src.push(6);%0A                    %7D);%0A                %7D);%0A                src.push(5);%0A                src.push(10);%0A                src.push(10);%0A            %7D);%0A            src.push(5);%0A        %7D);%0A        assertEquals(Arrays.asList(1, 2, 3, 4, 18, 15, 20, 5), accum);%0A        src.push(4);%0A        assertEquals(Arrays.asList(1, 2, 3, 4, 18, 15, 20, 5, 4), accum);%0A    %7D%0A%0A    @Test(expected = IllegalStateException.class)%0A    public void testInteceptionReleaseOrder() %7B%0A        EventSource%3CInteger%3E src = new EventSource%3C%3E();%0A        InterceptableEventStream%3CInteger%3E stream = src.interceptable();%0A        Hold h1 = stream.pause();%0A        Hold h2 = stream.retainLatest();%0A        h1.close();%0A        h2.close();%0A    %7D%0A%7D%0A

Add tests for interceptable streams.