/* * Copyright 2002-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springframework.web.context.request.async; import org.junit.Test; import org.springframework.web.context.request.async.DeferredResult.DeferredResultHandler; import static org.junit.Assert.*; import static org.mockito.Mockito.*; /** * DeferredResult tests. * * @author Rossen Stoyanchev */ public class DeferredResultTests { @Test public void setResult() { DeferredResultHandler handler = mock(DeferredResultHandler.class); DeferredResult<String> result = new DeferredResult<>(); result.setResultHandler(handler); assertTrue(result.setResult("hello")); verify(handler).handleResult("hello"); } @Test public void setResultTwice() { DeferredResultHandler handler = mock(DeferredResultHandler.class); DeferredResult<String> result = new DeferredResult<>(); result.setResultHandler(handler); assertTrue(result.setResult("hello")); assertFalse(result.setResult("hi")); verify(handler).handleResult("hello"); } @Test public void isSetOrExpired() { DeferredResultHandler handler = mock(DeferredResultHandler.class); DeferredResult<String> result = new DeferredResult<>(); result.setResultHandler(handler); assertFalse(result.isSetOrExpired()); result.setResult("hello"); assertTrue(result.isSetOrExpired()); verify(handler).handleResult("hello"); } @Test public void hasResult() { DeferredResultHandler handler = mock(DeferredResultHandler.class); DeferredResult<String> result = new DeferredResult<>(); result.setResultHandler(handler); assertFalse(result.hasResult()); assertNull(result.getResult()); result.setResult("hello"); assertEquals("hello", result.getResult()); } @Test public void onCompletion() throws Exception { final StringBuilder sb = new StringBuilder(); DeferredResult<String> result = new DeferredResult<>(); result.onCompletion(new Runnable() { @Override public void run() { sb.append("completion event"); } }); result.getInterceptor().afterCompletion(null, null); assertTrue(result.isSetOrExpired()); assertEquals("completion event", sb.toString()); } @Test public void onTimeout() throws Exception { final StringBuilder sb = new StringBuilder(); DeferredResultHandler handler = mock(DeferredResultHandler.class); DeferredResult<String> result = new DeferredResult<>(null, "timeout result"); result.setResultHandler(handler); result.onTimeout(new Runnable() { @Override public void run() { sb.append("timeout event"); } }); result.getInterceptor().handleTimeout(null, null); assertEquals("timeout event", sb.toString()); assertFalse("Should not be able to set result a second time", result.setResult("hello")); verify(handler).handleResult("timeout result"); } }