package com.hubspot.jinjava.util; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.entry; import java.util.Map; import org.junit.Before; import org.junit.Test; import com.google.common.collect.ImmutableMap; public class ScopeMapTest { Map<String, String> a, b, c; @Before public void setup() { a = ImmutableMap.of("a1", "va1", "a2", "va2"); b = ImmutableMap.of("a2", "vb2", "a3", "vb3"); c = ImmutableMap.of("a1", "vc1", "a3", "vc3"); } @Test public void noParent() { ScopeMap<String, String> map = new ScopeMap<String, String>(); map.put("a", "v"); assertThat(map).contains(entry("a", "v")); assertThat(map).containsKeys("a"); assertThat(map).containsValue("v"); } @Test public void withParent() { ScopeMap<String, String> map = new ScopeMap<String, String>( new ScopeMap<String, String>( new ScopeMap<String, String>(null, a), b), c); assertThat(map.get("a1")).isEqualTo("vc1"); assertThat(map.get("a2")).isEqualTo("vb2"); assertThat(map.get("a3")).isEqualTo("vc3"); assertThat(map.get("a5", "foo")).isEqualTo("foo"); map.put("a4", "vc4"); assertThat(map).contains(entry("a4", "vc4")); assertThat(map.getParent()).doesNotContainKey("a4"); assertThat(map).hasSize(4); assertThat(map.keySet()).containsOnly("a1", "a2", "a3", "a4"); assertThat(map.values()).containsOnly("vc1", "vb2", "vc3", "vc4"); assertThat(map).containsOnly(entry("a1", "vc1"), entry("a2", "vb2"), entry("a3", "vc3"), entry("a4", "vc4")); } }