/******************************************************************************* * Copyright (c) 2011, 2015 EclipseSource and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * EclipseSource - initial API and implementation ******************************************************************************/ package org.eclipse.rap.rwt.internal.util; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import org.eclipse.rap.rwt.internal.util.SharedInstanceBuffer.InstanceCreator; import org.junit.Before; import org.junit.Test; public class SharedInstanceBuffer_Test { private SharedInstanceBuffer<Object,Object> keyValueStore; private Object key; private Object value; @Before public void setUp() { key = new Object(); value = new Object(); keyValueStore = new SharedInstanceBuffer<Object,Object>(); } @Test public void testGet_callsInstanceCreator() { InstanceCreator<Object, Object> instanceCreator = mockInstanceCreator( value ); Object returnedValue = keyValueStore.get( key, instanceCreator ); verify( instanceCreator ).createInstance( key ); assertSame( returnedValue, value ); } @Test public void testGet_cachesValue() { InstanceCreator<Object, Object> instanceCreator = mockInstanceCreator( value ); Object returned1 = keyValueStore.get( key, instanceCreator ); Object returned2 = keyValueStore.get( key, instanceCreator ); verify( instanceCreator, times( 1 ) ).createInstance( key ); assertSame( returned1, returned2 ); } @Test public void testGet_acceptsNullKey() { Object returnedValue = keyValueStore.get( null, mockInstanceCreator( value ) ); assertSame( value, returnedValue ); } @Test( expected = NullPointerException.class ) public void testGet_rejectsNullValueCreator() { keyValueStore.get( new Object(), null ); } @Test public void testGet_acceptsRemovedKey() { InstanceCreator<Object, Object> instanceCreator = mockInstanceCreator( value ); keyValueStore.get( key, instanceCreator ); keyValueStore.remove( key ); Object returnedValue = keyValueStore.get( key, instanceCreator ); verify( instanceCreator, times( 2 ) ).createInstance( key ); assertSame( returnedValue, value ); } @Test public void testRemove_acceptsNonExistingKey() { Object removedValue = keyValueStore.remove( new Object() ); assertNull( removedValue ); } @Test public void testRemove_removesExistingKey() { keyValueStore.get( key, mockInstanceCreator( value ) ); Object removed = keyValueStore.remove( key ); assertSame( value, removed ); } @Test public void testRemove_acceptsNullKey() { keyValueStore.get( null, mockInstanceCreator( value ) ); Object removed = keyValueStore.remove( null ); assertSame( value, removed ); } @SuppressWarnings( "unchecked" ) private static InstanceCreator<Object, Object> mockInstanceCreator( Object value ) { InstanceCreator mock = mock( InstanceCreator.class ); when( mock.createInstance( any() ) ).thenReturn( value ); return mock; } }