1/* 2 * Copyright (C) 2011 The Guava Authors 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.google.common.util.concurrent; 18 19import static org.easymock.EasyMock.createMock; 20import static org.easymock.EasyMock.expect; 21import static org.easymock.EasyMock.replay; 22import static org.easymock.EasyMock.verify; 23 24import com.google.common.util.concurrent.ForwardingCheckedFuture.SimpleForwardingCheckedFuture; 25 26import junit.framework.TestCase; 27 28import java.io.IOException; 29import java.util.concurrent.TimeUnit; 30import java.util.concurrent.TimeoutException; 31 32/** 33 * Test for {@link ForwardingCheckedFuture} 34 * 35 * @author Anthony Zana 36 */ 37public class ForwardingCheckedFutureTest extends TestCase { 38 private static final String VALUE = "delegated"; 39 private static final TimeUnit TIME_UNIT = TimeUnit.MILLISECONDS; 40 41 @SuppressWarnings("unchecked") 42 private CheckedFuture<String, IOException> delegate = 43 createMock(CheckedFuture.class); 44 45 private TestDelegateFuture forwarded = new TestDelegateFuture(); 46 private TestSimpleFuture simple = new TestSimpleFuture(); 47 48 public void testCheckedGet() throws IOException { 49 expect(delegate.checkedGet()).andReturn(VALUE).times(2); 50 replay(delegate); 51 assertEquals(VALUE, forwarded.checkedGet()); 52 assertEquals(VALUE, simple.checkedGet()); 53 verify(delegate); 54 } 55 56 public void testTimedCheckedGet() throws TimeoutException, IOException { 57 expect(delegate.checkedGet(100, TIME_UNIT)).andReturn(VALUE).times(2); 58 replay(delegate); 59 assertEquals(VALUE, forwarded.checkedGet(100, TIME_UNIT)); 60 assertEquals(VALUE, simple.checkedGet(100, TIME_UNIT)); 61 verify(delegate); 62 } 63 64 public void testTimedCheckedGet_timeout() 65 throws IOException, TimeoutException { 66 expect(delegate.checkedGet(100, TIME_UNIT)) 67 .andThrow(new TimeoutException()).times(2); 68 replay(delegate); 69 try { 70 forwarded.checkedGet(100, TIME_UNIT); 71 fail(); 72 } catch (TimeoutException expected) {} 73 try { 74 simple.checkedGet(100, TIME_UNIT); 75 fail(); 76 } catch (TimeoutException expected) {} 77 verify(delegate); 78 } 79 80 public void testCheckedGetException() throws IOException { 81 IOException expected = new IOException("expected"); 82 expect(delegate.checkedGet()).andThrow(expected).times(2); 83 replay(delegate); 84 try { 85 delegate.checkedGet(); 86 fail(); 87 } catch (IOException e) { 88 assertEquals(expected.getMessage(), e.getMessage()); 89 } 90 try { 91 simple.checkedGet(); 92 fail(); 93 } catch (IOException e) { 94 assertEquals(expected.getMessage(), e.getMessage()); 95 } 96 verify(delegate); 97 } 98 99 private class TestDelegateFuture 100 extends ForwardingCheckedFuture<String, IOException> { 101 @Override 102 protected CheckedFuture<String, IOException> delegate() { 103 return delegate; 104 } 105 } 106 107 private class TestSimpleFuture 108 extends SimpleForwardingCheckedFuture<String, IOException> { 109 public TestSimpleFuture() { 110 super(delegate); 111 } 112 } 113 114} 115