|
16 | 16 | package rx.plugins;
|
17 | 17 |
|
18 | 18 | import static org.junit.Assert.assertEquals;
|
| 19 | +import static org.junit.Assert.assertNotNull; |
| 20 | +import static org.junit.Assert.assertNull; |
19 | 21 | import static org.junit.Assert.assertSame;
|
20 | 22 | import static org.junit.Assert.assertTrue;
|
21 | 23 | import static org.junit.Assert.fail;
|
22 | 24 |
|
| 25 | +import java.util.Calendar; |
| 26 | +import java.util.Collections; |
| 27 | +import java.util.Date; |
| 28 | +import java.util.concurrent.TimeUnit; |
| 29 | + |
23 | 30 | import org.junit.After;
|
24 | 31 | import org.junit.Before;
|
25 | 32 | import org.junit.Test;
|
26 | 33 |
|
27 | 34 | import rx.Observable;
|
28 | 35 | import rx.Subscriber;
|
| 36 | +import rx.exceptions.OnErrorThrowable; |
| 37 | +import rx.functions.Func1; |
29 | 38 |
|
30 | 39 | public class RxJavaPluginsTest {
|
31 | 40 |
|
@@ -78,7 +87,18 @@ public void handleError(Throwable e) {
|
78 | 87 | this.e = e;
|
79 | 88 | count++;
|
80 | 89 | }
|
| 90 | + } |
81 | 91 |
|
| 92 | + public static class RxJavaErrorHandlerTestImplWithRender extends RxJavaErrorHandler { |
| 93 | + @Override |
| 94 | + protected String render(Object item) { |
| 95 | + if (item instanceof Calendar) { |
| 96 | + throw new IllegalArgumentException("calendar"); |
| 97 | + } else if (item instanceof Date) { |
| 98 | + return String.valueOf(((Date) item).getTime()); |
| 99 | + } |
| 100 | + return null; |
| 101 | + } |
82 | 102 | }
|
83 | 103 |
|
84 | 104 | @Test
|
@@ -149,12 +169,86 @@ public void testOnErrorWhenNotImplemented() {
|
149 | 169 | assertEquals(1, errorHandler.count);
|
150 | 170 | }
|
151 | 171 |
|
| 172 | + @Test |
| 173 | + public void testOnNextValueRenderingWhenNotImplemented() { |
| 174 | + RxJavaErrorHandlerTestImpl errorHandler = new RxJavaErrorHandlerTestImpl(); |
| 175 | + RxJavaPlugins.getInstance().registerErrorHandler(errorHandler); |
| 176 | + |
| 177 | + String rendering = RxJavaPlugins.getInstance().getErrorHandler().handleOnNextValueRendering(new Date()); |
| 178 | + |
| 179 | + assertNull(rendering); |
| 180 | + } |
| 181 | + |
| 182 | + @Test |
| 183 | + public void testOnNextValueRenderingWhenImplementedAndNotManaged() { |
| 184 | + RxJavaErrorHandlerTestImplWithRender errorHandler = new RxJavaErrorHandlerTestImplWithRender(); |
| 185 | + RxJavaPlugins.getInstance().registerErrorHandler(errorHandler); |
| 186 | + |
| 187 | + String rendering = RxJavaPlugins.getInstance().getErrorHandler().handleOnNextValueRendering( |
| 188 | + Collections.emptyList()); |
| 189 | + |
| 190 | + assertNull(rendering); |
| 191 | + } |
| 192 | + |
| 193 | + @Test |
| 194 | + public void testOnNextValueRenderingWhenImplementedAndManaged() { |
| 195 | + RxJavaErrorHandlerTestImplWithRender errorHandler = new RxJavaErrorHandlerTestImplWithRender(); |
| 196 | + RxJavaPlugins.getInstance().registerErrorHandler(errorHandler); |
| 197 | + long time = 1234L; |
| 198 | + Date date = new Date(time); |
| 199 | + |
| 200 | + String rendering = RxJavaPlugins.getInstance().getErrorHandler().handleOnNextValueRendering(date); |
| 201 | + |
| 202 | + assertNotNull(rendering); |
| 203 | + assertEquals(String.valueOf(time), rendering); |
| 204 | + } |
| 205 | + |
| 206 | + @Test |
| 207 | + public void testOnNextValueRenderingWhenImplementedAndThrows() { |
| 208 | + RxJavaErrorHandlerTestImplWithRender errorHandler = new RxJavaErrorHandlerTestImplWithRender(); |
| 209 | + RxJavaPlugins.getInstance().registerErrorHandler(errorHandler); |
| 210 | + Calendar cal = Calendar.getInstance(); |
| 211 | + |
| 212 | + String rendering = RxJavaPlugins.getInstance().getErrorHandler().handleOnNextValueRendering(cal); |
| 213 | + |
| 214 | + assertNotNull(rendering); |
| 215 | + assertEquals(cal.getClass().getName() + RxJavaErrorHandler.ERROR_IN_RENDERING_SUFFIX, rendering); |
| 216 | + } |
| 217 | + |
| 218 | + @Test |
| 219 | + public void testOnNextValueCallsPlugin() { |
| 220 | + RxJavaErrorHandlerTestImplWithRender errorHandler = new RxJavaErrorHandlerTestImplWithRender(); |
| 221 | + RxJavaPlugins.getInstance().registerErrorHandler(errorHandler); |
| 222 | + long time = 456L; |
| 223 | + Date date = new Date(time); |
| 224 | + |
| 225 | + try { |
| 226 | + Date notExpected = Observable.just(date) |
| 227 | + .map(new Func1<Date, Date>() { |
| 228 | + @Override |
| 229 | + public Date call(Date date) { |
| 230 | + throw new IllegalStateException("Trigger OnNextValue"); |
| 231 | + } |
| 232 | + }) |
| 233 | + .timeout(500, TimeUnit.MILLISECONDS) |
| 234 | + .toBlocking().first(); |
| 235 | + fail("Did not expect onNext/onCompleted, got " + notExpected); |
| 236 | + } catch (IllegalStateException e) { |
| 237 | + assertEquals("Trigger OnNextValue", e.getMessage()); |
| 238 | + assertNotNull(e.getCause()); |
| 239 | + assertTrue(e.getCause() instanceof OnErrorThrowable.OnNextValue); |
| 240 | + assertEquals("OnError while emitting onNext value: " + time, e.getCause().getMessage()); |
| 241 | + } |
| 242 | + |
| 243 | + } |
| 244 | + |
152 | 245 | // inside test so it is stripped from Javadocs
|
153 | 246 | public static class RxJavaObservableExecutionHookTestImpl extends RxJavaObservableExecutionHook {
|
154 | 247 | // just use defaults
|
155 | 248 | }
|
156 | 249 |
|
157 | 250 | private static String getFullClassNameForTestClass(Class<?> cls) {
|
158 |
| - return RxJavaPlugins.class.getPackage().getName() + "." + RxJavaPluginsTest.class.getSimpleName() + "$" + cls.getSimpleName(); |
| 251 | + return RxJavaPlugins.class.getPackage() |
| 252 | + .getName() + "." + RxJavaPluginsTest.class.getSimpleName() + "$" + cls.getSimpleName(); |
159 | 253 | }
|
160 | 254 | }
|
0 commit comments