CascadingMap implements Map<K, V> { @Override public boolean containsValue(Object value) { return combine().containsValue(value); } CascadingMap();  CascadingMap(Iterable<Map<K, V>> sources);  CascadingMap(Map<K, V>... sources); List<Map<K, V>> getSources(); @Override void clear(); @Override boolean containsKey(Object key); @Override boolean containsValue(Object value); @Override Set<Map.Entry<K, V>> entrySet(); @Override V get(Object key); @Override boolean isEmpty(); @Override Set<K> keySet(); @Override V put(K key, V value); @Override void putAll(Map<? extends K, ? extends V> map); @Override V remove(Object key); @Override int size(); @Override Collection<V> values(); @Override boolean equals(Object object); @Override int hashCode(); @Override String toString();  }
@Test public void test_containsValue_first() { assertTrue(cascading.containsValue("key0source1")); }
@Test public void test_containsValue_second() { assertTrue(cascading.containsValue("key2source2")); }
@Test public void test_containsValue_both() { assertTrue(cascading.containsValue("key1source1")); }
@Test public void test_containsValue_overridden() { assertFalse(cascading.containsValue("key1source2")); }
@Test public void test_containsValue_unknown() { assertFalse(cascading.containsValue("unknown")); }
@Test public void test_containsValue_null() { assertTrue(cascading.containsValue(null)); }