@Test
public void shouldRemovePropertyNamesFromLoadedPropertiesAndMapWhenRemovePropertiesIsCalled() {
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);
lazyProperties.get(propertyName2);
lazyProperties.remove(Sets.newSet(propertyName1));
lazyProperties.get(propertyName1);
lazyProperties.get(propertyName2);
verify(elementLoader, times(2)).getProperty(propertyName1, lazyProperties);
verify(elementLoader, times(1)).getProperty(propertyName2, lazyProperties);
assertEquals(propertyValue1, properties.get(propertyName1));
assertEquals(propertyValue2, properties.get(propertyName2));
}