package org.jtwig.util.builder; import com.google.common.base.Predicate; import org.junit.Test; import java.util.HashMap; import java.util.Map; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertThat; public class MapBuilderTest { @Test public void addShouldAppendToMap() throws Exception { Object parent = new Object(); Object value = new Object(); String key = "key"; Object preAddedValue = new Object(); String preAddedKey = "test"; Map<String, Object> map = new HashMap<>(); map.put(preAddedKey, preAddedValue); MapBuilder<Object, String, Object> underTest = new MapBuilder<>(parent, map); Map<String, Object> result = underTest.add(key, value).build(); assertThat(result.get(key), is(value)); assertThat(result.get(preAddedKey), is(preAddedValue)); assertThat(result.size(), is(2)); } @Test public void addMapShouldAppend() throws Exception { Object parent = new Object(); Object value = new Object(); String key = "key"; Object preAddedValue = new Object(); String preAddedKey = "test"; Map<String, Object> map = new HashMap<>(); map.put(preAddedKey, preAddedValue); MapBuilder<Object, String, Object> underTest = new MapBuilder<>(parent, map); HashMap<String, Object> newValues = new HashMap<>(); newValues.put(key, value); Map<String, Object> result = underTest.add(newValues).build(); assertThat(result.get(key), is(value)); assertThat(result.get(preAddedKey), is(preAddedValue)); assertThat(result.size(), is(2)); } @Test public void setShouldOverride() throws Exception { Object parent = new Object(); Object value = new Object(); String key = "key"; Object preAddedValue = new Object(); String preAddedKey = "test"; Map<String, Object> map = new HashMap<>(); map.put(preAddedKey, preAddedValue); MapBuilder<Object, String, Object> underTest = new MapBuilder<>(parent, map); HashMap<String, Object> newValues = new HashMap<>(); newValues.put(key, value); Map<String, Object> result = underTest.set(newValues).build(); assertThat(result.get(key), is(value)); assertThat(result.containsKey(preAddedKey), is(false)); assertThat(result.size(), is(1)); } @Test public void filterShouldLeaveOnesReturningTrue() throws Exception { Object parent = new Object(); final String preAddedKey1 = "test1"; final String preAddedKey2 = "test2"; Object preAddedValue1 = new Object(); Object preAddedValue2 = new Object(); Map<String, Object> map = new HashMap<>(); map.put(preAddedKey1, preAddedValue1); map.put(preAddedKey2, preAddedValue2); MapBuilder<Object, String, Object> underTest = new MapBuilder<>(parent, map); Map<String, Object> result = underTest.filter(new Predicate<Map.Entry<String, Object>>() { @Override public boolean apply(Map.Entry<String, Object> input) { return input.getKey().equals(preAddedKey2); } }).build(); assertThat(result.get(preAddedKey2), is(preAddedValue2)); assertThat(result.containsKey(preAddedKey1), is(false)); assertThat(result.size(), is(1)); } @Test public void andReturnsArgument() throws Exception { Object parent = new Object(); MapBuilder<Object, String, Object> underTest = new MapBuilder<>(parent); assertSame(underTest.and(), parent); } }