package com.jcwhatever.nucleus.collections.java; import static org.junit.Assert.assertEquals; import com.google.common.collect.Multimap; import com.jcwhatever.nucleus.utils.ArrayUtils; import java.util.Collection; import java.util.Map.Entry; /* * */ public class MultimapRunnable<K, V> implements Runnable { final Multimap<K, V> _map; final K _key1; final K _key2; final K _key3; final V _value1; final V _value2; final V _value3; public MultimapRunnable(Multimap<K, V> map, K key1, K key2, K key3, V value1, V value2, V value3) { _map = map; _key1 = key1; _key2 = key2; _key3 = key3; _value1 = value1; _value2 = value2; _value3 = value3; } @Override public void run() { _map.clear(); assertEquals(0, _map.size()); assertEquals(true, _map.isEmpty()); // test put _map.put(_key1, _value1); _map.put(_key1, _value2); assertEquals(2, _map.size()); assertEquals(true, _map.containsKey(_key1)); assertEquals(true, _map.containsEntry(_key1, _value1)); assertEquals(true, _map.containsEntry(_key1, _value2)); assertEquals(false, _map.containsEntry(_key1, _value3)); // test removeAll Collection<V> removed = _map.removeAll(_key1); assertEquals(2, removed.size()); assertEquals(true, removed.contains(_value1)); assertEquals(true, removed.contains(_value2)); assertEquals(false, removed.contains(_value3)); assertEquals(0, _map.size()); // test putAll assertEquals(true, _map.putAll(_key1, ArrayUtils.asList(_value1, _value2, _value3))); assertEquals(3, _map.size()); assertEquals(true, _map.containsKey(_key1)); assertEquals(true, _map.containsEntry(_key1, _value1)); assertEquals(true, _map.containsEntry(_key1, _value2)); assertEquals(true, _map.containsEntry(_key1, _value3)); // test replaceValues Collection<V> previous = _map.replaceValues(_key1, ArrayUtils.asList(_value1)); assertEquals(3, previous.size()); assertEquals(true, _map.containsKey(_key1)); assertEquals(true, _map.containsEntry(_key1, _value1)); assertEquals(false, _map.containsEntry(_key1, _value2)); assertEquals(false, _map.containsEntry(_key1, _value3)); _map.clear(); assertEquals(0, _map.size()); SetRunnable<K> setTest = new SetRunnable<>(_map.keySet(), _key1, _key2, _key3); setTest.run(); _map.clear(); assertEquals(0, _map.size()); CollectionRunnable<V> valuesTest = new CollectionRunnable<V>(_map.values(), _value1, _value2, _value3); valuesTest.run(); _map.clear(); assertEquals(0, _map.size()); CollectionRunnable<Entry<K, V>> entryTest = new CollectionRunnable<>(_map.entries(), getEntry(_key1, _value1), getEntry(_key2, _value2), getEntry(_key3, _value3)); entryTest.run(); _map.clear(); assertEquals(0, _map.size()); MapRunnable<K, Collection<V>> mapTest = new MapRunnable<>(_map.asMap(), _key1, _key2, _key3, ArrayUtils.asList(_value1), ArrayUtils.asList(_value1, _value2), ArrayUtils.asList(_value1, _value2, _value3)); mapTest.run(); } private Entry<K, V> getEntry(final K key, final V value) { return new Entry<K, V>() { V val = value; @Override public K getKey() { return key; } @Override public V getValue() { return val; } @Override public V setValue(V value) { V prev = val; val = value; return prev; } }; } }