public Object get(final String name) { final Object value; if (loadedProperties.contains(name)) { value = properties.get(name); } else { value = valueLoader.getProperty(name, this); put(name, value); } return value; }
@Test public void shouldNotLoadPropertyWhenLoaded() { // Given final ElementValueLoader elementLoader = mock(ElementValueLoader.class); final String propertyName = "property name"; final String exceptedPropertyValue = "property value"; final Properties properties = new Properties(propertyName, exceptedPropertyValue); final LazyProperties lazyProperties = new LazyProperties(properties, elementLoader); given(elementLoader.getProperty(propertyName, lazyProperties)).willReturn(exceptedPropertyValue); // When final Object propertyValue = lazyProperties.get(propertyName); // Then assertEquals(exceptedPropertyValue, propertyValue); verify(elementLoader, never()).getProperty(propertyName, lazyProperties); }
@Test public void shouldAddPropertyToMapWhenAddingProperty() { // Given final ElementValueLoader elementLoader = mock(ElementValueLoader.class); final Properties properties = new Properties(); final String propertyName = "property name"; final String propertyValue = "property value"; final LazyProperties lazyProperties = new LazyProperties(properties, elementLoader); given(elementLoader.getProperty(propertyName, lazyProperties)).willReturn(propertyValue); // When lazyProperties.put(propertyName, propertyValue); // Then verify(elementLoader, never()).getProperty(propertyName, lazyProperties); assertEquals(propertyValue, properties.get(propertyName)); }
@Test public void shouldClearLoadedPropertiesAndMapWhenClearIsCalled() { // Given final ElementValueLoader elementLoader = mock(ElementValueLoader.class); final Properties properties = new Properties(); final String propertyName = "property name"; final String propertyValue = "property value"; final LazyProperties lazyProperties = new LazyProperties(properties, elementLoader); given(elementLoader.getProperty(propertyName, lazyProperties)).willReturn(propertyValue); lazyProperties.get(propertyName); // call it to load the value. // When lazyProperties.clear(); lazyProperties.get(propertyName); // Then verify(elementLoader, times(2)).getProperty(propertyName, lazyProperties); // should be called twice before and after clear() assertEquals(propertyValue, properties.get(propertyName)); }
@Test public void shouldRemovePropertyNameFromLoadedPropertiesAndMapWhenRemoveIsCalled() { // Given final ElementValueLoader elementLoader = mock(ElementValueLoader.class); final Properties properties = new Properties(); final String propertyName = "property name"; final String propertyValue = "property value"; final LazyProperties lazyProperties = new LazyProperties(properties, elementLoader); given(elementLoader.getProperty(propertyName, lazyProperties)).willReturn(propertyValue); lazyProperties.get(propertyName); // call it to load the value. // When lazyProperties.remove(propertyName); lazyProperties.get(propertyName); // Then verify(elementLoader, times(2)).getProperty(propertyName, lazyProperties); // should be called twice before and after removeProperty() assertEquals(propertyValue, properties.get(propertyName)); }
@Test public void shouldRemovePropertyNameFromLoadedPropertiesAndMapWhenKeepOnlyThesePropertiesIsCalled() { // Given final ElementValueLoader elementLoader = mock(ElementValueLoader.class); final Properties properties = new Properties(); final String propertyName1 = "property name1"; final String propertyName2 = "property name2"; final String propertyValue1 = "property value1"; final String propertyValue2 = "property value2"; final LazyProperties lazyProperties = new LazyProperties(properties, elementLoader); given(elementLoader.getProperty(propertyName1, lazyProperties)).willReturn(propertyValue1); given(elementLoader.getProperty(propertyName2, lazyProperties)).willReturn(propertyValue2); lazyProperties.get(propertyName1); // call it to load value 1. lazyProperties.get(propertyName2); // call it to load value 2. // When lazyProperties.keepOnly(Sets.newSet(propertyName2)); lazyProperties.get(propertyName1); lazyProperties.get(propertyName2); // Then verify(elementLoader, times(2)).getProperty(propertyName1, lazyProperties); verify(elementLoader, times(1)).getProperty(propertyName2, lazyProperties); assertEquals(propertyValue1, properties.get(propertyName1)); assertEquals(propertyValue2, properties.get(propertyName2)); }
@Test public void shouldRemovePropertyNamesFromLoadedPropertiesAndMapWhenRemovePropertiesIsCalled() { // Given final ElementValueLoader elementLoader = mock(ElementValueLoader.class); final Properties properties = new Properties(); final String propertyName1 = "property name1"; final String propertyName2 = "property name2"; final String propertyValue1 = "property value1"; final String propertyValue2 = "property value2"; final LazyProperties lazyProperties = new LazyProperties(properties, elementLoader); given(elementLoader.getProperty(propertyName1, lazyProperties)).willReturn(propertyValue1); given(elementLoader.getProperty(propertyName2, lazyProperties)).willReturn(propertyValue2); lazyProperties.get(propertyName1); // call it to load value 1. lazyProperties.get(propertyName2); // call it to load value 2. // When lazyProperties.remove(Sets.newSet(propertyName1)); lazyProperties.get(propertyName1); lazyProperties.get(propertyName2); // Then verify(elementLoader, times(2)).getProperty(propertyName1, lazyProperties); verify(elementLoader, times(1)).getProperty(propertyName2, lazyProperties); assertEquals(propertyValue1, properties.get(propertyName1)); assertEquals(propertyValue2, properties.get(propertyName2)); }
@Test public void shouldDelegatePutPropertyToLazyProperties() { // Given final Entity entity = new Entity("group"); final ElementValueLoader entityLoader = mock(ElementValueLoader.class); final LazyEntity lazyEntity = new LazyEntity(entity, entityLoader); final String propertyName = "property name"; final String propertyValue = "property value"; // When lazyEntity.putProperty(propertyName, propertyValue); // Then verify(entityLoader, never()).getProperty(propertyName, lazyEntity.getProperties()); assertEquals(propertyValue, entity.getProperty(propertyName)); assertEquals(propertyValue, lazyEntity.getProperty(propertyName)); }
@Test public void shouldLoadPropertyFromLoader() { // Given final Entity entity = new Entity("group"); final ElementValueLoader entityLoader = mock(ElementValueLoader.class); final LazyEntity lazyEntity = new LazyEntity(entity, entityLoader); final String propertyName = "property name"; final String exceptedPropertyValue = "property value"; given(entityLoader.getProperty(propertyName, lazyEntity.getProperties())).willReturn(exceptedPropertyValue); // When Object propertyValue = lazyEntity.getProperty(propertyName); // Then assertEquals(exceptedPropertyValue, propertyValue); }
@Test public void shouldLoadPropertyFromLazyProperties() { // Given final Edge edge = new Edge.Builder().build(); final ElementValueLoader edgeLoader = mock(ElementValueLoader.class); final LazyEdge lazyEdge = new LazyEdge(edge, edgeLoader); final String propertyName = "property name"; final String exceptedPropertyValue = "property value"; given(edgeLoader.getProperty(propertyName, lazyEdge.getProperties())).willReturn(exceptedPropertyValue); // When Object propertyValue = lazyEdge.getProperty(propertyName); // Then assertEquals(exceptedPropertyValue, propertyValue); }
@Test public void shouldLoadPropertyWhenNotLoaded() { // Given final ElementValueLoader elementLoader = mock(ElementValueLoader.class); final Properties properties = new Properties(); final String propertyName = "property name"; final String exceptedPropertyValue = "property value"; final LazyProperties lazyProperties = new LazyProperties(properties, elementLoader); given(elementLoader.getProperty(propertyName, lazyProperties)).willReturn(exceptedPropertyValue); // When final Object propertyValue = lazyProperties.get(propertyName); // Then assertEquals(exceptedPropertyValue, propertyValue); assertEquals(propertyValue, properties.get(propertyName)); }
public Object get(final String name) { final Object value; if (loadedProperties.contains(name)) { value = properties.get(name); } else { value = valueLoader.getProperty(name, this); put(name, value); } return value; }