@SuppressWarnings("unchecked") private static Map<String, ? super Object> toMap(final V8Object v8Object, final V8Map<Object> cache, final TypeAdapter adapter) { if (v8Object == null) { return Collections.emptyMap(); } if (cache.containsKey(v8Object)) { return (Map<String, ? super Object>) cache.get(v8Object); } Map<String, ? super Object> result = new V8PropertyMap<Object>(); cache.put(v8Object, result); String[] keys = v8Object.getKeys(); for (String key : keys) { Object object = null; int type = V8Value.UNDEFINED; try { object = v8Object.get(key); type = v8Object.getType(key); Object value = getValue(object, type, cache, adapter); if (value != IGNORE) { result.put(key, value); } } finally { if (object instanceof Releasable) { ((Releasable) object).release(); } } } return result; }
@Override public void putAll(final Map<? extends String, ? extends V> m) { for (Entry<? extends String, ? extends V> entry : m.entrySet()) { this.put(entry.getKey(), entry.getValue()); } }
@Test public void testPropertyMapWithNulls() { V8PropertyMap<Object> map = new V8PropertyMap<Object>(); map.put("foo", null); assertNull(map.get("foo")); }
@Test public void testPropertyMapClear() { V8PropertyMap<Object> map = new V8PropertyMap<Object>(); map.put("bar", new Object()); map.put("foo", null); map.clear(); assertEquals(0, map.size()); }
@Test public void testPropertyMapRemove() { V8PropertyMap<Object> map = new V8PropertyMap<Object>(); map.put("foo", null); assertNull(map.remove("foo")); assertEquals(0, map.size()); }
@Test public void testPropertyMapContainsNullValue() { V8PropertyMap<Object> map = new V8PropertyMap<Object>(); map.put("foo", null); assertTrue(map.containsValue(null)); }
@Test public void testPropertyMapEntrySetWithSelf() { V8PropertyMap<Object> map = new V8PropertyMap<Object>(); map.put("foo", null); map.put("one", 1); map.put("two", 2); map.put("three", 3); map.put("self", map); Set<Entry<String, Object>> entrySet = map.entrySet(); assertEquals(5, entrySet.size()); }
@Test public void testPropertyMapGetValues() { V8PropertyMap<Object> map = new V8PropertyMap<Object>(); map.put("foo", map); map.put("bar", null); map.put("baz", null); Collection<Object> values = map.values(); assertEquals(3, values.size()); values.contains(map); values.contains(null); }
@Test public void testPropertyMapSize() { V8PropertyMap<Object> map = new V8PropertyMap<Object>(); map.put("bar", new Object()); map.put("foo", null); assertEquals(2, map.size()); }
@Test public void testPropertyMapGetKeys() { V8PropertyMap<Object> map = new V8PropertyMap<Object>(); map.put("foo", map); map.put("bar", null); map.put("baz", null); Set<String> keys = map.keySet(); assertEquals(3, keys.size()); keys.contains("foo"); keys.contains("bar"); keys.contains("baz"); }
@Test public void testPropertyMapIsNotEmpty() { V8PropertyMap<Object> map = new V8PropertyMap<Object>(); map.put("foo", null); assertFalse(map.isEmpty()); }
@Test public void testPropertyMapHashIsConstant() { V8PropertyMap<Object> map = new V8PropertyMap<Object>(); int hashCode = map.hashCode(); map.put("foo", map); assertEquals(hashCode, map.hashCode()); }
@Test public void testPropertyMapEntrySetEmpty() { V8PropertyMap<Object> map = new V8PropertyMap<Object>(); Set<Entry<String, Object>> entrySet = map.entrySet(); assertEquals(0, entrySet.size()); } }
@Test public void testPropertyMapGetValuesEmpty() { V8PropertyMap<Object> map = new V8PropertyMap<Object>(); Collection<Object> values = map.values(); assertEquals(0, values.size()); }
@Test public void testPropertyMapGetKeysEmpty() { V8PropertyMap<Object> map = new V8PropertyMap<Object>(); Set<String> keys = map.keySet(); assertEquals(0, keys.size()); }
@Test public void testPropertyMapIsEmpty() { V8PropertyMap<Object> map = new V8PropertyMap<Object>(); assertTrue(map.isEmpty()); }
@Test public void testPropertyMapPutDuplicateReverse() { V8PropertyMap<Object> map = new V8PropertyMap<Object>(); map.put("foo", null); map.put("foo", map); assertEquals(1, map.size()); assertEquals(map, map.get("foo")); }
@Test public void testPropertyMapContainsSelf() { V8PropertyMap<Object> map = new V8PropertyMap<Object>(); map.put("foo", map); assertNotNull(map.get("foo")); assertEquals(map, map.get("foo")); assertSame(map, map.get("foo")); }
@Test public void testPropertyMapDoesNotContainNullValue() { V8PropertyMap<Object> map = new V8PropertyMap<Object>(); map.put("foo", new Object()); assertFalse(map.containsValue(null)); }